Python Django 1.11:将表单数据发布到数据库

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):

作为第一个项目,我正在制作一个超简约的博客应用程序。我很难让表单的CharField显示在页面上,也很难找到关于如何将表单数据放入数据库的简明解释

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
才能使用model
Post

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。检查更新的答案。