Django 之 Cookie 和 Session


cookie

定義

cookie 是保存在瀏覽器的一組鍵值對

設置 cookie

# 明文 cookie, max_age 以秒爲單位
redirect("/book_list/").set_cookie("s21", "hao", max_age=7)

# 加鹽 cookie, salt 爲鹽
rep.set_signed_cookie("s21", "hao", salt="ooxx", max_age=7)


取值 cookie

# 拿明文 cookie
request.COOKIES.get("s21")

# 拿加鹽 cookie, default 不寫會報錯
request.get_signed_cookie("s21", default="", salt="ooxx")


實例

from functools import wraps # 修復裝飾器
from django.utils.decorators import method_decorator # 類裝飾需要

def login_check(func):
	"""
	登錄校驗裝飾器
	如果cookie 驗證成功, 表示已經登錄, 則正常執行代碼
	如果cookie 驗證失敗, 表示沒有登錄, 顯示登錄頁面, 並設置登錄成功後, 顯示原頁面
	"""
	@wraps(func) # 完美修復裝飾器的問題, 可查看原函數的所有內容
    def inner(request, *args, **kwargs):
        next = request.path_info # 拿到 url
        v = request.COOKIES.get("s21")
        if v == "hao":
            return func(request, *args, **kwargs)
        else:
            return redirect("/login/?next={}".format(next)) # 根據原 url 拼接出新 url
    return inner


# FBV 可以直接使用裝飾器
@login_check
def book_list(request):
    return HttpResponse("book_list")


class BookAdd(views.View):
	# CBV 需要添加模塊
    @method_decorator(login_check)
    def get(self, request):
        return HttpResponse("book_add_get")

    def post(self, request):
        return HttpResponse("book_add_post")
        

Session

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章