Django 중간부품 차단 로그인하지 않은 URL

6022 단어
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을 필터합니다.
aax 요청이 방향을 바꿀 수 없기 때문에, aax 요청의 URL에 대해 json 데이터를 되돌려주는 것을 차단하고, 전방에서 처리한 결과를 되돌려줍니다.

좋은 웹페이지 즐겨찾기