关于Django的session的使用 (装饰器版)
http协议是无状态,无状态的意思是每次请求都是独立的,它的这次请求和下次请求是没有关系的。
这样我们在web要判断是否登录就要传递一种信息给我们的服务器,让服务器根据你给的信息,返回你的东西
。
这里我是直接写如何在Django中使用的。
from django.shortcuts import render, redirect, HttpResponse
from users import models
from functools import wraps
# Create your views here.
# 登录权限控制(session版)
def check_login(func):
@wraps(func)
def inner(request, *args, **kwargs):
if request.session.get("user"):
return func(request, *args, **kwargs)
else:
next_url = request.path_info
print(next_url)
return redirect("/app01/login/?next_url={}".format(next_url))
return inner
# 在login中设置session
def login(request):
error_msg = None
# 如果请求是POST就进去
if request.method == 'POST':
email = request.POST.get('email', None)
pwd = request.POST.get('pwd', None)
next_url = request.GET.get("next_url", None)
if email == 'liuhong@qq.com' and pwd == '123':
# 设置一个session
request.session['user'] = email
if next_url:
req = redirect(next_url) # 得到一个对象
else:
return HttpResponse('没有next_url的返回值')
return req
else:
error_msg = '用户名或密码错误!!'
return render(request, 'session/login.html', {'error': error_msg})
@check_login
def user_list(request):
ret = models.Users.objects.all()
return render(request, 'session/user_list.html', {'user_list': ret})
# 注销函数
def logout(request):
# 只删除session数据
# request.session.delete()
# 如何删除session数据和cookie
request.session.flush()
return redirect("/app01/login/")
这里要注意的是,在你的前端代码中的form表单的提交中的action的设置,要么为空要么就设置为下面哪种
<form class="form-horizontal" action="{{ request.get_full_path }}" method="post">
从csdn搬家过来的可能没有图片,原地址https://blog.csdn.net/weixin_38091140