Маркер CSRF отсутствует или неверен (я знаю, его уже спрашивали!) - PullRequest
2 голосов
/ 09 февраля 2012

Два дня троллил через Google, stackoverflow и docs.djangoproject.com для решения проблем CSRF.

Отказ от ответственности, я новичок в Django и слежу за книгой Полное руководство по django - веб-разработка сделана правильно. Ну, очевидно, я что-то не так :-(

Смотрите ниже одну такую ​​попытку и посмотрите, можете ли вы указать на какие-либо ошибки, потому что я попробовал все предложения по stackoverflow, но пока не повезло:

view.py:

from django.shortcuts import render_to_response
from django.template import RequestContext

def add_vehicle(request):
    return render_to_response('vehicle.html', RequestContext(request, {}))

vehicle.html:

{% extends "base.html" %}
{% block title %}Vehicle Registration{% endblock %}
{% block content %}
<html>
<head>
</head>
<body>

<form action="/vehicle/" method="post"> {% csrf_token %}
    <table width=100%>
        <tr>
            <td>Reg #:</td>
            <td><input type="text" name="regnumber"></td>
            <td></td>
        </tr>
        <tr>
            <td>Model:</td>
            <td><input type="text" name="model"></td>
            <td></td>
        </tr>
        <tr>
            <td>Manufacturer:</td>
            <td><input type="text" name="manufacturer"></td>
            <td></td>
        </tr>
        <tr>
            <td>Year:</td>
            <td><input type="text" name="year"></td>
            <td></td>       
        </tr>
        <tr>
            <td>Chassis #:</td>
            <td><input type="text" name="chasisnumber"></td>
            <td></td>       
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="Submit">
            <input type="submit" value="Clear">
            </td>
            <td></td>       
        </tr>
    </table>
</form>
</body>
</html>
{% endblock %}

Надеюсь, это не слишком много кода для стекового потока.

Теперь я продолжаю получать CSRF-токен, отсутствующий или неверный .

Пожалуйста, помогите.

Редактировать (добавление сведений об ошибке)

settings.py выглядит так:

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)

Вот что выводит консоль при открытии страницы vehicle.html:

warnings.warn("A {% csrf_token %} was used in a template, but the context did not provide the value.  This is usually caused by not using RequestContext.")

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

Подпись для render_to_response - render_to_response(template_name[, dictionary][, context_instance][, mimetype]), поэтому следует ли вам вызывать ее следующим образом, чтобы убедиться, что токен csrf помещен в контекст?

return render_to_response('vehicle.html', {}, context_instance= RequestContext(request))`
0 голосов
/ 09 февраля 2012

Вы должны проверить эту документацию https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

Возможно, вам не хватает промежуточной посуды

...