django 裝飾器 檢測(cè)登錄狀態(tài)操作
1、檢測(cè)登錄狀態(tài)
base.py
def checkLogin(func):
"""
查看session值用來判斷用戶是否已經(jīng)登錄
:param func:
:return:
"""
def warpper(request,*args,**kwargs):
if request.session.get('username', False):
return func(request, *args, **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報(bào)錯(cuò):
The view proApp.base.warpper didn't return an HttpResponse object. It returned None instead.

解決辦法: 判斷用戶session后,一定要return返回值
2、登錄檢查成功,路由未被更改,頁(yè)面未跳轉(zhuǎn)

解決辦法: redirect(‘跳轉(zhuǎn)路徑和名稱‘)方法,頁(yè)面跳轉(zhuǎn)
from django.shortcuts import render,render_to_response,redirect
def checkLogin(func):
"""
查看session值用來判斷用戶是否已經(jīng)登錄
:param func:
:return:
"""
def warpper(request,*args,**kwargs):
if request.session.get('username', False):
return func(request, *args, **kwargs)
else:
return redirect('/login')
return warpper
注意:render與redirect兩點(diǎn)區(qū)別:
1、render返回一個(gè)登陸成功后的頁(yè)面,刷新該頁(yè)面將回復(fù)到跳轉(zhuǎn)前頁(yè)面。而redirect則不會(huì)
2、render返回一個(gè)登陸成功頁(yè)面,不會(huì)經(jīng)過url路由分發(fā)系統(tǒng),也就是說,不會(huì)執(zhí)行跳轉(zhuǎn)后url的試圖函數(shù)。這樣,返回的頁(yè)面渲染不成功;而redirect是跳轉(zhuǎn)到指定頁(yè)面,當(dāng)?shù)顷懗晒?,?huì)在url路由系統(tǒng)進(jìn)行匹配,如果有存在的映射函數(shù),就會(huì)執(zhí)行對(duì)應(yīng)的映射函數(shù)。
補(bǔ)充知識(shí):Django中的中間件與類視圖
類視圖
函數(shù)視圖:以函數(shù)的方式定義的視圖稱為函數(shù)視圖
類視圖:以類的方式定義的視圖稱為類視圖
代碼可讀性好
類視圖相對(duì)于函數(shù)視圖有更高的復(fù)用性
因此大部分視圖都使用類進(jìn)行封裝。
from django.views import View
class ClassView(View):
"""類視圖的介紹"""
def get(self, request):
"""get請(qǐng)求方法"""
print('get請(qǐng)求方法進(jìn)次函數(shù)')
return HttpResponse('get請(qǐng)求方法')
def post(self, request):
"""post請(qǐng)求方法進(jìn)此函數(shù)"""
print('post請(qǐng)求方法')
return HttpResponse('post請(qǐng)求方法')
"""
在url中配置
"""
urlpatterns = [
url(r"^classview/$", views.ClassView.as_view())
#ClassView是一個(gè)類 需要調(diào)用Django自帶的as_view方法轉(zhuǎn)換為view
]
中間件
中間件
Django中的中間件是一個(gè)輕量級(jí)、底層的插件系統(tǒng),可以介入Django的請(qǐng)求和響應(yīng)處理過程,修改Django的輸入或輸出。中間件的設(shè)計(jì)為開發(fā)者提供了一種無侵入式的開發(fā)方式,增強(qiáng)了Django框架的健壯性。
我們可以使用中間件,在Django處理視圖的不同階段對(duì)輸入或輸出進(jìn)行干預(yù)。
#先在子應(yīng)用文件下新建(自定義).py文件
# 自定義中間鍵
def outer(fuc):
print('調(diào)用前')
def inner(*args, **kwargs):
print('執(zhí)行前')
data = fuc(*args, **kwargs)
print(' 執(zhí)行后')
return data
return inner
#2. settings.py的middleware下面加入自定義的中間件
'user1.middlewares.outer' # 自定義中間件



以上這篇django 裝飾器 檢測(cè)登錄狀態(tài)操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Django中使用pillow實(shí)現(xiàn)登錄驗(yàn)證碼功能(帶刷新驗(yàn)證碼功能)
- 用ldap作為django后端用戶登錄驗(yàn)證的實(shí)現(xiàn)
- 給Django Admin添加驗(yàn)證碼和多次登錄嘗試限制的實(shí)現(xiàn)
- Django --Xadmin 判斷登錄者身份實(shí)例
- Django Session和Cookie分別實(shí)現(xiàn)記住用戶登錄狀態(tài)操作
- Django用戶登錄與注冊(cè)系統(tǒng)的實(shí)現(xiàn)示例
- Django調(diào)用百度AI接口實(shí)現(xiàn)人臉注冊(cè)登錄代碼實(shí)例
- django使用JWT保存用戶登錄信息
- django-利用session機(jī)制實(shí)現(xiàn)唯一登錄的例子
- django 框架實(shí)現(xiàn)的用戶注冊(cè)、登錄、退出功能示例
- Django實(shí)現(xiàn)前后端登錄
相關(guān)文章
Python實(shí)現(xiàn)Socket通信建立TCP反向連接
本文將記錄學(xué)習(xí)基于 Socket 通信機(jī)制建立 TCP 反向連接,借助 Python 腳本實(shí)現(xiàn)主機(jī)遠(yuǎn)程控制的目的。感興趣的可以了解一下2021-08-08
用Python登錄Gmail并發(fā)送Gmail郵件的教程
這篇文章主要介紹了用Python登錄Gmail并發(fā)送Gmail郵件的教程,利用了Python的SMTP庫(kù),代碼非常簡(jiǎn)單,需要的朋友可以參考下2015-04-04
python設(shè)定并獲取socket超時(shí)時(shí)間的方法
今天小編就為大家分享一篇python設(shè)定并獲取socket超時(shí)時(shí)間的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
numpy使用技巧之?dāng)?shù)組過濾實(shí)例代碼
這篇文章主要介紹了numpy使用技巧之?dāng)?shù)組過濾實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02

