国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Django實戰(zhàn)項目-學習任務(wù)系統(tǒng)-自定義URL攔截器

這篇具有很好參考價值的文章主要介紹了Django實戰(zhàn)項目-學習任務(wù)系統(tǒng)-自定義URL攔截器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

接著上期代碼框架,6個主要功能基本實現(xiàn),剩下的就是細節(jié)點的完善優(yōu)化了。

首先增加URL攔截器,你不會希望沒有登錄用戶就可以進入用戶主頁各種功能的,所以增加URL攔截器可以解決這個問題。

Django框架本身也有URL攔截器,但是因為本系統(tǒng)用戶模型跟Django框架本身用戶模型不匹配,所以沒有用,只好自定義URL攔截器。

第一步:修改項目配置文件

./mysite/mysite/settings.py:

自定義攔截器中間件放置位置很重要,千萬不能放錯了,不然無法生效。

'''
    將你的自定義攔截器中間件放置在內(nèi)置的 SessionMiddleware
    和 AuthenticationMiddleware 之后,并根據(jù)你的實際情況調(diào)整其他中間件的順序。
    這樣,user 屬性應(yīng)該會被正確添加到請求對象中,
    從而解決 'WSGIRequest' object has no attribute 'user' 錯誤。
'''
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 自定義攔截器
    'study_system.custom_middleware.CustomURLInterceptorMiddleware',
    'study_system.custom_middleware.CustomURLInterceptorMiddleware2',
]

第二步:新增應(yīng)用自定義URL攔截器

./mysite/study_system/custom_middleware.py:

import re

from django.shortcuts import redirect
from django.utils.deprecation import MiddlewareMixin
from django.urls import reverse

"""
    自定義中間件
    中間件是一個面向?qū)ο蟮念悾形鍌€方法
        1、Request預(yù)處理函數(shù):process_request(self, request)
            運行時間:在請求后,在process_view 之前,在執(zhí)行views之前
        2、View預(yù)處理函數(shù): process_view(self, request, callback, callback_args,callback_kwargs)
            運行時間:在process_request之后,在views之前
        3、Template模版渲染函數(shù):process_template_response()
            運行時間:默認不執(zhí)行,只有在視圖函數(shù)的返回結(jié)果對象中有render方法才會執(zhí)行,
            并把對象的render方法的返回值返回給用戶(注意不返回視圖函數(shù)的return的結(jié)果了,
            而是返回視圖函數(shù) return值(對象)中rende方法的結(jié)果)
        4、Exception后處理函數(shù):process_exception(self, request, exception)
            運行時間:這個方法只有在 request 處理過程中出了問題
            并且view函數(shù)拋出了一個未捕獲的異常時才會被調(diào)用。這個鉤子可以用來發(fā)送錯誤通知,
            將現(xiàn)場相關(guān)信息輸出到日志文件,或者甚至嘗試從錯誤中自動恢復(fù)。
        5、Response后處理函數(shù):process_response(self, request, response)
            運行時間:這個方法的調(diào)用時機在 Django 執(zhí)行 view 函數(shù)并生成 response 之后。
            該處理器能修改response 的內(nèi)容;一個常見的用途是內(nèi)容壓縮,如gzip所請求的HTML頁面
"""

'''
通過中間件(Middleware)來實現(xiàn)自定義的 URL 攔截器。
中間件是 Django 處理請求和響應(yīng)的組件,可以對請求進行處理、攔截和修改

# 中間件使用方法:
#   方法1、
#       --> 首先需要自定義類繼承MiddlewareMixin類;然后重寫里面的5方法
#       --> setting.py中配置自定義中間件類

'''

# 定義需要登錄狀態(tài)的匹配規(guī)則,| 分隔要匹配的多個url,從左到右匹配,有匹配就返回匹配值,否則返回None。
login_pattern = r'^(/study_system/home/?$|/study_system/task/|/study_system/item/|/study_system/user/)'


class CustomURLInterceptorMiddleware(MiddlewareMixin):
    def process_request(self, request):
        print('---------------->1')
        """
            Request預(yù)處理函數(shù),重寫方法
        """
        # 我們可以通過request對象獲取里請求里面的相關(guān)值,request對象其實就是view function函數(shù)的request
        # 相關(guān)獲取例如:request.META、request.META['REMOTE_HOST']、request.path
        print(request.META['REMOTE_ADDR'])  # 獲取請求的遠程地址
        path = request.path  # 拿到當前的請求路徑
        # 如果 當前的請求路徑h 的開始位置能夠找到這個正則樣式的任意個匹配,就返回一個相應(yīng)的匹配對象。
        # 如果不匹配,就返回None
        match = re.search(login_pattern, path)
        if match:  # 匹配成功
            print(request.user)  # AnoymousUser:即匿名對象,未登錄
            # 如果在,判斷請求user認證是否通過,不通過的話我們就直接重定向到登錄界面,類似做了一層攔截訪問
            # if not request.user.is_authenticated:
            if not request.session.get('username'):
                return redirect(reverse('study_system:login'))


class CustomURLInterceptorMiddleware2(MiddlewareMixin):
    # 重寫方法
    def process_request(self, request):
        print('------------------->2')


第三步:運行測試查看效果

Django實戰(zhàn)項目-學習任務(wù)系統(tǒng)-自定義URL攔截器,Python,django,學習,python

Django實戰(zhàn)項目-學習任務(wù)系統(tǒng)-自定義URL攔截器,Python,django,學習,python

Django實戰(zhàn)項目-學習任務(wù)系統(tǒng)-自定義URL攔截器,Python,django,學習,python

-------------------------------------------------end -------------------------------------------------文章來源地址http://www.zghlxwxcb.cn/news/detail-738708.html

到了這里,關(guān)于Django實戰(zhàn)項目-學習任務(wù)系統(tǒng)-自定義URL攔截器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包