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>
复制代码

 

posted @   梁劲雄  阅读(168)  评论(0编辑  收藏  举报
编辑推荐:
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
阅读排行:
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
· 想让你多爱自己一些的开源计时器
点击右上角即可分享
微信分享提示