1. 程式人生 > 程式設計 >django 裝飾器 檢測登入狀態操作

django 裝飾器 檢測登入狀態操作

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.

django 裝飾器 檢測登入狀態操作

解決辦法: 判斷使用者session後,一定要return返回值

2、登入檢查成功,路由未被更改,頁面未跳轉

django 裝飾器 檢測登入狀態操作

解決辦法: 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 裝飾器 檢測登入狀態操作

django 裝飾器 檢測登入狀態操作

django 裝飾器 檢測登入狀態操作

以上這篇django 裝飾器 檢測登入狀態操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。