• 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>
  • 相关阅读:
    java-多个数的和
    大道至简第二章
    大道至简第一章感悟上
    Tools
    LruCache
    Fragment
    科普指纹识别
    Python使用MySQL数据库
    Eclipse中添加PyDev插件
    UniversalAndroidImageLoader出现异常:ImageLoader: Unable to resolve host "https": No address associated with host
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12690226.html
Copyright © 2020-2023  润新知