Django 实现用户认证set_Cookie

时间:2024-10-12 20:37:43

当用户通过认证时,set_Cookie(key, value)

request.Cookie.get(key) 如果key不为空,就说明验证通过,否者重新跳转回login登录页面

对于URL

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^tp1/', views.tp1),
url(r'^user_list', views.user_list),
url(r'^login', views.login),
url(r'^Order/', views.Order.as_view()),
url(r'^index/', views.index)
]

对于views文件

user = {'name':'dacengzi', 'password':123}
def login(request):
if request.method == 'GET': #如果进来的方式是GET,直接跳转
return render(request, 'login.html')
elif request.method == 'POST': #如果是POST,说明用户已经上传
username = request.POST.get('username') #获取用户名
password = int(request.POST.get('password')) #获取密码
current_time = datetime.datetime.utcnow() #当前时间
current_time = current_time + datetime.timedelta(seconds=5) #当前时间推迟5秒 if username == user['name'] and password == user['password']: #如果用户名和密码匹配
req = redirect('/index/') req.set_cookie('correct', username, expires=current_time) #设置Cookie标志位
return req
else:
return render(request, 'login.html')
def auth(func):
def inner(request, *args, **kwargs):
answer = request.COOKIES.get('correct') #接收验证所得的标志位
if not answer: #如果没有收到重新跳转回登录界面
return render(request, 'login.html')
else: # 如果有就执行Order文件
return func(request, *args, **kwargs)
return inner
from django.utils.decorators import method_decorator
from django import views
@method_decorator(auth, name='dispatch') #给dispatch加装饰器,程序一进来就进行验证
class Order(views.View):
def get(self, request):
u = request.COOKIES.get('correct') #获取u,进行传递
return render(request, 'index.html', {'u': u}) def index(request):
return render(request, 'index.html')

对于login文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login/" method="post">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>