day94-django-cookie登录校验
#cookie多用于登录和投票。 #1.cookie是浏览器里的键值对。 #2.cookie在请求头里面,每次向服务器发请求,都带着cookie过去。 #3.当登录成功,服务器给浏览器的cookie设置(添加)键值对,作为下一步访问服务器其他页面的凭证。 #4.服务器的每个页面都有对凭证的判断,当没有凭证时,就是没有登录,返回登录页面, # 如果有凭证,就返回用户请求的内容。 #5.本例使用装饰器封装了判断是否有凭证的代码,当网站内容、页面比较多时,很好用。 #6.set_cookie的值是明文,而set_signed_cookie是给cookie签名,值是密文。 # obj.set_cookie('ticket','val')设置键值对 # request.COOKIES.get('ticket')取值 # # obj.set_signed_cookie('ticket','val',salt='abc')设置键值对,加盐 # request.get_signed_cookie('ticket',salt='abc')取值,写上盐 #7.obj.set_cookie('ticket','val',max_age=10),max_age=10是服务器给浏览器设置的cookie键值对 # 最多保留10秒,10秒后消失(设置超时时间)。
#8.render,redirect,HttpResponse都可以设置cookie。
from django.contrib import admin from django.urls import path from django.shortcuts import render,HttpResponse,redirect def login(request): if request.method == 'GET': return render(request,'login.html') else: name = request.POST.get('name') password = request.POST.get('password') if name == 'a' and password == 's': obj = redirect('/ook/') # 给浏览器设置cookie(键值对),在浏览器的网络-cookie中可看到。 obj.set_cookie('ticket','val',max_age=10) return obj else: return render(request,'login.html',{'error':'姓名或密码错误'}) #装饰器 def wapper(f): def inner(request): # 获取请求头中cookie值(凭证) v = request.COOKIES.get('ticket') # 如果没有这个值(值为空),返回登录页面 if not v: return redirect('/login/')#return这一句下面的代码不执行 # 如果有这个值,返回用户请求的内容 n = f(request) return n return inner @wapper def ook(request): return HttpResponse('ook') @wapper def ook1(request): return HttpResponse('ook1') urlpatterns = [ path('admin/', admin.site.urls), path('login/', login), path('ook/', ook), path('ook1/', ook1), ]
login.html
<body> <form method="POST" action="/login/"> <p>姓名: <input type="text" name="name"> </p> <p>密码: <input type="password" name="password"> </p> <p> <input type="submit" value="登录"> <span style="color:red;">{{ error }}</span> </p> </form> </body>
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
· 想让你多爱自己一些的开源计时器