Python-web框架-Django创建一个应用(简单的博客)详细步骤总结(二)--处理用户输入,建立表单

目录

7 处理用户输入

7.1 在模板添加HTML表单

7.2 向应用添加URLconf项

 7.3 创建视图

8 建立表单和表单模型


7 处理用户输入

接着上一篇文章的内容,应用建成之后,如何来处理用户输入的内容?

7.1 在模板添加HTML表单

在此为用户创建一个表单,修改myblog/templates/archive.html文件:

<form action="/myblog/create/" method="post">{% csrf_token %}
    <table>{
   
   { form }}</table><br>
    Title:
    <input type= text name=title><br>
    Body:
    <textarea name=body rows=3 clos=60></textarea><br>
    <input type=submit>
</form>
<hr>

{% for post in posts %}
      <h2>{
   
   { post.title }}</h2>
      <p>{
   
   { post.tiemstamp }}</p>
      <p>{
   
   { post.body }}</p>
      <hr>
{% endfor %}

启动服务器,刷新浏览器页面,同时显示了用户的输入和博文:

7.2 向应用添加URLconf项

使用上一步的html,需要用到/myblog/create/路径,创建视图函数creat_blogpost,用于把内容保存到数据库。

在/myblog/urls.py添加项:

from django.urls import re_path as url
from . import views

urlpatterns = [
      url(r'^archive$',views.archive),
      url(r'^create/',views.create_blogpost),
]

 7.3 创建视图

修改/myblog/views.py文件,添加上一步用到的函数creat_blogpost:

from django.shortcuts import render
from myblog.models import BlogPost
from django.http import HttpResponseRedirect
from datetime import datetime
from django.template import RequestContext
# Create your views here.
def archive(request):
    #post = BlogPost.objects.all()
    post = BlogPost.objects.all().order_by('-timestamp')
    return render(request,'archive.html',{'posts':post})

def create_blogpost(request):
    if request.method == 'POST':
        BlogPost(
            title=request.POST.get('title'),
            body=request.POST.get('body'),
            timestamp=datetime.now(),
        ).save()
        return HttpResponseRedirect('/myblog/archive')

此时填写表单内容,点击提交,已经可以实现添加。

8 建立表单和表单模型

为了简化接受用户数据,做如下修改

1.在myblog/models.py中添加BlogPostForm类:

from django.db import models
from django import forms

# Create your models here.

class BlogPost(models.Model):
    title = models.CharField(max_length=150) #博客的标题
    body = models.TextField()    #博客正文
    timestamp = models.DateTimeField() #博客创建时间

    class Meta:
        ordering = ('-timestamp',)

class BlogPostForm(forms.ModelForm):
    class Meta:
        model = BlogPost     #Meta类表示这个表单基于哪个模型
        exclude = ('timestamp',)    #从HTML移除这个表单项

2.使用ModelForm生成HTML

修改myblog/templates/archive.html:

<form action="/myblog/create/" method="post">{% csrf_token %}
    <table> {
   
   { form }}</table>
    <input type= text name=title><br>
    </form>
<hr>

{% for post in posts %}
      <h2>{
   
   { post.title }}</h2>
      <p>{
   
   { post.tiemstamp }}</p>
      <p>{
   
   { post.body }}</p>
      <hr>
{% endfor %}

 3.修改myblog/views.py:实现更新视图函数,实例化ModelForm并进行传递。

from django.shortcuts import render
from myblog.models import BlogPost,BlogPostForm
from django import forms
from django.http import HttpResponseRedirect
from datetime import datetime
from django.template import RequestContext
# Create your views here.
def archive(request):
    #post = BlogPost.objects.all()
    post = BlogPost.objects.all().order_by('-timestamp')
   # return render(request,'archive.html',{'posts':post})
    return render(request,'archive.html',{'posts':post,'form':BlogPostForm()})

def create_blogpost(request):
    if request.method == 'POST':
        form = BlogPostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False) #保存表单,但没有保存模型
            post.timestamp=datetime.now()
            post.save()                    #保存模型
            return HttpResponseRedirect('/myblog/archive')

 刷新浏览器,已实现:

猜你喜欢

转载自blog.csdn.net/qiujin000/article/details/131309242
今日推荐