session【关闭浏览器session失效】安全型较高
数据库上的session(不删还在)
1. 在settings.py中添加
SESSION_ENGINE='django.contrib.sessions.backends.db'
2. settins.py中的MIDDLEWARE 中确保没有注释
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
]
3. settins.py中的INSTALLED_APPS 中确保没有注释
INSTALLED_APPS = [
'django.contrib.sessions',
]
缓存上的session(关浏览器失效)
1. 在settings中添加
SESSION_ENGINE='django.contrib.sessions.backends.cache'
2. settins.py中的MIDDLEWARE 中确保没有注释
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
]
session的建立
- 设置session【request.session[key]=value】
- 获取session【request.session[key]】
- 删除session【del request.session[key]】
登录退出
建立三个path分别对应【登录退出页面(index),登录页面(fform),退出操作(tuichu)】
登录退出页面
从浏览器输入【127.0.0.1:8000/index/】默认使用的是GET方法,从表单传递过来的是POST【method=’post‘】
def index(request):#主页面展示登录|退出
if request.method == 'POST':
'''从表单获取数据'''
request.session['name']=request.POST.get('name')
request.session['pwd']=request.POST.get('pwd')
print(request.session['name'], request.session['pwd'])
'''用户是张三且密码是123才算登录成功'''
if(request.session['name'] == '张三')and(request.session['pwd'] == '123'):
return render(request,'index.html')
else:
request.session['mes']='error!'
return redirect("/fform/")
request.session['mes']=''
return render(request, 'index.html')
设置了session['mes']=''【在fform判断是否正确,或者匹配成功后删除此session】,执行index.html页面,name为空执行else的语句
<body>
<h1>登录|退出</h1>
{% if request.session.name != None %}
<p><span>欢迎:{{ request.session.name }} | <a href="/tuichu/">退出</a> </span></p>
{% else %}
<span><a href="/fform/">登录</a> | <a href="/tuichu/">退出</a> </span>
{% endif %}
</body>
登录页面
点击登录,跳转到登录页面(/fform/),进入froms.html页面
def fform(request):
return render(request,'forms.html')
从index页面获取的mes为空不打印,然后提交使用post请求跳转到登录页面,登录页面获取提交的数据并存入session中【密码可以不存】,由其判断name与pwd是否符合预期值,若符合则进入index.html,若不符合则设置session['mes']并跳转回登录页面,此时的mes不为空,打印其值,【字体设置为红色】
<body>
<form method="post" action="/index/">
{% csrf_token %}
<p><label>
姓名:<input type="text" name="name">
{% if request.session.mes == None %}
<span></span>
{% else %}
<span style="color: red">{{ request.session.mes }}</span>
{% endif %}
</label></p>
<p><label>
密码:<input type="text" name="pwd">
</label></p>
<label>
<input type="submit" value="提交">
</label>
</form>
</body>
退出操作
删除session的name【session['name']失效,即name为空】,并返回登录退出页面
def tuichu(request):
del request.session['name']
del request.session['pwd']
return redirect('/index/')