zoukankan      html  css  js  c++  java
  • Django基础之Session操作

    1. 创建一个示例

    1.1 第一步

    首先创建一个django项目,创建app01, 连接数据库,做好准备工作。

    然后在templates目录下创建两个html:

    login.html负责登录页面;

    backend页面代表后台页面。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4    <meta charset="UTF-8">
     5    <title>login</title>
     6    <link rel="stylesheet" href="http://830909.blog.51cto.com/static/plugins/bootstrap-3.3.5-dist/css/bootstrap.min.css">
     7 </head>
     8 <body>
     9    <div class="container">
    10        <form action="login.html" method="post">
    11            <div class="form-group">
    12                <label class="sr-only">username</label>
    13                <input type="text" class="form-control" name="username" placeholder="用户名"/>
    14            </div>
    15            <div class="form-group">
    16                <label class="sr-only">Password</label>
    17                <input type="password" class="form-control" name="passwd" placeholder="密码"/>
    18            </div>
    19            <div class="form-group">
    20                <input class="btn btn-primary" type="submit" value="http://830909.blog.51cto.com/8311014/Submit">
    21            </div>
    22        </form>
    23 </div>
    24 <script type="application/Javascript" src="http://830909.blog.51cto.com/static/js/jquery-2.2.1.min.js"></script>
    25 <script type="application/javascript" src="http://830909.blog.51cto.com/static/plugins/bootstrap-3.3.5-dist/js/bootstrap.min.js"></script>
    26 </body>
    27 </html>
    login.html
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>backend</title>
     6     <link rel="stylesheet" href="http://830909.blog.51cto.com/static/plugins/bootstrap-3.3.5-dist/css/bootstrap.min.css">
     7     <link rel="stylesheet" href="http://830909.blog.51cto.com/static/css/commons.css">
     8 </head>
     9 <body>
    10 <div class="container">
    11     <h2>cookie 内容是 {{ cookie_content }}</h2>
    12     <h2>session 内容是 {{ session_content }}</h2>
    13     <h2>登录用户名 :{{ username }}</h2>
    14     <a href="http://830909.blog.51cto.com/logout/">注销</a>
    15 </div>
    16 <script type="application/javascript" src="http://830909.blog.51cto.com/static/js/jquery-2.2.1.min.js"></script>
    17 <script type="application/javascript" src="http://830909.blog.51cto.com/static/plugins/bootstrap-3.3.5-dist/js/bootstrap.min.js"></script>
    18 </body>
    19 </html>
    backend.html

    1.2 第二步

    编辑app01应用下的views.py文件,编写代码逻辑部分。

     1 # /usr/bin/env python
     2 # coding:utf-8
     3 from django.shortcuts import render
     4 from django.shortcuts import redirect
     5 def login(request):
     6     if request.method=="POST":
     7         username=request.POST['username']
     8         pwd=request.POST['passwd']
     9         if username=='abc' and pwd=='123':
    10             #设置session内部的字典内容
    11             request.session['is_login']='true'
    12             request.session['username']='abc'
    13             #登录成功就将url重定向到后台的url
    14             return redirect('/backend/')
    15     #登录不成功或第一访问就停留在登录页面
    16     return render(request,'login.html')
    17 def backend(request):
    18     """
    19     这里必须用读取字典的get()方法把is_login的value缺省设置为False,
    20     当用户访问backend这个url先尝试获取这个浏览器对应的session中的
    21     is_login的值。如果对方登录成功的话,在login里就已经把is_login
    22     的值修改为了True,反之这个值就是False的
    23     """
    24     is_login=request.session.get('is_login',False)
    25     #如果为真,就说明用户是正常登陆的
    26     if is_login:
    27         #获取字典的内容并传入页面文件
    28         cookie_content=request.COOKIES
    29         session_content=request.session
    30         username=request.session['username']
    31         return render(request,'backend.html',
    32                       {
    33             'cookie_content':cookie_content,
    34             'session_content':session_content,
    35             'username':username
    36                       })
    37     else:
    38         """
    39         如果访问的时候没有携带正确的session,
    40         就直接被重定向url回login页面
    41         """
    42         return redirect('/login/')
    43 def logout(request):
    44     """
    45     直接通过request.session['is_login']回去返回的时候,
    46     如果is_login对应的value值不存在会导致程序异常。所以
    47     需要做异常处理
    48     """
    49     try:
    50         #删除is_login对应的value值
    51         del request.session['is_login']
    52     except KeyError:
    53         pass
    54     #点击注销之后,直接重定向回登录页面
    55     return redirect('/login/')
    views.py

    1.3 编辑

    mydjango目录下的urls.py文件,设置函数与页面的绑定关系。

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^login/', views.login),
        url(r'^backend/', views.backend),
        url(r'^logout/', views.logout),
    ]
    

    最后打开浏览器直接访问/backend/页面的时候直接就被重定向了到/login/ 。

    只有在输入了正确的用户名和密码之后才进入了/backend/页面。

    从上图中我们看到有以下几点:

    • 1. login页面正确登录的话,后台页面可以获取到浏览器携带的cookie的。
    • 2. 第一行的sessionid其实就是cookie值。
    • 3. session的内容是加密的,从客户端获取不到session的内容。
    • 4. 服务端可以通过预设的key值取出session的内容并打印到前端。

    从火狐浏览器里查看cookie:

    django的session默认是存储在数据库里的,我们再到数据库查看一下真正session内容。

     

  • 相关阅读:
    使用 ASP.NET Core MVC 创建 Web API(五)
    使用 ASP.NET Core MVC 创建 Web API(四)
    使用 ASP.NET Core MVC 创建 Web API(三)
    使用 ASP.NET Core MVC 创建 Web API(二)
    使用 ASP.NET Core MVC 创建 Web API(一)
    学习ASP.NET Core Razor 编程系列十九——分页
    学习ASP.NET Core Razor 编程系列十八——并发解决方案
    一个屌丝程序猿的人生(九十八)
    一个屌丝程序猿的人生(九十七)
    一个屌丝程序猿的人生(九十五)
  • 原文地址:https://www.cnblogs.com/yang-wei/p/9998202.html
Copyright © 2011-2022 走看看