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

    Django基础之Session操作

    0|11. 创建一个示例

    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>

     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>

    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/')

    1.3 编辑

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    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内容。

  • 相关阅读:
    CCS
    CCS
    CCS
    CCS
    CCS
    CCS
    CCS
    CCS
    Java之内部类
    Java之回调模式和ThreadLocal
  • 原文地址:https://www.cnblogs.com/Archger/p/12774649.html
Copyright © 2011-2022 走看看