使用 JSON 类型处理程序覆盖 Django Handler404

问题描述 投票:0回答:2

我正在使用 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

python json django
2个回答
2
投票

处理程序 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

0
投票

我没有看到答案和问题之间有任何区别(编辑后),那么我想这仍然是一个悬而未决的问题。

就我而言,我能够按照官方文档解决这个问题。

我的代码如下所示:

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

© www.soinside.com 2019 - 2024. All rights reserved.