Python Django 1.11:将表单数据发布到数据库
作为第一个项目,我正在制作一个超简约的博客应用程序。我很难让表单的CharField显示在页面上,也很难找到关于如何将表单数据放入数据库的简明解释Python Django 1.11:将表单数据发布到数据库,python,django,python-3.6,django-1.11,Python,Django,Python 3.6,Django 1.11,作为第一个项目,我正在制作一个超简约的博客应用程序。我很难让表单的CharField显示在页面上,也很难找到关于如何将表单数据放入数据库的简明解释 def content_get(request):
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
为清晰起见进行编辑:我正在尝试这样做,以便任何人都可以发布内容,而不仅仅是像官方教程中那样拥有管理员权限的人
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
forms.py:
views.py:
main.html:
我感谢你的意见
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
main.html:
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
{%csrf_令牌%}
{{form}}
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
注意:您需要将form action设置为method content\u get的url。根据您的代码,您需要修改许多要点:
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
forms.py:您需要ModelForm
才能使用modelPost
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
from django.forms import ModelForm
from .models import Post
class ContentForm(ModelForm):
class Meta:
model = Post
fields = "__all__"
views.py:您必须将表单
传递给模板,以便它可以显示在main
html中,并调用form.save()
将数据保存到数据库中
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .forms import ContentForm
from .models import Post
def post(request ):
post_list = Post.objects.order_by('id')
form = ContentForm()
return render(request, 'posts/main.html',
{'post': post_list,
'form':form},
)
def content_get(request):
if request.method == 'POST':
form=ContentForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
假设您有appurl.py如下所示:
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
from django.conf.urls import url
from . import views
app_name = 'post'
urlpatterns = [
url(r'^$', views.post, name='main'),
url(r'^content$', views.content_get, name='content_get'),
]
最后,在main.html中,您需要定义要发布的action
:
def content_get(request):
if request.method == 'POST':
form = ContentForm(request.POST)
if form.is_valid():
instance = form.save()
return HttpResponse('create success')
else:
return HttpResponse(forms.errors)
else:
return render(request, 'main.html', {'form':form})
<form action = '/content_get/' method = 'post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
<html>
<head>
<h1>Nanoblogga</h1>
</head>
<body>
{% for i in post %}
<li>{{ i }}</li>
{% endfor %}
<form action = '/content' method ='post'>
{% csrf_token %}
{{ form }}
<input type = 'submit' value = 'Submit' />
</form>
</body>
</html>
纳诺布洛加
{post%中的i为%1}
{{i}}
{%endfor%}
{%csrf_令牌%}
{{form}}
正如您所说,我对其进行了更改,但我试图将表单提交内容保留在主页上,而不是转到其他url。我将如何实现这一点?这将我重定向到/content,我认为我需要创建或更改它。但它解决了我的主要问题。您可以使用重定向
,它将重定向到您想要的任何url,如主url。检查更新的答案。