2017-06-03 1 views
1

私はDjangoを初めて使い、認証されたユーザーがページにアクセスする前に、認証されたユーザーがスタッフであるかどうかを確認するためにPermissionRequiredMixinを使用しようとしています。このページのログインページへのユーザは、django.contrib.auth.views.loginからフォームをロードします。しかし、ユーザーが認証され、スタッフでない場合、リダイレクト時にログインページにフォームが表示されません。私は何をすべきか?彼がスタッフ専用ページにアクセスしようとしたときに、ユーザーがログアウトしていない場合はログアウトしますか?はいの場合は、TemplateViewでCBVを使用してどのように行うことができますか?Django:クラスベースのビューログアウトのスタッフがいない場合

ビュー

from django.contrib.auth.mixins import PermissionRequiredMixin 
... 
class AdminView(PermissionRequiredMixin, TemplateView): 
    permission_required = 'is_staff' 
    template_name = 'checkout/admin.html' 

ログインURL

from django.contrib.auth.views import login 
... 
url(r'^entrar/$', login, {'template_name': 'accounts/login.html'}, name='login') 
+0

permission_requiredは、値が ' '.' 'の形式である必要がありますか? – zaidfazil

+0

@FazilZaidええ、私はその許可をする方法について疑問を抱いていました。私はこの方法で試しました。ちょうどそのドキュメントで正しい方法を見ましたが、 'is_staff 'がうまくいくかどうかわかりません。 –

+0

ログインビューを表示できますか? – zaidfazil

答えて

0

はこのミックスインを試してみてください:

from django.contrib.auth.mixins import LoginRequiredMixin, AccessMixin 
from django.contrib.auth import logout 

class LogoutIfNotStaffMixin(AccessMixin): 
     def dispatch(self, request, *args, **kwargs): 
      if not request.user.is_staff: 
       logout(request) 
       return self.handle_no_permission() 
      return super(LogoutIfNotStaffMixin, self).dispatch(request, *args, **kwargs) 

使用できるように、次のように実行します。

class AdminView(PermissionRequiredMixin, LogoutIfNotStaffMixin, TemplateView): 
    permission_required = 'is_staff' 
    template_name = 'checkout/admin.html' 

このmixinは、ディスパッチメソッドのis_staffプロパティ(Userクラス)を検証します(リクエストメソッドPOST、GETなどで動作します)。

関連する問題