Проверка CSRF не удалась. Запрос отменен. Я думаю, что это скорее несоответствие токена, потому что есть реализация {% csrf_token %}
Причина, приведенная для отказа:
Маркер CSRF отсутствует или неверен.
Я предоставил "{% csrf_token %}" в отношении этой html-страницы, но сам не могу отсортировать ошибку, возможно, она не в моем понимании django.
eventcreationform.html
<!DOCTYPE html>
<html lang="en">
<head>
{% csrf_token %}
</head>
<body>
<div class="alert-success">
{% if messages %} {{ message }} {% endif %}
</div>
<div class='container'>
<h1>
{% if user.is_authenticated %}
{{ user.username }} !
{% endif %} Please fill this form:
</h1>
<h3>
<form method='POST' enctype="text/plain"> {% csrf_token %} {{ form }}
<button type='submit' class='btn btn-default'>Submit</button>
</form>
</h3>
</div>
</body>
</html>
forms.py
...
class EventForm(forms.ModelForm):
event_name = forms.CharField(label='Name')
event_date_time = forms.DateTimeField(label='Date and Time',
widget=forms.DateTimeInput)
address = forms.CharField(label='Address')
class Meta:
model = CreatedEvent
fields = ('event_name', 'event_date_time', 'address')
...
urls.py
from django.conf.urls import url
from django.views.generic import TemplateView
from rest_framework.urlpatterns import format_suffix_patterns
from api import views
from django.conf import settings
from django.conf.urls.static import static
app_name = 'api'
urlpatterns = [
....
url(r'^register/', views.Register.as_view(), name='register'),
url(r'^eventform/', views.EventCreationForm.as_view(), name='eventform'),
....
]
urlpatterns = format_suffix_patterns(urlpatterns)
urlpatterns += static(settings.STATIC_URL,
document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_ROOT, document_root=settings.MEDIA_ROOT)
views.py
....
class EventCreationForm(View):
template_eventcreationform = 'eventcreationform.html'
form_class = EventForm
def get(self, request):
form = self.form_class(None)
return render(request, self.template_eventcreationform, {'form':
form})
def post(self, request):
# data is here
form = self.form_class(request.POST)
if form.is_valid():
event = form.save(commit=False)
user = request.user.objects
form.user = user.email
event_name = form.cleaned_data.get('event_name')
event_date_time = form.cleaned_data.get('event_date_time')
event_address = form.cleaned_data.get('address')
event.save()
message = 'Event added'
return render(request, 'base.html', {'message': message})
else:
message = 'Invalid form data, try again'
form = self.form_class(None)
return render(request, self.template_eventcreationform,
{'message': message, 'form': form})
....
1 ответ
Ошибка исчезла, я думаю, что проблема была с 'enctype=text/plain-text', и я просто удалил ее.