2016-04-28 22 views
0

2種類のユーザー用に1つのLoginFormがあります。ここまでは問題ありません。問題は、どのビューでもLoginRequiredMixinを実行したときに発生します。理由はわかりませんが、ログインフォームのsuccess_urlにリダイレクトされています。ここに私のLoginFormがあります:djangoの2種類のアカウントとLoginRequiredMixinの1つのログインフォーム

form_valid方法は彼が持っているパーマに依存します。ここで

class LoginView(FormView): 
    form_class = AuthenticationForm 
    template_name = 'login.html' 

    def dispatch(self,request,*args,**kwargs): 
     if request.user.is_authenticated() and request.user.has_perm('users.is_contribuyente'): 
      return HttpResponseRedirect('/solicitudes-enviadas') 
     if request.user.is_authenticated() and request.user.has_perm('users.is_professional'): 
      return HttpResponseRedirect('/panel/inicio')   
     return super(LoginView,self).dispatch(request,*args,**kwargs) 


    def form_valid(self,form): 
     login(self.request,form.get_user()) 
     if self.request.user.has_perm('users.is_contribuyente'): 
      return redirect('/solicitudes-enviadas') 
     if self.request.user.has_perm('users.is_professional'): 
      return redirect('/panel/inicio') 

LoginRequiredMixinと私の見解:http://127.0.0.1:8000/entrar/?next=/panel/detalle-solicitud/declaracion-de-renta

class SendQuoteView(LoginRequiredMixin,VerifiedUserMixin,FormMixin,DetailView): 
    login_url = '/entrar/' 
    model = Request 
    form_class = SendQuoteForm 
    template_name = 'send_quote.html' 

のは、認証されていないユーザーがアクセスしようとしたとき、これはURLであるとしましょう。とができますユーザーが/panel/detalle-solicitud/declaracion-de-rentaにリダイレクトする必要がなく、その代わりにnext変数を取得する唯一のテストのために、/panel/inicio/form_valid

form_valid方法のinstrucionのURLをリダイレクトしている「is_professionalは」それはsuposeのパーマを持って言います:

def form_valid(self, form): 
     #login(self.request, form.get_user()) 
     next = self.request.GET('next') 
     print next 
     return super(LoginView, self).form_valid(form) 

LoginRequiredMixinのURLをどのように達成できますか?

答えて

1

魔法のようにURLに?next=...を処理するものは何もありません。値はrequest.GETから取得する必要があります。 Djangoにはis_safe_urlメソッドがあり、これを使用することができます。

built in login viewを使用してログインを処理する方が簡単です。次に、LOGIN_REDIRECT_URL設定のカスタムビューを作成し、そこでアクセス許可ベースのリダイレクトを処理できます。

+0

@ Alasdir私はそれを実装しましたが、form_validメソッドは次の変数を取得できません。 – dfrojas

+0

'next'変数を' form_valid'メソッドから得るのに問題はありません。 'self.request.GET'を使っていることを確認してください。私は前に' request.GET'を書いていました。 – Alasdair

+0

それは動作しません、私のform_validメソッドを見て、何が間違っている?常に「なし」と印刷しています。私はあなたの質問を編集しました – dfrojas

関連する問題