Я пытался с запросом POST получить больше проблем с CSRF, Обратился к GET-запросу, чтобы перейти через CSRF (в моем случае это не нужно), но все еще не смог его сделать.
Хорошо.
ОСТАНОВИТЬ ВСЕ ПРЯМО СЕЙЧАС
Теперь
- сделать официальный учебник по Django и научиться использовать формы и модели Django
- прочитайте спецификацию HTTP о правильном использовании GET-запросов (подсказка: здесь важно слово "idempotent")
- исправьте ваш код соответственно
- , если к тому времени вы все еще есть проблемы с токеном csrf, вернитесь и опубликуйте вопрос об этом (с соответствующим MCVE и т. д.).
Также обратите внимание, что ваш вопрос должен быть сформулирован как неясный или OT, так как вы не делали 'Не объясните, в чем ваша проблема (подсказка: «не работает» ничего не объясняет). Но в любом случае ...
То, что вы хотите (nb: модели без изменений):
myapp / forms.py
from django import forms
from . models import Post
class PostForm(forms.ModelForm):
class Meta(object):
model = Post
fields = ("title", "content")
views.py
from django.shortcuts import redirect, render
from . models import Post
from . forms import PostForm
def createpost(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save()
# read the doc for `redirect` and change the destination to
# something that makes sense for your app.
# as to why we redirect, cf https://en.wikipedia.org/wiki/Post/Redirect/Get
return redirect("/")
else:
# GET request, present an empty form
form = PostForm()
return render(request, 'createpost.html', {"form": form})
urls.py
from django.contrib import admin
from django.urls import path, include
# NB: actually you should define myapp's urls in
# myapp/urls.py and `include` them here
from myapp.views import createpost
urlpatterns = [
path('admin/', admin.site.urls),
path('/', createpost, name='createpost'),
]
myapp / templates / createpost.html
<head>
<title>Create a Post </title>
</head>
<body>
<h1>Create a Post </h1>
<form action="" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Post"/>
</form>
</body>
</html>
Я не могу гарантировать, что это будет работать из коробки (мне придетсяопубликовать полный проект с правильными настройками и т. д., чтобы быть уверенным - и на самом деле проверить его хотя бы один раз на опечатки и т. д.), но это верный способ сделать все.
Я искал почти 2days
Это 2 дня впустую, что вам лучше использовать официальный учебник по Django. Я также предлагаю вам научиться отлаживать программы - просто добавив пару вызовов «print (« XXX »)» в ваше представление и проверив выходные данные вашего devserver, стало бы понятно, почему ничего не было создано в вашей базе данных (подсказка: с вашим исходным urls.py,Вы НИКОГДА не вызываете функцию просмотра).