zoukankan      html  css  js  c++  java
  • Django day14(一) cookie

    一: Cookie
      1.  Cookie是什么?存储在客户端浏览器上的键值对
      2. 原理: 是服务器产生,发给客户端浏览器,浏览器保存起来,下次发请求,会携带这个键值对到服务器

      4. Cookie的覆盖: 先写了一个键值对,后来再写,会把原来的值覆盖掉

      5. cookie使用(**********************)
         1) 写cookie:在Httpresponse这个对象上写  obj.set_cookie(key,value)
         2) 取cookie:从request对象中取,取出来是个字典request.COOKIES
         3) 删除cookie: obj.delete_cookie('name')

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # url(r'^login/', views.login),
        # url(r'^order/', views.order),
        url(r'^shopping/', views.shopping),
        url(r'^salt_cookie/', views.salt_cookie),  # 盐饼干
        url(r'^get_cookie/', views.get_cookie),  # 获取饼干
        url(r'^delete_cookie/', views.delete_cookie),  # 删除饼干
    
    ]

      6. cookie的其他属性
         -加盐cooke

    # set_signed_cookie 本质是set_cookie,只不过是在set_cookie的基础上又做了一个处理
        # 必须加一个参数salt,这就是加盐,他保证了数据的安全
        object.set_signed_cookie('name', 'lqz', salt='123')

         -超时时间max_age,传一个秒的时间 

    # 10秒之后失效 (60*60*24*3)三天失效
     object.set_cookie('name', 'prince', max_age=10)
      -超时时间expires,传一个datatime对象
      -path='/',可以设置路径,设置路径之后,path='/index/',只有访问index的时候,才会携带cookie过来
      -domain 设置域名下有效domain='map.baidu.com'
      -secure=False, (默认是false,设置成True浏览器将通过HTTPS来回传cookie)
      -httponly=True 只能https协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

    关于 next 登录认证的新写法:

    # 旧的login
    def login(request):
        if request.method == 'GET':
            return render(request, 'login.html')
        else:
            name = request.POST('name')
            pwd = request.POST('pwd')
            if name == 'zzd' and pwd == '123':
                obj = HttpResponse('登陆成功')
                obj.set_cookie('is_login', True)
                return obj
    
    
    def order(request):
        is_login = request.COOKIES.get('is_login')
        if is_login:
            return HttpResponse('我是订单页面,要先登录才能看我')
        else:
            return redirect('/login/')
    #
    #
    def shopping(request):
        is_login = request.COOKIES.get('is_login')
        if is_login:
            return HttpResponse('我是购物车,得登录才能看我')
        else:
            return redirect('/login/')
    旧的
    # 新版login
    
    # 登录认证装饰器
    def login_auth(func):
        def inner(request, *args, **kwargs):
            url = request.get_full_path()
            is_login = request.COOKIES.get('is_login')
            if is_login:
                res = func(request, *args, **kwargs)
                return res
            else:
                return redirect('/login/?next=%s' % url)
    
        return inner
    
    
    
    def login(request):
        if request.method == 'GET':
            return render(request, 'login.html')
        else:
            next = request.GET.get('next')
            name = request.POST.get('name')
            pwd = request.POST.get('pwd')
            if name == 'zzd' and pwd == '123':
    
                if next:
                    obj = redirect(next)
                else:
                    obj = redirect('/shopping/')
    
                obj.set_cookie('is_login', True)
                return obj
            else:
                return HttpResponse('用户名或密码错误')
    
    
    
    @login_auth
    def order(request):
        return HttpResponse('我是订单页面,我得登录才能看')
    
    
    @login_auth
    def shopping(request):
        return HttpResponse('我是购物车,得登录才能看我')
    新的

     关于next新写法的意思:

    比如我现在需要进入订单页面, 但是需要登录, 这个时候 next 从定向就会帮你跳转到登录界面, 在你输入完正确的用户名和密码之后又帮你重新跳转回订单页面, 所以这就是取出订单页面的地址, 一旦登录成功, 从定向回到原来要访问的地址

  • 相关阅读:
    深入理解多态..............................
    走过路过 不要错过..
    进军C#..
    员工打卡....
    MySQL
    MySQL
    MySQL
    MySQL
    MySQL
    MySQL
  • 原文地址:https://www.cnblogs.com/zedong/p/10001516.html
Copyright © 2011-2022 走看看