2017-02-08 6 views
0

ログインしません、私はそうのようなログインフォームがあります。ジャンゴAuthenticationForm - ユーザーが

login_form.html

{% extends "base.html" %} 
{% block title %}Login{% endblock %} 
{% block content %} 

    <h2>Login</h2> 

    <form action="/accounts/login/" method="post"> 
    {% csrf_token %} 
    {{form.as_p}} 
    <input type="submit" value="Login" /> 

    </form> 

{% endblock %} 

そうのようなログインの完全なページ:

login_complete.html

{% extends "base.html" %} 
{% block title %}You are logged in{% endblock %} 
{% block content %} 

    <h2>Thank you for logging in</h2> 
    {% if user.is_authenticated %} 
     <p>foo</p> 
    {% endif %} 

{% endblock %} 

ログインビュー:

def login(request):   
if request.method == "POST": 
    form = AuthenticationForm(data=request.POST) 
    if form.is_valid(): 
     auth.login(request, form.get_user()) 
     return HttpResponseRedirect("/accounts/login/complete") 
else: 
    form = AuthenticationForm() 
token = {} 
token.update(csrf(request)) 
token["form"] = form 
return render_to_response("registration/login_form.html", token) 

ユーザーはログインしていません。ユーザー名とパスワードは正しいです(無効な組み合わせで試してみましたが、その場合はログインページにとどまりエラーが表示されます)メソッド(auth.loginで、私のログイン()は偶然ではありません)。

編集:私のlogin()メソッドが呼び出されている、それはまた、正しく私にログイン完全なページを示しているが、

{% if user.is_authenticated %} 
     <p>foo</p> 
    {% endif %} 

EDIT2:

に {%をuser.is_authenticated場合%} を変更します
{% if request.user.is_authenticated %} 

も機能しません。

私は間違っていますか?

+0

テンプレートにユーザーオブジェクトを渡していない場合は、 '{%if request.user.is_authenticated%}'を試してください。 – Darshit

+0

こんにちは、ありがとうございます。 – Lomtrur

+0

Djangoには、[認証ビューとフォーム](https://docs.djangoproject.com/en/1.10/topics/auth/default/#module-django.contrib.auth.views)が付属しています。可能であれば、自分で作成するのではなく、組み込みのログインビューとフォームを使用する必要があります。 – Alasdair

答えて

2

の代わりにrenderを使用してください。 render_to_responseメソッドは廃止されました。

あなたがrenderを使用する場合は、CSRFトークンを処理するために、ビューで何もする必要はありません、あなたはrequestuserなどのコンテキストプロセッサによって設定されたすべての変数にアクセスすることができるようになります。

def login(request):   
    if request.method == "POST": 
     form = AuthenticationForm(data=request.POST) 
     if form.is_valid(): 
      auth.login(request, form.get_user()) 
      return HttpResponseRedirect("/accounts/login/complete") 
    else: 
     form = AuthenticationForm() 
     context = {'form': form} 
     return render(request, "registration/login_form.html", form) 

render_to_responseを使用する他のビューも、ログイン完了のように更新する必要があります。

関連する問題