Запрещена (403) проверка CSRF - PullRequest
0 голосов
/ 17 января 2020

Когда я нажимаю кнопку ОК в add_tech. html, тогда он перенаправляет меня на upload_type. html. Но он показывает ошибку при нажатии кнопки ОК.

ОШИБКА -

Запрещена (403) проверка CSRF. Запрос отменен. Справка Причина сбоя: токен CSRF отсутствует или неверен.

Мой шаблон (add_tech. html) -

<form action="/uploads/type/" method="post">
  <label for="your_name">New Tech: </label>
  <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
  <input type="submit" value="OK">
</form>   

Мой шаблон (upload_type. html) -

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{form}}
</form>

My View.py -

def upload_type(request):
    if request.method =='POST':   
        details = NameForm(request.POST) 
        if details.is_valid():
            return render(request, "core/upload_type.html", {'form':details})  
    else:
        details = NameForm()

    return render(request, 'core/upload_type.html', {'form': details})

My Url.py -

    urlpatterns = [
    url(r'^uploads/type/$', views.upload_type, name='upload_type'),]

My form.py -

from uploads.core.models import Name 
class NameForm(forms.ModelForm):
    class Meta:
        model = Name
        fields = ('your_name', )

My Models.py-

class Name(models.Model):
    your_name = models.CharField(max_length=100)

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Для запроса POST требуется токен csrf. Поэтому в свой шаблон добавьте `{% csrf_token%}.

<form action="/uploads/type/" method="post">
  {% csrf_token %}
  <label for="your_name">New Tech: </label>
  <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
  <input type="submit" value="OK">
</form>  

Из Документов :

Django поставляется с простым в использовании -использование защиты от подделки межсайтовых запросов. При отправке формы через POST с включенной защитой CSRF необходимо использовать тег шаблона csrf_token, как в предыдущем примере.

0 голосов
/ 17 января 2020

Вам нужен токен csrf, подобный этому, для вашего метода записи в шаблоне django

 <form action="/uploads/type/" method="post">
     {% csrf_token %}
  <label for="your_name">New Tech: </label>
  <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
  <input type="submit" value="OK">
   </form>   
...