2017-08-10 14 views
2

私のdjangoバージョンは1.11.4です。私は自分の書籍の中で、私が選択した人のコメントを投稿できるWebページを作る必要がありますレストラン。Django:禁止されています(CSRFトークンがないか間違っています)

しかし、メッセージForbidden (CSRF token missing or incorrect.)が表示されます。

views.py:

comments.html
def comments(request, id): 
    if id != 0: 
     r = Restaurant.objects.get(id = id) 
    else: 
     return HttpResponseRedirect('/restaurantsList/') 

    if request.POST: 
     dateTime = timezone.localtime(timezone.now()) 
     Comment.objects.create(
       content = request.POST['content'], 
       visitor = request.POST['visitor'], 
       email = request.POST['email'], 
       dateTime = dateTime, 
       restaurant = r 
     ) 

    return render_to_response('comments.html', locals(), RequestContext(request)) 

:私は.htmlの中{% csrf_token %}を追加しました

<!doctype html> 
<html> 
<head> 
    <title>Comments</title> 
    <meta charset='utf-8'> 
</head> 

<body> 
    <h2>Comments for {{ r.name }}</h2> 

    {% if r.comment_set.all %} 
     <p>We have {{ r.comment_set.all | length }} comments</p> 

     <table> 
      <tr> 
       <th>Visitor</th> 
       <th>Time</th> 
       <th>Comment</th> 
      </tr> 

      {% for c in r.comment_set.all %} 
       <tr> 
        <td>{{ c.visitor }}</td> 
        <td>{{ c.dateTime | date:'F j, Y' }}</td> 
        <td>{{ c.content }}</td> 
       </tr> 
      {% endfor %} 
     </table> 
    {% else %} 
     <p>No comment</p> 
    {% endif %} 

    <br /><br /> 

    <form action='' method='post'> {% csrf_token %} 
     <table> 
      <tr> 
       <td><label for='visitor'>Visitor: </label></td> 
       <td><input id='visitor' type='text' name='visitor'></td> 
      </tr> 
      <tr> 
       <td><label for='email'>E-mail: </label></td> 
       <td><input id='email' type='text' name='email'></td> 
      </tr> 
      <tr> 
       <td><label for='content'>Comment: </label></td> 
       <td> 
        <textarea id='content' rows='10' cols='48' 
        name='content'></textarea></td> 
       </td> 
      </tr> 
     </table> 
     <input type='submit' value='Submit'> 
    </form> 
</body> 

は、ビュー機能でRequestContext(request)を使用して、私は、検索方法をいくつか試してみましたインターネットから。しかし、それはまだ動作しません。

誰かが私に助けを与えることができますか?ありがとう!

答えて

3

最新の本を使用する必要があります。 render_to_responseは推奨されず、RequestContextはここでは使用しないでください。また、localsを渡すことは、あなたの問題の原因ではありませんが、恐ろしい反パターンです。

return render(request, 'comments.html', {'r': r}) 
+1

日付のチュートリアルまで以上を探しているなら、ポーリングチュートリアルとDjango女の子チュートリアルを開始するには、両方の良い場所です。https://docs.djangoproject.com/en/1.11/intro/tutorial01 /とhttps://tutorial.djangogirls.org/ja/ – FlipperPA

関連する問題