【问题标题】:django not rendering custom 403 page, displays browser default insteaddjango 不呈现自定义 403 页面,而是显示浏览器默认值
【发布时间】:2021-07-14 21:45:46
【问题描述】:

我正在尝试应用自定义 403 模板来显示而不是浏览器默认值。

我有一个看起来像这样的 Middelware:

from django.http import HttpResponseForbidden

class CheckUserTypeMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.user.is_authenticated:
            allowed_types = ['a', 'b', 'c', 'd', 'e']
            user_data = get_some_AD_values
            if user_data.get('a_key') not in allowed_types:
                return HttpResponseForbidden()
        response = self.get_response(request)
        return response

views.py

def error_403(request, exception):
    return render(request, 'my_app/403.html') # I have a 404.html in the same folder as the 403 and that renders fine.

urls.py

handler403 = 'my_app.views.error_403'

settings.py

DEBUG = False

MIDDLEWARE = [
    # Default Django middlewares untouched
    'my_app.middleware.my_middleware.CheckUserTypeMiddleware',
]

我上面处理404错误的相同过程,但由于某种原因,我无法让它处理403错误。

【问题讨论】:

    标签: python-3.x django error-handling django-middleware


    【解决方案1】:

    您在此处返回响应:

    return HttpResponseForbidden()
    

    这本身就是一个响应,不会使用handler403。如果你想使用错误处理视图,你应该引发一个异常:

    from django.core.exceptions import PermissionDenied
    
    class CheckUserTypeMiddleware(object):
        def __init__(self, get_response):
            self.get_response = get_response
    
        def __call__(self, request):
            if request.user.is_authenticated:
                allowed_types = ['a', 'b', 'c', 'd', 'e']
                user_data = get_some_AD_values
                if user_data.get('a_key') not in allowed_types:
                    raise PermissionDenied() # raise an exception
            response = self.get_response(request)
            return response
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-30
      • 2020-11-06
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多