• python框架之Django(7)-Cookie&Session使用


    Cookie

    添加

    • response.set_cookie

      添加明文cookie

      response.set_cookie(key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False)
    • response.set_signed_cookie

      添加加密cookie

      response.set_signed_cookie(key, value, salt='', **kwargs)
    • 参数说明

      key:键
      value='':值
      max_age=None:超时时间(单位为秒)
      expires=None:超时时间(针对IE)
      path='/': Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
      domain=None:Cookie生效的域名
      secure=False:https传输
      httponly=False:只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

    获取

    • request.COOKIES[key]

      获取明文cookie。

      request.COOKIES['key']
    • request.get_signed_cookie

      获取加密cookie。

      request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
    • 参数说明

      default: 默认值
      salt='': 加密盐
      max_age=None: 后台控制过期时间

    删除

    • delete_cookie

      删除用户浏览器上之前设置的对应key的cookie。

      response.delete_cookie(key, path='/', domain=None)
    •  参数说明

      key:键
      path='/': Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
      domain=None:Cookie生效的域名

    示例

    • cookie版登陆校验

       1 # 校验登录装饰器
       2 def check_login(func):
       3     @wraps(func)
       4     def inner(request, *args, **kwargs):
       5         next_url = request.get_full_path()
       6         # 用登录时设置的盐获取指定key的cookie
       7         if request.get_signed_cookie("isLogin", salt="salt", default=None) == "yes":
       8             # 已经登录的用户
       9             return func(request, *args, **kwargs)
      10         else:
      11             # 没有登录的用户,跳转到登录页面
      12             return redirect("/login/?next={}".format(next_url))
      13     return inner
      14 
      15 # 登录
      16 def login(request):
      17     if request.method == "POST":
      18         username = request.POST.get("username")
      19         passwd = request.POST.get("password")
      20         if username == "username" and passwd == "password":
      21             next_url = request.GET.get("next")
      22             if next_url:
      23                 response = redirect(next_url)
      24             else:
      25                 response = redirect("/home/")
      26             # 设置cookie并加盐
      27             response.set_signed_cookie("isLogin", "yes", salt="salt")
      28             return response
      29     return render(request, "login.html")
      Code

    Session

    添加

    request.session[key] = value
    request.session.setdefault(key,value) # 存在则不设置

    获取

    request.session[key]
    request.session.get(key,default) # 未获取到值时使用默认值default

    删除

    del request.session[key]

    相关方法

    request.session.keys() # 获取所有键
    request.session.values() # 获取所有值
    request.session.items() # 获取所有键值
    request.session.set_expiry(7) # 设置超时时间
    request.session.session_key # 获取sessionid值
    request.session.clear_expired() # 将所有Session失效日期小于当前日期的数据删除 
    request.session.exists(session_key) # 检查会话session的key(sessionid)在数据库中是否存在
    request.session.delete() # 删除当前会话的所有Session数据
    request.session.flush() # 删除当前的会话数据并删除会话的
    request.session.set_expiry(value) Cookie # 设置会话Session和Cookie的超时时间
        * 如果value是个整数,session会在些秒数后失效。
        * 如果value是个datatime或timedelta,session就会在这个时间后失效。
        * 如果value是0,用户关闭浏览器session就会失效。
        * 如果value是None,session会依赖全局session失效策略。

    示例

    • session版校验登录

       1 from functools import wraps
       2 
       3 
       4 def check_login(func):
       5     @wraps(func)
       6     def inner(request, *args, **kwargs):
       7         next_url = request.get_full_path()
       8         if request.session.get("user"):
       9             return func(request, *args, **kwargs)
      10         else:
      11             return redirect("/login/?next={}".format(next_url))
      12     return inner
      13 
      14 
      15 def login(request):
      16     if request.method == "POST":
      17         user = request.POST.get("user")
      18         pwd = request.POST.get("pwd")
      19 
      20         if user == "alex" and pwd == "alex1234":
      21             # 设置session
      22             request.session["user"] = user
      23             # 获取跳到登陆页面之前的URL
      24             next_url = request.GET.get("next")
      25             # 如果有,就跳转回登陆之前的URL
      26             if next_url:
      27                 return redirect(next_url)
      28             # 否则默认跳转到index页面
      29             else:
      30                 return redirect("/index/")
      31     return render(request, "login.html")
      32 
      33 
      34 @check_login
      35 def logout(request):
      36     # 删除所有当前请求相关的session
      37     request.session.delete()
      38     return redirect("/login/")
      39 
      40 
      41 @check_login
      42 def index(request):
      43     current_user = request.session.get("user", None)
      44     return render(request, "index.html", {"user": current_user})
      Code

    相关配置

    Django相关配置->Session相关

  • 相关阅读:
    table的好处
    python使用split分隔字符串之后打印出来是乱码的问题
    关于python项目使用tornado框架时,加载不上静态资源(css/js)并报编码错误的问题
    马的遍历
    数据结构学习资料
    操作系统学习资料
    珠心算测验 C / C++
    拼数 C/C++
    神奇的幻方
    工艺品制作(多维数组应用)
  • 原文地址:https://www.cnblogs.com/zze46/p/9771715.html
Copyright © 2020-2023  润新知