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文件,设置函数与页面的绑定关系。
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内容。