1. 程式人生 > >Django學習手冊 - cookie / session

Django學習手冊 - cookie / session

ons doc abcd use views 日期 spa .html expires

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")

Django學習手冊 - cookie / session