欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django 裝飾器 檢測(cè)登錄狀態(tài)操作

 更新時(shí)間:2020年07月02日 15:31:03   作者:羽下佳人  
這篇文章主要介紹了django 裝飾器 檢測(cè)登錄狀態(tài)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1、檢測(cè)登錄狀態(tài)

base.py

def checkLogin(func):
 
  """
  查看session值用來(lái)判斷用戶是否已經(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值用來(lái)判斷用戶是否已經(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)過(guò)url路由分發(fā)系統(tǒng),也就是說(shuō),不會(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中的中間件與類(lèi)視圖

類(lèi)視圖

函數(shù)視圖:以函數(shù)的方式定義的視圖稱為函數(shù)視圖

類(lèi)視圖:以類(lèi)的方式定義的視圖稱為類(lèi)視圖

代碼可讀性好

類(lèi)視圖相對(duì)于函數(shù)視圖有更高的復(fù)用性

因此大部分視圖都使用類(lèi)進(jìn)行封裝。

from django.views import View
class ClassView(View):
  """類(lèi)視圖的介紹"""

  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è)類(lèi) 需要調(diào)用Django自帶的as_view方法轉(zhuǎn)換為view

]

中間件

中間件

Django中的中間件是一個(gè)輕量級(jí)、底層的插件系統(tǒng),可以介入Django的請(qǐng)求和響應(yīng)處理過(guò)程,修改Django的輸入或輸出。中間件的設(shè)計(jì)為開(kāi)發(fā)者提供了一種無(wú)侵入式的開(kāi)發(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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)Socket通信建立TCP反向連接

    Python實(shí)現(xiàn)Socket通信建立TCP反向連接

    本文將記錄學(xué)習(xí)基于 Socket 通信機(jī)制建立 TCP 反向連接,借助 Python 腳本實(shí)現(xiàn)主機(jī)遠(yuǎn)程控制的目的。感興趣的可以了解一下
    2021-08-08
  • 詳解Django中CSRF和CORS的區(qū)別

    詳解Django中CSRF和CORS的區(qū)別

    本文主要介紹了詳解Django中CSRF和CORS的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 淺談Python中copy()方法的使用

    淺談Python中copy()方法的使用

    這篇文章主要介紹了淺談Python中copy()方法的使用,Python中的拷貝分為潛拷貝和深拷貝,本文只是簡(jiǎn)單介紹用法,需要的朋友可以參考下
    2015-05-05
  • 用Python登錄Gmail并發(fā)送Gmail郵件的教程

    用Python登錄Gmail并發(fā)送Gmail郵件的教程

    這篇文章主要介紹了用Python登錄Gmail并發(fā)送Gmail郵件的教程,利用了Python的SMTP庫(kù),代碼非常簡(jiǎn)單,需要的朋友可以參考下
    2015-04-04
  • python 常見(jiàn)的反爬蟲(chóng)策略

    python 常見(jiàn)的反爬蟲(chóng)策略

    這篇文章主要介紹了python反爬蟲(chóng)策略,幫助大家更好的理解和使用python 爬蟲(chóng),感興趣的朋友可以了解下
    2020-09-09
  • 淺析python redis的連接及相關(guān)操作

    淺析python redis的連接及相關(guān)操作

    Redis是一個(gè)開(kāi)源的使用ANSIC語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。這篇文章主要介紹了python redis的連接及相關(guān)操作,需要的朋友可以參考下
    2019-11-11
  • python設(shè)定并獲取socket超時(shí)時(shí)間的方法

    python設(shè)定并獲取socket超時(shí)時(shí)間的方法

    今天小編就為大家分享一篇python設(shè)定并獲取socket超時(shí)時(shí)間的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python裝飾器有哪些絕妙的用法

    Python裝飾器有哪些絕妙的用法

    本文主要介紹了Python裝飾器有哪些絕妙的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python命令行參數(shù)定義及需要注意的地方

    Python命令行參數(shù)定義及需要注意的地方

    這篇文章主要介紹了Python命令行參數(shù)定義及需要注意的地方,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼

    numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼

    這篇文章主要介紹了numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評(píng)論