django 裝飾器 檢測登入狀態操作
阿新 • • 發佈:2020-07-03
1、檢測登入狀態
base.py
def checkLogin(func): """ 檢視session值用來判斷使用者是否已經登入 :param func: :return: """ def warpper(request,*args,**kwargs): if request.session.get('username',False): return func(request,**kwargs) else: return HttpResponse('/login') return warpper
index.py:
from proApp import models,article,base @base.checkLogin def index(request): dict = { "article_list": article.getArticle(),} return render(request,'index.html',dict)
1報錯:
The view proApp.base.warpper didn't return an HttpResponse object. It returned None instead.
解決辦法: 判斷使用者session後,一定要return返回值
2、登入檢查成功,路由未被更改,頁面未跳轉
解決辦法: redirect(‘跳轉路徑和名稱‘)方法,頁面跳轉
from django.shortcuts import render,render_to_response,redirect def checkLogin(func): """ 檢視session值用來判斷使用者是否已經登入 :param func: :return: """ def warpper(request,**kwargs) else: return redirect('/login') return warpper
注意:render與redirect兩點區別:
1、render返回一個登陸成功後的頁面,重新整理該頁面將回復到跳轉前頁面。而redirect則不會
2、render返回一個登陸成功頁面,不會經過url路由分發系統,也就是說,不會執行跳轉後url的試圖函式。這樣,返回的頁面渲染不成功;而redirect是跳轉到指定頁面,當登陸成功後,會在url路由系統進行匹配,如果有存在的對映函式,就會執行對應的對映函式。
補充知識:Django中的中介軟體與類檢視
類檢視
函式檢視:以函式的方式定義的檢視稱為函式檢視
類檢視:以類的方式定義的檢視稱為類檢視
程式碼可讀性好
類檢視相對於函式檢視有更高的複用性
因此大部分檢視都使用類進行封裝。
from django.views import View class ClassView(View): """類檢視的介紹""" def get(self,request): """get請求方法""" print('get請求方法進次函式') return HttpResponse('get請求方法') def post(self,request): """post請求方法進此函式""" print('post請求方法') return HttpResponse('post請求方法') """ 在url中配置 """ urlpatterns = [ url(r"^classview/$",views.ClassView.as_view()) #ClassView是一個類 需要呼叫Django自帶的as_view方法轉換為view ]
中介軟體
中介軟體
Django中的中介軟體是一個輕量級、底層的外掛系統,可以介入Django的請求和響應處理過程,修改Django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了Django框架的健壯性。
我們可以使用中介軟體,在Django處理檢視的不同階段對輸入或輸出進行干預。
#先在子應用檔案下新建(自定義).py檔案 # 自定義中間鍵 def outer(fuc): print('呼叫前') def inner(*args,**kwargs): print('執行前') data = fuc(*args,**kwargs) print(' 執行後') return data return inner #2. settings.py的middleware下面加入自定義的中介軟體 'user1.middlewares.outer' # 自定義中介軟體
以上這篇django 裝飾器 檢測登入狀態操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。