2013-07-30 4 views
0

У вас есть домашняя страница, где каждая страница с формой работает отлично.
Добавлена ​​форма для моей стартовой страницы, и на моем локальном сервере она работает нормально.
Но когда я добавляю его на производственный сервер, он не работает.
Он говорит, что CSRF-токен отсутствует или зарегистрирован.
Но я добавил токен, и он работает со всеми остальными страницами.Значок CSRF отсутствует или некорректен на одной странице

Что мне не хватает ...?

Посмотреть

@login_required 
    def start(request) : 
     libs = Library.objects.all(); 
     header = Header('Start'); 
     studies = None; 
     source = None; 
     if request.method == 'POST' : 
      if 'Show_studie' in request.POST: 
       studies = Study.objects.all; 
      if 'Show_source' in request.POST: 
       source = Source.objects.all; 
     dctArgs = { 
      'library_list': libs, 
      'styles_dir': conf.styles_path, 
      'header': header.html, 
      'studies_list':studies, 
      'source_list':source, 
      'images_dir': conf.images_path, 
      }; 
     return render_to_response('start.html', dctArgs, RequestContext(request)); 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<HTML> 
<HEAD> 
<TITLE></TITLE> 
<link rel="stylesheet" type="text/css" href="{{styles_dir}}/common.css" /> 
<link rel="stylesheet" type="text/css" href="{{styles_dir}}/header.css" /> 
<link rel="stylesheet" type="text/css" href="{{styles_dir}}/Headerstyles.css" /> 
</HEAD> 
<BODY> 
{{header|safe}} 
<h1></h1> 
<table id="doc_tbl" class="data" cellspacing=0> 
<tr> 
    <th>Name</th> 
    <th>Documents</th> 
    <th>Export</th> 
</tr> 
{% for library in library_list %} 
    <tr> 
    <td><a href="/library_overview/{{library.id}}/">{{library.name}}</a></td> 
    <td>{{library.source_set.all|length}}</td> 
    <td><a href="/library_export/{{library.id}}/format/TS/">Andra till Jesper Export</a></td> 
    </tr> 
{% endfor %} 
</table> 
<h3>Messages</h3> 
{{messages}} 
</br> 
<form id="form1" name="form1" method="post" action="/start/" enctype="multipart/form-data"> 
{% csrf_token %} 
<fieldset style="width:300px; margin-left:5px;"> 
<legend> Show all </legend> 
<input type="checkbox" name="Show_studie" value="Show Studie"> Studie 
<input type="checkbox" name="Show_source" value="Show Source"> Source 
</br> 
</br> 
<input type="submit" value="Show All"> 
</fieldset> 
{% if studies_list %} 
<h3> Studies </h3> 
<table class="table1"> 
<thead> 
<tr> 
    <th></th> 
    <th scope="col1" >Name</th> 
    <th scope="col1" >Added by</th> 
</tr> 
</thead> 
{% for study in studies_list %} 
<tbody> 
<tr> 
<td> 
    <a href="/define_study/{{study.id}}/edit/"><img class="icon" src="{{images_dir}}/edit-icon.png"/></a> 
    &nbsp; 
    <img onclick="javascript:return confirmDelete_name('Are you sure? The study and any associated information will be deleted.', {{study.id}}, 'delete_study');" class="icon" src="{{images_dir}}/delete-icon.png"/> 
</td> 
<td><a href="/define_study/{{study.id}}/">{{study.name}}</a></td> 
<td>{{study.metadata_added_by_user.first_name}}&nbsp;{{study.metadata_added_by_user.last_name}}</td> 
</tr> 
{% endfor %} 
</table> 
{% endif %} 
{% if source_list %} 
<h3> Source </h3> 
<table class="table1"> 
<thead> 
<tr> 
    <th></th> 
    <th scope="col1" >Name</th> 
    <th scope="col1" >Added by</th> 
</tr> 
</thead> 
{% for source in source_list %} 
<tbody> 
<tr> 
<td> 
    <a href="/define_study/{{study.id}}/edit/"><img class="icon" src="{{images_dir}}/edit-icon.png"/></a> 
    &nbsp; 
    <img onclick="javascript:return confirmDelete_name('Are you sure? The study and any associated information will be deleted.', {{study.id}}, 'delete_study');" class="icon" src="{{images_dir}}/delete-icon.png"/> 
</td> 
<td><a href="/define_study/{{study.id}}/">{{source.name}}</a></td> 
<td>{{source.metadata_added_by_user.first_name}}&nbsp;{{source.metadata_added_by_user.last_name}}</td> 
</tr> 
{% endfor %} 
{% endif %} 
</tbody> 
</table> 
</form> 
</BODY> 
</HTML> 

Forbidden (403) CSRF проверка не удалась. Запрос прерван. Справка Причина отказа: Тождество CSRF отсутствует или неверно.

В общем, это может произойти, если имеется подлинная подделка запроса на кросс-сайт или когда
от Dango не используется правильно. Для форм POST вам необходимо обеспечить:
• Функция просмотра использует RequestContext для шаблона вместо контекста.
• В шаблоне внутри каждой формы POST есть тег шаблона {% csrf_token%}, который предназначен для внутреннего URL-адреса.
• Если вы не используете CsrfViewMiddleware, вы должны использовать csrf_protect для любых видов
, которые используют тег шаблона csrf_token, а также те, которые принимают данные POST. Вы видите раздел справки этой страницы, потому что у вас DEBUG = True в файле настроек Django. Измените это на False, и отобразится только начальное сообщение об ошибке.
Вы можете настроить эту страницу с помощью параметра CSRF_FAILURE_VIEW.

Настройки

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

На странице, которая работает, я получаю сообщение:

<django.contrib.messages.storage.fallback.FallbackStorage object at 0x03B7A270> 
+0

Покажите нам некоторые подробности! – Rohan

+0

Мы не можем вам помочь, если не видим код, который вы используете. Поэтому обновите вопрос с помощью 'view.py' и вашего шаблона, который вызывает проблему. –

+0

Идентификатор CRSF работает с файлами cookie и HTTP-заголовками. Вы изменили веб-браузер? Можем ли мы получить некоторую информацию о ваших политиках cookie сервера и браузера и о том, как вы добавили токен CSRF? – Ricola3D

ответ

1

Попробуйте обертывание ваш взгляд в @requires_csrf_token декоратора, например, так:

from django.views.decorators.csrf import requires_csrf_token 

@requires_csrf_token 
@login_required 
def start(request): 
    ... 
+0

Теперь он работает с этим решением. Спасибо @Vasily Alexeev Knbk Inforian и все за помощь. – kingRauk

0

Вы можете используйте декоратор csrf_exempt, чтобы отключить защиту CSRF для определенного вида.

from django.views.decorators.csrf import csrf_exempt 
@csrf_exempt 
def someview(): 
    ...... 

Я знаю Его не то, что вы хотите, но вы можете попробовать это, если вы хотите :)

Смежные вопросы