• Django学习手册


    cookie

    """
    cookie属性:
    obj.set_cookie(key,value,....)
    obj.set_signed_cookie(key,value,salt="加密盐",....)
        参数:
            key                 键
            value=“”           值
            max_age=None        超时时间
            expires=None        超时日期
            path="/"            cookit生效的路径,/表示根路径,特殊的,跟路径的cookie可以被任何url被任何url的页面访问
            domain=None         cookie生效的域名
            secure=False        https传输
            httponly=False      只能http协议传输,无法javascript获取(不是绝对,底层抓包可以获取到)
            
    获取cookie
    request.COOKIES
    request.COOKIES['username']
    request.COOKIES.get("username")
    
    设置cookie
    response = render(request,'index.html')
    response = redirect("/index/")
    response = set_cookie("key","value")
    return response
    
    加盐配置:
    obj = HttpResponse("S")
    获取加盐cookie
    obj.set_signed_cookie("username","passwd",salt="jiayan")
    设置加盐cookie
    obj.get_signed_cookie("username",salt="jiayan")
    获取与设置的加盐 一定要是相同的加盐字符
    
    """

    前端:(login 页面)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            <form action="/login/" method="post">
            <p>
               <span>用户名:</span> <input type="text" name="user">
                <span>密码:</span><input type="password" name="pwd">
                <input type="submit" value="提交">
            </p>
            </form>
        </div>
    </body>
    </html>

    前端:(index页面)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>
            欢迎登录.........
    
        </h1>
    </body>
    </html>

    URL:

    from django.contrib import admin
    from django.urls import path
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        url('^login/', views.login),
        url('^index/', views.index),
    ]

    后端:

    from django.shortcuts import render,HttpResponse,redirect
    
    # Create your views here.
    
    def login(request):
        print(request.COOKIES)
        print(request.session)
        if request.method == "POST":
            u = request.POST.get("user",None)
            p= request.POST.get("pwd",None)
            if u == "root" and p == "123":
                # cookie的方式:
                # ret = redirect("/index/")
                # #设置cookie数值
                # ret.set_cookie("name","123",10)
                # return ret
    
                #session方式
                request.session["info_login"]=True
                request.session["user"] = u
                return redirect("/index/")
    
            else:
                redirect("/login/")
        return render(request,"login.html")
    
    def index(request):
        #cookie
        # if request.COOKIES.get("name",None):
        #     print("index")
        #     return render(request,"index.html")
    
        #session
        if request.session.get("info_login",None):
            name = request.session.get("user")
            return render(request,"index.html")
        #session 默认存放在数据库中。
    
        else:
            return redirect("/login/")

     --------------------------------------------------------------------------------------------------------------------------------------------------------

    装饰器的方式:

    from django.shortcuts import render,redirect,HttpResponse
    
    # Create your views here.
    
    def aut(fum):
        def log(request,*args,**kwargs):
            if request.COOKIES.get("user",None):
                return fum(request,*args,**kwargs)
            else:
                return redirect("/login/")
        return log
    
    
    def login(request):
        if request.method == "POST":
            u = request.POST.get("user", None)
            p = request.POST.get("pwd", None)
            if u == "root" and p == "123":
                ret = redirect("/index/")
                # ret.set_cookie("user", u)
                ret.set_signed_cookie("user",u,salt="abcd")
    
                return ret
            else:
                return redirect("/login/")
        return render(request,"login.html")
    
    @aut
    def index(request):
        return HttpResponse("OK")

    核心 session 
    1.session 依赖cookie
    2.Session流程
    3.Session操作
    4.Session配置
    5.Session存储
    
    注意!!!
    django 默认数据存储在数据表格中的,所以在配置好之前一定要创建数据表格!!!
    python manage.py makemigrations
    python manage.py migrate
    #生成随机字符串 #写到用户浏览器cookie #保存到session中 #在随机字符串对应的字典中设置相关内容 Request.session[‘user’] = user Request.session[‘is_login’] = True Return redirect(“/index/”) #Session 获取数据 Request.session[‘k1’] Request.session.get(“k1”,None) #设置数据 Request.session[‘k1’] = 123 Request.session.setdefault(“k1”,123) #存在则不设置 #删除数据 Del request.session[‘k1’] Request.session.clear() Request.session.delete(‘session_key’ ) #所有键值,键值对 Request.session.keys() Request.session.values() Request.session.items() Request.session.iterkeys() Request.session.itervalues() Request.session.iteritems() #用户session的随机字符串 Request.session.session_key #将所有session失效时间小于当前日期的数据删除 Request.session.clear_expired() #检查用户session的随机字符串在数据中是否 Request.session.exists(“session_key”) #删除当前用户的所有session数据 Request.session.delete(“session_key”) Request.session.set_expiry(value) *如果value是个整数,session会在些秒数后失效。 *如果是value是个datatime或timedelta,session就会在这个时间后失效 *如果value是0,用户关闭浏览器session就会失效。 *如果value是None,session会依赖全局session失效策略 #在setting里面设置 SESSION_COOKIE_NAME = “sessionid” #session 的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) SESSION_COOKIE_PATH = ‘/#session 的cookie 保存的路径(默认) SESSION_COOKIE_DOMAIN=None #session 的cookie 保存的域名(默认) SESSION_COOKIE_SECURE=False #是否HTTP传输cookie SESSION_COOKIE_HTTPONLY=True #是否session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 #失效日期2周默认 SESSION_COOKIE_AT_BROWSER_CLOSE=False #是否关闭浏览器使得session过期 SESSION_SAVE_EVERY_REQUEST=False #是否每次请求都保存session,默认修改之后才保存

    session数据可以在request中提取到,所以后端不必传值。

    #用session 传递数据至前端(session数据封装在request里)
    #前端:
    <span>
    <h3>{{request.session.user}}</h3>
    </span>
    
    #后端
    def index(request):
    if request.session.get(“is_log,None)
      return render(request,”index.html”)
    else:
      return redirect(“/login/”)

    Django 中默认支持session,其内部提供了5中类型的session公开发者使用:

    • 数据库(默认)
    • 缓存
    • 文件
    • 缓存+数据库
    • 加密+cookie
  • 相关阅读:
    VXDIAG VX Manager V1.8.0.0814更新指南
    Java Stream 源码分析
    RESTful接口实战
    Java面经
    开发中遇到的问题:push to origin/master was rejected错误解决方案
    开发遇到的问题:springboot问题:Unable to find main class
    java封神之路-stream流-进阶
    Java封神之路-stream流-入门
    Java封神之路-设计模式-工厂模式
    JAVA封神之路-设计模式-单例模式
  • 原文地址:https://www.cnblogs.com/Anec/p/9586015.html
Copyright © 2020-2023  润新知