gpt4 book ai didi

django 403 禁止 - 重定向到登录

转载 作者:行者123 更新时间:2023-12-02 04:39:30 25 4
gpt4 key购买 nike

遇到 403 Forbidden 时如何将用户重定向到登录页面?

考虑以下代码:

urls.py

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)

urlpatterns = patterns('',
url(r'^', include(router.urls)),
)

views.py

class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer

renderer_classes = (renderers.JSONRenderer, renderers.TemplateHTMLRenderer)
template_name='rest_framework/users.html'

def list(self, request, *args, **kwargs):
response = super(viewSet, self).list(request, *args, **kwargs)
if request.accepted_renderer.format == 'html':
return Response({'request':request, 'queryset': response.data['results']})
return response

如果我在未登录的情况下访问/domain/users,我会收到 403 Forbidden 错误。我想重定向到登录页面。换句话说,永远不会显示 403 错误,而是直接重定向到登录页面。

我尝试过:

@login_required
def list(...):

但这不起作用。我认为是因为它位于 View 集中。

我也尝试过:

def list(...):
if not request.user.is_authenticated():
return render_to_response('domain/login.html')

但还是不行。

我尝试了各种403中间件,但没有成功。

我尝试通过 urls.py 中的 handler403 处理程序进行重定向

handler403 = 'site.views.login'

没有成功。

要做什么?

Django 版本:1.5.4

最佳答案

您不能在类方法上使用标准的 login_required 装饰器。当您在 URL 中使用 as_view() 时,您必须将其包装起来:

url(r'...', login_required(UserViewSet.as_view()))

或者用django.utils.decorators.method_decorator包装装饰器并将其应用于类dispatch方法:

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required

class UserViewSet(viewsets.ModelViewSet):
...
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
....

(参见 https://docs.djangoproject.com/en/dev/topics/class-based-views/intro/#decorating-class-based-views )

对于基于类的 View ,您可以将其合并到可重用的 PermissionRequiredMixin 中 - 请参阅 https://stackoverflow.com/a/6455140/839875

或者,您可以引发 django.core.exceptions.PermissionDenied 异常,Django 将使用 django.views.defaults.permission_denied 捕获该异常

(参见 https://docs.djangoproject.com/en/1.5/topics/http/views/#the-403-http-forbidden-view )

关于django 403 禁止 - 重定向到登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22614030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com