首頁 > Python教程 > Python應用 > Python開發:Django中間件攔截未登錄url實例詳解

Python開發:Django中間件攔截未登錄url實例詳解

時間:2019-09-11    來源:凌晨4點的太陽

1.利用裝飾器在視圖中攔截未登錄的url

@login_required(login_url='/user/login/')
def homepage(request):
  pass

這種方法適合于程序中只有少數幾個需要登錄攔截的url。

2. 利用中間件技術攔截未登錄的url

2.1 在settings.py添加MIDDLEWARE設置:middleware.LoginCheckMiddleware

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',
  # url登錄攔截中間件
  'middleware.LoginCheckMiddleware',
]

2.2 在項目目錄下創建middleware.py文件,文件中創建攔截類:LoginCheckMiddleware

import re
from django.http import JsonResponse
from django.shortcuts import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin

class LoginCheckMiddleware(MiddlewareMixin):
  def process_request(self, request): 
    # | 分隔要匹配的多個url,從左到右匹配,有匹配就返回匹配值,否則返回None。
    pattern = r'^(/$|/user/user/[0-9]+/$|/user/user/$|/user/getuserall|/user/get_token_code|/user/update_phone_no|/stock|/future)'

    # 如果 request.path 的開始位置能夠找到這個正則樣式的任意個匹配,就返回一個相應的匹配對象。
    # 如果不匹配,就返回None
    match = re.search(pattern, request.path)
    # 需要攔截的url
    if match and not request.user.is_authenticated:
      print('用戶未登錄URL攔截 >>: ', request.path)
       # 主頁未登錄
      if request.path == '/':
        return HttpResponseRedirect('/user/login/')
      # ajax請求未登錄
      else:
        return JsonResponse({'status': False, 'info': '用戶未登錄!'})

應用了正則表達式過濾需要攔截的url。

由于ajax請求不能重定向,所以對于ajax請求的url攔截返回json數據,由前端處理返回的結果。

以上就是本次介紹的全部知識點內容,感謝大家的學習和對的支持。

相關推薦
用Python爬取B站5000 條視頻,揭秘為何千萬人為它流淚!
Python教程:如何用xlrd和xlwt庫讀和寫Excel表格?
Python安裝MySQL-python:EnvironmentError的解決辦法
分享:Python2和Python3有那些差異?
Python正在吞噬世界:它為何會贏又將走向何方?
Python 的內置對象都藏了哪些小秘密?
實戰干貨!用案例讓你一文搞懂python網絡爬蟲
Python教程:圖像處理模塊ndimage用法實例分析
Python教程:代理IP爬蟲的使用方法
Python教程:如何使用scipy模塊實現一維卷積運算示例?
Python:關于內存分配時的那些小秘密分享
python技巧:global關鍵字的用法詳解
Python教程:深入了解python在HDA中的應用
python技巧:SSLerror的requests證書問題解決方法
PyCharm教程:搭建Spark開發環境的幾個步驟
如何解決Python字符串和正則表達式中的反斜杠('\')問題?
Python開發技巧:編寫一個簡單登錄功能過程解析

精彩推薦

熱門教程

百人牛牛辅助 pk10五码循环不死模式 暴跌之后暴涨的股票 浙江麻将怎么玩法介绍 英超年度最佳球员 海南4+1官网 双色球的对应码与选号 福彩30选五走势图 香港地下彩资料 36选7新浪走势图 金蟾捕鱼版本购买