【问题标题】:Override Django Handler404 with JSON type handler使用 JSON 类型处理程序覆盖 Django Handler404
【发布时间】:2018-02-04 05:08:37
【问题描述】:

我正在使用 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()),
]

但是即使我在 settings.py 文件中将 Debug 选项更改为 True,它仍然会返回 404 的基本 Django 404 页面

【问题讨论】:

    标签: python json django


    【解决方案1】:

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

    【讨论】:

    • 它似乎仍然返回默认的 404 处理程序
    • @ZulwiyozaPutra 自定义 404 页面仅适用于 DEBUG=False。
    • 仍然返回 Django 默认处理程序 'Server Error (500)'
    • 当然。一秒
    • 每当我请求错误的路径时返回 500 服务器错误。我希望它返回我的自定义 404 处理程序
    猜你喜欢
    • 2013-10-10
    • 2021-01-07
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2010-10-09
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多