我正在使用 Django 2.0.1,我正在尝试用另一个响应覆盖 Django 404 页面。我不想返回常规模板,而是想返回 JSON 响应。
这是我的项目/urls.py
from django.conf.urls import include
from django.contrib import admin
from django.urls import path
from django.conf.urls import handler404
from django.http import JsonResponse
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('accounts.urls'))
]
def response404(request, status=200, message='Not Found', data=None):
data = {'status': 404, 'message': message, 'data': data}
return JsonResponse(data=data, status=status)
def response500(request, status=500, message='Not Found', data=None):
data = {'status': status, 'message': message, 'data': data}
return JsonResponse(data=data, status=status)
handler404 = response404
handler500 = response505
在账户/urls/py中
from django.urls import path
from .views import UserView, AuthenticationView
urlpatterns = [
path('', UserView.as_view()),
path('auth/', AuthenticationView.as_view()),
]
但是 404 返回它仍然返回基本的 Django 404 页面,即使我在 settings.py 文件中将 Debug 选项更改为 True
处理程序 404 不应调用该函数,并且该函数的第一个参数是请求。将您的代码更改为:
def response(request, status=200, message='Not Found', data=None):
data = {'status': 404, 'message': message, 'data': data}
return JsonResponse(data=data, status=status)
handler404 = response
我没有看到答案和问题之间有任何区别(编辑后),那么我想这仍然是一个悬而未决的问题。
就我而言,我能够按照官方文档解决这个问题。
我的代码如下所示:
def json_response_handler404(request, exception=None):
data = asdict(ErrorResponseDto(exception=exception))
return JsonResponse(data=data, status=404)
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('accounts.urls'))
]
handler404 = json_response_handler404
我将函数命名为
json_response_handler404
,但你可以随意命名,最重要的是签名中要有request
和exception
。