Django의 사용자 정의 중간부품 모듈 - Stackoveflow 답안 자동 검색

2754 단어 pythondjangoweb
Django 중간부품 MIDDLEWARE 분류:
요청 기간:
process_request(request)
process_view(request, view_func, view_args, view_kwargs)

반환 기간:
process_exception(request, exception) (only if the view raised an exception)
process_template_response(request, response) (only for template responses)
process_response(request, response)

사용자 정의가 필요한 경우 MIDDLEWARE해당 경로의 파일을 CLASSES에 추가하면 됩니다.
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    
    //    Middleware  
    'app_name.middleware.StackOverflowMiddleware',
)

수요 장면
평상시django 개발 디버깅에서 이런저런 exception 오류가 발생할 수 있습니다. 우리는 간단한 중간부품을 사용자 정의합니다.django의 사용자 정의 절차는 매우 간단합니다.processexception 방법
exception의name와 정보에 따라 Stackoveflow의 인터페이스를 호출하여 debug가 틀렸을 때 관련 답안을 자동으로 검색하여 시간을 절약하고 실현하기가 매우 간단합니다
비고: 사고방식을 소개하기 위해서만 온라인 코드를 이렇게 사용하지 마세요.
코드 구현
app 디렉터리에서middleware.py 파일
import requests
from django.conf import settings

class StackOverflowMiddleware(object):
    def process_exception(self, request, exception):
        if settings.DEBUG:
            intitle = u'{}: {}'.format(exception.__class__.__name__,  exception.message)
            url = 'https://api.stackexchange.com/2.2/search'
            params = {
                'order': 'desc',
                'sort': 'votes',
                'site': 'stackoverflow',
                'pagesize': 3,
                'tagged': 'python;django',
                'intitle': intitle
            }
            r = requests.get(url, params=params)
            questions = r.json()
            if len(questions['items']) > 0:
                print '
The stackoverflow answer top 3 is :
' for question in questions['items'][:3]: print '
' print question['title'] print question['link'] + '
' else : print '
stackoverflow answer not found
' return None

효과는 다음과 같습니다.
Django 버전: 1.9.4python 버전: 2.7.6 디버깅 시 settings.DEBUG 켜기 모드

좋은 웹페이지 즐겨찾기