2017-10-14 20 views
1

を立ち往生。フォームのmethod = "post"の接続システムを試してみます。私はCSRF Coo​​kieはなどを設定していないがあります提出したときに...私はフォーラムで同様の問題をたくさん見ましたが、それでも、私はすべての答えを理解していないとしてビットが立ち往生、私は@csrf_exempt除外働いた何かを見つけていませんでしたが、私はそれが物事を無効にするようなものであることを見て、それは良い考えではありませんでした。ジャンゴCSRFのクッキーが設定されていません。私は仕事ジャンゴと私は、この本を買ってきた方法を学んでいる

私のhtml login.htmlページ::ここでは、コードです

<form action="." method="post">{% csrf_token %} 
{% if error %} 
<p class="error">{{ error }}</p> 
{% endif %} 
<p> 
    <label for="email">E-mail :</label> 
    <input name="email" id="email" size="30" type="email" /> 
</p> 
<p> 
    <label for="password">Password :</label> 
    <input name="password" id="password" size="30" type="password" /> 
</p> 
<p> 
    <input type="submit" value="Log-in" /> 
    <a href="">Créer un compte</a> 
</p> 

私のviews.py:

from django.shortcuts import render_to_response 
from datetime import datetime 
from django.views.decorators.csrf import csrf_protect 
from django.http.response import HttpResponseRedirect 
# from django.http import HttpResponseRedirect 

def welcome(request): 
    return render_to_response('welcome.html', 
           {'curent_date_time' : datetime.now}) 


@csrf_protect 
def login(request): 
    if len(request.POST) > 0: 
     if 'email' not in request.POST or 'password' not in request.POST: 
      error = "Veuillez entrer un adresse mail et un mot de passe." 
      return render_to_response('login.html', {'error': error}) 
     else: 
      email = request.POST['email'] 
      password = request.POST['password'] 
      if password != 'sesame' or email != '[email protected]': 
       error = "Adresse de couriel ou mot de passe errone." 
       return render_to_response('login.html', {'error': error}) 
      else: 
       return HttpResponseRedirect('welcome/') 
    else: 
     return render_to_response('login.html') 

必要であれば、私はまた私の設定を表示することができます。そして、それが助けることができるなら、エラーmessaheの画面。

P.S:私はすでに、この上のほとんどのものがあります知っているが、私はこだわっていると私はそれがどこから来るのかを理解することのためにいくつかの個人的な助けが良いでしょう。

+0

関連があるかどうかわかりませんが、コードに「」が表示されません。 – roganjosh

+0

彼は、私はそれが完全に働いたコード – SamHel

答えて

2

あなたのテンプレートは{% csrf_token %}をレンダリングしようとしますが、それはリクエストにアクセスすることなく、そうすることはできません。テンプレートへの要求に渡すには、render()render_to_response()を置き換える:

この関数は、(レンダリングの導入を先行し)、それことを除いて同様に動作します:

@csrf_protect 
def login(request): 
    ... 
    return render(request, 'login.html') 

もうrender_to_response()を使用することをお勧めしません応答で要求を利用可能にしません。これは推奨されておらず、将来廃止される可能性があります。

+0

をコピーしたとき、私はちょうどそれを選択するのを忘れている、のあなたにたくさんありがとう!私は古い本をたどりましたが、コンテンツが少し古いという事実はありませんでした。 – SamHel

関連する問題