【发布时间】:2020-01-31 13:46:30
【问题描述】:
我正在制作一个简单的 Web 服务器来获取 html 输入数据并将其插入到数据库表中。
我尝试使用 POST 请求遇到更多 CSRF 麻烦,转向 GET 请求以通过 CSRF(在我的情况下不是必需的),仍然无法将 html 数据获取到数据库中。
myapp/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=300, unique=True)
content = models.TextField()
myapp/templates/createpost.html
<head>
<title>Create a Post </title>
</head>
<body>
<h1>Create a Post </h1>
<form action="" method="GET">
{%csrf_token%}
Title: <input type="text" name="title"/><br/>
Content: <br/>
<textarea cols="35" rows="8" name="content">
</textarea><br/>
<input type="submit" value="Post"/>
</form>
</body>
</html>
myapp/views.py
from django.shortcuts import render
from .models import Post
def createpost(request):
if request.method == 'GET':
if request.GET.get('title', None) and request.GET.get('content', None):
post = Post()
post.title = request.GET.get('title', None)
post.content = request.GET.get('content', None)
post.save()
return render(request, 'createpost.html')
else:
return render(request, 'createpost.html')
urls.py
from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('', TemplateView.as_view(template_name='createpost.html'), name='createpost'),
]
我正在使用 Django 2.2.6 和 PyCharm 社区 2019.2.3 我已经搜索了将近 2 天,检查了 django doc 和 stackoverflow 答案,没有任何帮助,我不得不询问以确保它不是与版本相关的问题,如果我错过了一个简单的点,请原谅我只是一个初学者。
【问题讨论】:
-
你试过打印这个吗?
request.GET.get('title', None)是空的还是没有的?你得到了什么? -
我不知道该怎么做,我试过 python manage.py runserver 然后在另一个终端上调用 view.py 我不能,我试图将打印命令添加到视图和我根本没有输出
-
好的,我的意思是,做
print(request.GET.get('title', None))并再次提交表单并检查 -
我做到了,根本没有打印,我得到的只是我的 GET 请求 [02/Oct/2019 03:00:01] "GET /?csrfmiddlewaretoken=Q0FAgroc1JbIOfKImoTIcMiX4qv1AGVYIy9quUdPSu16ttR1++++++++++++++++ /1.1" 200 440 试图从中提取标题和内容。
-
显示您的网址。几乎可以肯定你没有发送到 createpost 视图。但无论如何你应该在这里使用 POST。
标签: django django-models django-templates django-views