• django之cookie


    定义:具体一个浏览器针对一个服务器有值(key-value)

    设置cookie

    views.py

    from django.shortcuts import render, HttpResponse, redirect
    
    # Create your views here.
    
    
    from app01.models import UserInfo
    
    
    def login(request):
        if request.method == 'POST':
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
    
            user = UserInfo.objects.filter(user=user, pwd=pwd).first()
    
            if user:
                '''
                响应体:
                    return HttpResponse()
                    return render()
                    return redirect() 
                
                响应体都可以设置cookie
                '''
    
                response = HttpResponse('登陆成功')
                response.set_cookie('is_login', True)
                response.set_cookie('username', user.user) # 后面登陆的会把前面的覆盖
    
                return response
    
        return render(request, 'login.html')
    
    
    def index(request):
        print(request.COOKIES)  # {'csrftoken': '略', 'is_login': 'True'}
    
        is_login = request.COOKIES.get('is_login')
    
        if is_login:
            username = request.COOKIES.get('username')
            return render(request, 'index.html', locals())
        else:
            return redirect('/login')

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
    
    <h3>Hi, {{ username }}</h3>
    </body>
    </html>

    cookie参数

    '''
    class HttpResponseBase:
    
            def set_cookie(self, key,                 键
                         value='',            值
                         max_age=None,        超长时间 
                                  cookie需要延续的时间(以秒为单位)
                                  如果参数是 None`` ,这个cookie会延续到浏览器关闭为止。
    
                         expires=None,        超长时间
                                     expires默认None ,cookie失效的实际日期/时间。 
                                    
    
                         path='/',           Cookie生效的路径,
                                                     浏览器只会把cookie回传给带有该路径的页面,这样可以避免将
                                                     cookie传给站点中的其他的应用。
                                                     / 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
                         
                                 domain=None,         Cookie生效的域名
                                                    
                                                      你可用这个参数来构造一个跨站cookie。
                                                      如, domain=".example.com"
                                                      所构造的cookie对下面这些站点都是可读的:
                                                      www.example.com 、 www2.example.com 
                                     和an.other.sub.domain.example.com 。
                                                      如果该参数设置为 None ,cookie只能由设置它的站点读取。
    
                         secure=False,        如果设置为 True ,浏览器将通过HTTPS来回传cookie。
                         httponly=False       只能http协议传输,无法被JavaScript获取
                                                     (不是绝对,底层抓包可以获取到也可以被覆盖)
                      ): pass
    
    '''

    实操

    def login(request):
        if request.method == 'POST':
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
    
            user = UserInfo.objects.filter(user=user, pwd=pwd).first()
    
            if user:
                '''
                响应体:
                    return HttpResponse()
                    return render()
                    return redirect() 
                
                响应体都可以设置cookie
                '''
    
                response = HttpResponse('登陆成功')
                response.set_cookie('is_login', True, max_age=15)
                # import datetime
                # data = datetime.datetime(year=2019, month=2, day=1, hour=9, minute=28, second=30)  # GMT时间,固定在哪一个时刻失效
                # response.set_cookie('username', user.user, expires=data)  # 后面登陆的会把前面的覆盖
    
                response.set_cookie('username', user.user, path='/index/')  # 只有index下的视图函数可以获得这个cookie
    
                return response
    
        return render(request, 'login.html')

    cookie应用之保存上次访问时间

    def index(request):
        print(request.COOKIES)  # {'csrftoken': '略', 'is_login': 'True'}
    
        is_login = request.COOKIES.get('is_login')
    
        if is_login:
            username = request.COOKIES.get('username')
            
            # 保存上次访问时间
            import datetime
            now = datetime.datetime.now().strftime('%Y-%m-%d %X')
    
            last_time = request.COOKIES.get('last_visit_time','') # 记录的上次访问index的时间,如果记录login的就写到login里面
            response = render(request, 'index.html', {'username': username, 'last_time': last_time})
            response.set_cookie('last_visit_time', now)  # 把上次时间保存到cookie
            return response
        else:
            return redirect('/login')

  • 相关阅读:
    LeetCode: Maximum Product Subarray 解题报告
    LeetCode: Populating Next Right Pointers in Each Node II 解题报告
    LeetCode: Populating Next Right Pointers in Each Node 解题报告
    LeetCode: Word Search 解题报告
    C语言文件操作
    多线程
    C语言函数指针的使用
    进程
    网络编程
    进程间通信——管道通信
  • 原文地址:https://www.cnblogs.com/lshedward/p/10351912.html
Copyright © 2020-2023  润新知