2017-08-10 138 views
2

我的django版本是1.11.4,我在我的書中進行了一個簡單的練習,我需要創建一個網頁,人們可以提交他們對所選內容的評論餐廳。Django:禁止(CSRF令牌丟失或不正確)

但它顯示消息Forbidden (CSRF token missing or incorrect.)

views.py:

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)) 

comments.html:

<!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> 

我以html添加{% csrf_token %},在取景功能使用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/en/ – FlipperPA

相關問題