django 403 forbidden - redirect to login -


how can redirect user login page when confronted 403 forbidden?

consider following code:

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 

if visit /domain/users while not logged in, i'll 403 forbidden error. instead, redirect login page. in other words, never show 403 errors instead redirect directly login page.

i have tried putting:

@login_required def list(...): 

but not work. assume because inside viewset.

i have tried:

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

but again, doesn't work.

i tried various 403middlewares no avail.

i tried redirecting via handler403 handler in urls.py

handler403 = 'site.views.login' 

no success.

what do?

django version: 1.5.4

you can't use standard login_required decorator on class method. have either wrap as_view() when use in url:

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

or wrap decorator django.utils.decorators.method_decorator , apply class dispatch method:

from django.utils.decorators import method_decorator django.contrib.auth.decorators import login_required  class userviewset(viewsets.modelviewset): ... @method_decorator(login_required) def dispatch(self, request, *args, **kwargs):     .... 

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

for class-based views can incorporate reusable permissionrequiredmixin - see https://stackoverflow.com/a/6455140/839875

alternatively can raise django.core.exceptions.permissiondenied exception django catch django.views.defaults.permission_denied

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


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -