Django学习之表单(forms)

我们的博客现在已经实现了博客列表的查看,博客的查看。现在该是我们实现创建和更新博客的时候了。

要实现博客的创建和更新,我们需要学习Django表单的相关知识。

在处理表单的过程中,Django表单功能做了哪些工作呢?

  • 传递数据的准备和重建
  • 为数据创建HTML表单
  • 从客户端接收和处理提交的表单和数据

Django Form类是系统的核心组件。在django中, 模型描述的是一个对象的逻辑架构,这绵行为,它显现给我们的方式。与此类似,Form类描述的是一个表单和决定它是如何工作和显示的。

一个模型类的字段映射到数据库的字段,与此类似,表单类的字段映射到HTML中表单的<input>元素。

首先,创建一个创建博客的模板文件edit.html

<!DOCTYPE html>
<html>
    <head>
        <title>My Blog</title>
    </head>
    <body>
        <form  method='post'>
        {% csrf_token %}
        {{form.as_p}}
        <button type="submit">Save</button>
        </form>
    </body>
</html>

恩,在主页上添加创建博客的链接(先不管美化,实现功能再说)

<!DOCTYPE html>
<html>
    <head>
        <title>My Blog</title>
    </head>
    <body>
        <form  method='post'>
        {% csrf_token %}
        {{form.as_p}}
        <button type="submit">Save</button>
        </form>
    </body>
</html>
tmyyss@ubuntu:~/python/django/myproject/blog/templates/blog$ more index.html 
<!DOCTYPE html>
<html>
    <head>
        <title>My Blog</title>
    </head>
    <body>    
        <a href={% url 'blogs:edit' %}>edit</a>
        {% if blogs %}
        {% for blog in blogs %}
        <a href={% url 'blogs:detail' blog.id %}><h2>{{blog.title}}</h2></a>
        <p>Published {{blog.published_time}}</p>
        <p>{{blog.text | linebreaks}}</p>
        {% endfor %}
        {% else %}
        <p>No blog was published</p>
        {% endif %}
    </body>
</html>

接下来,添加Url

from django.conf.urls import patterns,url

from blog.views import *

urlpatterns = patterns('',
    url(r'^$',index,name='index'),
    url(r'^edit/$',edit,name='edit'),
    url(r'^(?P<id>d+)/$',detail,name='detail'),
)

添加url对应的view函数

from django.shortcuts import render,get_object_or_404,redirect
from blog.models import Blog,PostForm
import datetime

def index(request):
    blogs=Blog.objects.all()
    return render(request,'blog/index.html',{'blogs':blogs})


def detail(request,id):
    blog=get_object_or_404(Blog,pk=id)
    return render(request,'blog/detail.html',{'blog':blog})

def edit(request):
    if request.method=='POST':
        form=PostForm(request.POST)
        if form.is_valid():
            post=form.save(commit=False)
            post.user=request.user
            post.created_time=datetime.datetime.now()
            post.published_time=datetime.datetime.now()
            post.save()
            return render(request,'blog/detail.html',{'blog':post})
    else:
        form=PostForm()
    return render(request,'blog/edit.html',{'form':form})

好了,启动服务器,输入网址后,我们就可以添加博客文章了。

原文地址:https://www.cnblogs.com/tmyyss/p/4375082.html