1. 程式人生 > 其它 >Django微講解(十)

Django微講解(十)

Django微講解(十)

Django操作cookie

# 1.加鹽處理
	set_signed_cookie(key,value,salt=加密鹽)  # 加密鹽只能是字串
# 2.超時時間
	set_signed_cookie(key,value,max_age=超時時間)  # 超時時間預設是秒數
    expires:專門針對IE瀏覽器設定超時時間
# 3.主動清除cookie
	HttpResponse物件.delete_cookie(key) 

Django操作session

# 1.設定
	request.session['key'] = value   # 可以設定分組
# 2.獲取
	request.session.get('key')  # 可以獲取多組
# 3.內部機制
	服務端儲存使用者相關狀態資訊,返回給客戶端隨機字串,然後客戶端進行儲存。session針對儲存,Django需要一張表來處理,
這張表就是我們執行資料庫遷移命令的時候自動生成的django_session表。
# 4.設定session內部發生的事情
	1.產生一個隨機字串
	2.表中儲存隨機字串與加密資料的對應關係
	3.將產生的隨機字串發給客戶端,並讓其儲存,客戶端儲存的格式是sessionid:隨機字串
# 5.獲取session內部發生的事情
	1.自動獲取客戶端請求中的隨機字串
	2.自動去django_session表中進行資料比對
	3.如果比對成功自動獲取並進行解密處理
'''
django預設的session失效時間是14天
'''

Django操作session

# 1.獲取產生的隨機字串
	request.session.session_key
# 2.刪除操作
	request.session.delete()  # 只刪客戶端
	request.session.flush()  # 服務端、客戶端都刪除
# 3.設定超時時間
	request.session.set_expiry(value)
    1.如果value是整數,就相當於是秒數
    2.如果value是datatime或timedelta,session就會在這個時間點消失
    3.如果value是0,關閉瀏覽器session就會失效
    4.如果value是None,session會依賴全域性session失效策略
# 4.session資料的儲存位置
	1.資料庫儲存
    2.快取儲存
    3.檔案儲存
    4.快取加資料庫儲存
    5.動態加密

CBV新增裝飾器

	CBV新增裝飾器需要藉助一個專門的裝飾器模組'from django.utils.decorators import method_decorator
'
# 1.直接在類中給方法新增裝飾器
	from django import views
    from django.utils.decorators import method_decorator
    class MyViews(views.View):
        @method_decorator(login_auth)
        def get(self,request):
            return HttpResponse('這是get')
        def post(self,request):
            return HttpResponse('這是post')
# 2.直接在類名上新增並指定
	from django import views
    from django.utils.decorators import method_decorator
    @method_decorator(login_auth,name='post')
    class MyViews(views.View):
        def get(self,request):
            return HttpResponse('這是get')
        def post(self,request):
            return HttpResponse('這是post')
# 3.重寫dispatch方法並新增作用於類中所有的方法
	from django import views
    from django.utils.decorators import method_decorator
    class MyViews(views.View):
        def get(self,request):
            return HttpResponse('這是get')
        def post(self,request):
            return HttpResponse('這是post')
        @method_decorator(login_auth)
        def dispatch(self, request, *args, **kwargs):
            super().dispatch(request, *args, **kwargs)

Django中介軟體

	Django中介軟體是Django的門戶,自帶七個中介軟體,每個都有各自對應的功能,這七個中介軟體每個都有很多的功能和方法,Django
還支援自定義中介軟體,並提供了五個可以自定義的方法,分別是'process_request'、'process_response'、'process_view'、
'process_template_response'、'process_excepton',只要是全域性相關的功能都可以在中介軟體中編寫。

自定義中介軟體

# 1.自定義中介軟體準備
	1.建立一個任意名稱的資料夾
    2.在該資料夾內建立一個任意名稱的py檔案
    3.在該py檔案內編寫中介軟體
    4.編寫完成之後去配置檔案中註冊
# 2.process_request,請求來的時候執行
	請求來的時候會自上而下依次執行配置檔案中已經註冊的中介軟體裡面的process_request方法,如果沒有就跳過,如果該方法自
己返回來HttpResponse物件,那麼請求不再繼續往後,直接返回響相應的資料。如果process_request返回了HttpResponse物件,那麼
就會從當前位置從下往上依次執行每一個process_response方法。
# 3.process_response,響應走的時候執行
	響應走的時候會從下往上依次執行配置檔案中已經註冊的中介軟體裡面的process_response方法,如果沒有就跳過,如果該方法
自己返回了HttpResponse物件,那麼響應會替換成HttpResponse物件的資料,而不是檢視函式返回給客戶端的資料。
# 4.process_view
	路由匹配成功之後執行檢視之前,從上往下執行配置檔案中註冊的中介軟體裡面的process_view方法。
# 5.process_template_response
	檢視函式執行完畢之後返回的物件中含有render屬性對應一個render方法,就會從下往上執行配置檔案中註冊的中介軟體裡面的
process_template_response方法。
# 6.process_exception
	檢視函式執行過程中報錯並在返回響應的時候從下往上執行配置檔案中註冊的中介軟體裡面的process_exception方法。

csrf跨站請求

	csrf跨站請求,舉一個簡單的例子,就好比釣魚網站,模仿正規網站的網址,誘騙使用者在網站上做本應該在正規網站的操作,
從而獲取到該使用者的資料或者財產。釣魚網站其實用到的就是csrf跨站請求。
# csrf解決策略
1.方式一:
	在form表單中加一個模板語法,{% csrf_token %}
    程式碼演示:
        <form action="" method="post">
        {% csrf_token %}
        <p>當前賬戶:<input type="text" name="current_user"></p>
        <p>目標賬戶:<input type="text" name="target_user"></p>
        <p>轉賬金額:<input type="text" name="money"></p>
        <input type="submit">
        </form>
2.方式二:
    使用ajax請求
    (1).在頁面任意位置先寫模板語法{% csrf_token %},獲取資料
    程式碼演示:
        data:{'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()}
	(2).模板語法直接獲取
    程式碼演示:
        data:{'csrfmiddlewaretoken':{% csrf_token %}}