簡體   English   中英

Django:禁止(CSRF令牌丟失或不正確。)

[英]Django: Forbidden (CSRF token missing or incorrect.)

我的django版本是1.11.4,我正在做一個簡單的練習,我需要制作一個網頁,以便人們可以為選定的餐廳提交意見。

但是它顯示消息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) ,並嘗試了幾種從Internet搜索的方法。 但這仍然行不通。

有人可以幫我嗎? 謝謝!

您應該使用更新的書。 render_to_response已被棄用,這里不應使用RequestContext 此外,通過locals是一種可怕的反模式,盡管這不是造成問題的原因。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM