2017-12-26 53 views
0

すべてジャンゴCBVに次の値を設定:URLに行くは自動的に私は私のウェブサイトはこのような仕事をしたい

  1. 試みを。あなたは、ログインページにリダイレクトされます

  2. あなたがログインしていないので、(=>「次」パラメータになるはずです)。

  3. ログインした後、それはあなたを取るべき「次」。

これまでのところ、この方法で次の使用法をフレーム化したことはありません。ドキュメントはまったく役に立たない。他の人はを明示的にクリックすると、をリダイレクトする方法を尋ねます。

CBVのすべてのget_success_url()メソッドまたはget_context_data()メソッドを1つ1つ変更して、 'next'パラメータを適切に与える必要がありますか?私は、実際にどのビューが "ああ、あなたはログインしていない、/ login /に行っている"と言うことができません。なぜなら、少なくとも、そのメソッドをオーバーライドして、それにrequest.pathパラメータを与えることができる。私はそれがAuthenticationMiddleware、またはLoginRequiredMiddlewareだと仮定します

明らかに私がディスパッチメソッドにブレークポイントを置くとき、それはどこでも私の元の試行されたURLを見ないので、それは単に "LoginView"(django 1.11)

request.path =「/ログイン/」

どのように私は、「本来のURL」の値を引き抜きにし、それが/ /ログイン」にリダイレクトするように、「次へ」パラメータに設定していますか? 「/ login/」の代わりに「next = next_page」を使用しますか?

urlpatterns = [ 
url(r'^login/$', 
    login, 
    { 
     'template_name': 'login.html', 
     'authentication_form': BootstrapAuthenticationForm, 
     'extra_context': 
     { 
      'title': 'Log in', 
      'year': timezone.now().year, 
     }, 
    }, 
    name='login'), 
url(r'^logout$', 
    logout, 
    { 
     'next_page': 'login', 
    }, 
    name='logout'), 

あなたが私のlogin.htmlを見たいと思ったら、ちょうどそう言いなさい。私はそれが最初に文脈の中にある限り「次へ」を渡すことに問題がないので、ここでも重要ではないと思う。

答えて

1

TomasTomecek

# in settings.py 

LOGIN_URL = '/login/' 

LOGIN_EXEMPT_URLS = (
r'^about\.html$', 
r'^legal/', # allow any URL under /legal/* 
) 

MIDDLEWARE_CLASSES = (
    # ... 
    'python.path.to.LoginRequiredMiddlewareFromTomasTomecek', 
) 
+0

はありがとう、次のミドルウェアを使用してください!私は残念なことに休日の1週間の理由でこれをテストすることはできませんが、それを試して1月に最初のことを報告します。 – mastachimp

+0

ミドルウェアを少し編集しなければならなかったのは私の設定login_urlを奇妙な方法で参照していたからですが、その後は素晴らしいことです!ありがとうございました! – mastachimp

+0

恐ろしい!それがうまくいってうれしい! – abybaddi009

関連する問題