2014-09-09 5 views
0

Я изучаю django, и я получаю ошибку при попытке ввести значение во входной текст и передать его как аргумент другой форме.Ошибка Ошибка проверки CSRF. Запрос отменен в Django

Запрещено (403) Не удалось выполнить проверку CSRF. Запрос прерван.

Причина, данная для отказа: Недопустимый токен CSRF.

Это мои сниппеты

forms.py

class ConfigForm(forms.ModelForm): 
    def __init__(self,*args, **kwargs): 
     id_provider = kwargs.pop('id_provider') 
     super(ConfigForm,self).__init__(*args, **kwargs) 
     self.fields['id_provider'].widget= forms.TextInput(attrs='id_provider:Id_provider'}) 
    id_provider = forms.CharField() 

    class Meta: 
     model = Config 

views.py

def configView(request): 
    a = request.session.get('a', None) 
    if request.method == 'POST': 
     form = ConfigForm(request.POST, instance=a) 
     if form.is_valid(): 
      save_it = form.save(commit=False) 
      save_it.save() 
    else: 
     form = ConfigForm(instance = a) 

    return render_to_response("config.html",{'id_providor':id_provider},context_instance=RequestContext(request)) 

HTML-код, где я пытаюсь отправить значение аргумента:

<form method='post' action="/config/"> 
<input type="text" class="form-control" name="id_provider" id="id_provider" value="{{ id_providor }}"/> 
<input class="btn btn-danger" type="submit" value="Config"> 

config.htm л (форма, в которой я посылаю значение)

{% extends 'base.html' %} 
{% block content %} 
<div class="container"> 
<div class="row"> 
<div class="col-md-4"> 
<form method='POST' action='' class='form'> 
    <div class="form-group"> 
     {% csrf_token %} 
     {{ form.as_p }} 
    </div> 
    <button type='submit' class="btn btn-primary">Save</button> 
</form> 
</div> 
</div> 
</div> 
{% endblock %} 

Я не знаю, если ошибка, если в представлении или, как я пытаюсь отправить параметр. Помощь пожалуйста Спасибо заранее

UPDATE я решить эту проблему с @csrf_exempt флагом над ConfigView (views.py) Теперь у меня есть эта ошибка:

KeyError at /config/ 

'id_proveedor' 

Request Method:  POST 
Request URL: http://192.168.0.219:8080/config/ 
Django Version:  1.6.5 
Exception Type:  KeyError 
Exception Value:  

'id_provider' 

Exception Location:  /home/pyc/DjangoProjects/monitor/prov/forms.py in __init__, line 19 
Python Executable: /usr/local/bin/python 
Python Version:  2.7.3 
Python Path:  

['/home/pyc/DjangoProjects/monitor', 
'/usr/local/lib/python2.7/site-packages/simplejson-3.6.0-py2.7-linux-x86_64.egg', 
'/usr/local/lib/python27.zip', 
'/usr/local/lib/python2.7', 
'/usr/local/lib/python2.7/plat-linux2', 
'/usr/local/lib/python2.7/lib-tk', 
'/usr/local/lib/python2.7/lib-old', 
'/usr/local/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/site-packages'] 

я не делаю понять, что не так. Любые советы ??

+0

Куда деется этот html-фрагмент? Это не часть шаблона config.html, не так ли? – Norman8054

+0

Да в шаблоне config.html. Я поставил флаг @csrf_exempt в мои view.py и ошибка gon, теперь у меня есть новая ошибка: KeyError at/config/'id_provider' Исключение Место: \t/home/pyc/DjangoProjects/monitor/prov/forms. py в __init__, строка 19 – Joseleg

ответ

0

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

Это не 100% ясно, но я думаю, вы не включаете {% csrf_token %} в том виде, который вы фактически отправляете. Вы должны убедиться, что этот тег используется в каждой форме HTMl, которая будет отправлена ​​с использованием POST.

+0

Я использую тег csrf_token в шаблоне формы, но я не знаю, почему я получаю эту ошибку

{% csrf_token %} {{ form.as_p }}
Joseleg

0

Попробуйте это:

class ConfigForm(forms.ModelForm): 
    def __init__(self,*args, **kwargs): 
     id_provider = kwargs.pop('id_provider') 
     super(ConfigForm,self).__init__(*args, **kwargs) 
     if self.fields.has_key('id_provider'): 
      self.fields['id_provider'].widget= forms.TextInput(attrs='id_provider:Id_provider'}) 
    id_provider = forms.CharField() 

    class Meta: 
     model = Config 

Скажите мне, если это работает.

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