我们的博客现在已经实现了博客列表的查看,博客的查看。现在该是我们实现创建和更新博客的时候了。
要实现博客的创建和更新,我们需要学习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})
好了,启动服务器,输入网址后,我们就可以添加博客文章了。