django 裝飾器 檢測登錄狀態(tài)操作
1、檢測登錄狀態(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, [email protected] 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、登錄檢查成功,路由未被更改,頁面未跳轉(zhuǎn)
解決辦法: redirect(‘跳轉(zhuǎn)路徑和名稱‘)方法,頁面跳轉(zhuǎn)
from django.shortcuts import render,render_to_response,redirectdef 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è)登陸成功后的頁面,刷新該頁面將回復(fù)到跳轉(zhuǎn)前頁面。而redirect則不會(huì)
2、render返回一個(gè)登陸成功頁面,不會(huì)經(jīng)過url路由分發(fā)系統(tǒng),也就是說,不會(huì)執(zhí)行跳轉(zhuǎn)后url的試圖函數(shù)。這樣,返回的頁面渲染不成功;而redirect是跳轉(zhuǎn)到指定頁面,當(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 Viewclass 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 裝飾器 檢測登錄狀態(tài)操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 詳細(xì)分析css float 屬性以及position:absolute 的區(qū)別2. xpath簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理3. ASP基礎(chǔ)知識(shí)Command對(duì)象講解4. 得到XML文檔大小的方法5. ASP實(shí)現(xiàn)加法驗(yàn)證碼6. html小技巧之td,div標(biāo)簽里內(nèi)容不換行7. PHP設(shè)計(jì)模式中工廠模式深入詳解8. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)9. PHP循環(huán)與分支知識(shí)點(diǎn)梳理10. ASP中格式化時(shí)間短日期補(bǔ)0變兩位長日期的方法
