你好,我是goldsunC
让我们一起进步吧!
从0到1搭建个人博客-Django(七)
在以下链接快速回顾系列文章内容
从0到1搭建个人博客-Django(一)
从0到1搭建个人博客-Django(二)
从0到1搭建个人博客-Django(三)
从0到1搭建个人博客-Django(四)
从0到1搭建个人博客-Django(五)
从0到1搭建个人博客-Django(六)
发表文章
经过前几篇文章的操作,我们已经简单建立了一个有首页、后台、能够看文章的页面了。不够暂时有个小问题,就是博客首页的那篇文章是之前我们在后台建立的。这只有管理员能够操作,如果想要提交新的文章只能在后台写,那如果我们想在首页提交文章怎么办呢?我们来完善一下功能。认识表单
对于“表单”一些朋友可能比较陌生,其实它们在互联网上随处可见,如注册页面中的用户名和密码输入、性别选择、提交按钮等都是用表单相关的标记定义的,简单地说,“表单”是网页上用于输入信息的区域,用来实现网页与用户的交互。在HTML中,表单是在...
中的一些元素。处理表单是挺复杂的一件事情,还记得Django的后台吗?许多不同类型的数据可能需要在一张表单中准备显示,渲染成HTML,使用方便的界面进行编辑,传到服务器,验证和清理数据,然后保存或跳过进下一步处理。而Django的表单功能可以简化上述工作的大部分内容。Django表单系统的核心组件是
Form
类,它能够描述一张表单并决定它如何工作及呈现。在
article
中创建
forms.py
文件,写入如下代码:
# 引入表单类
代码中的
ArtclePostForm
类继承了Django的表单类
forms.ModelForm
,并在类中定义了内部类
Meta
,指明数据来源,以及表单中应该包含的数据模型的哪些字段。还记得我们创建的数据模型类
ArticlePost
吗?
created
参数字段默认为当前时间,
update
字段自动生成,因此我们不需要填入。对于
author
字段暂时固定为id=1的用户,也不需要填入。剩下的
title
和
body
就是我们需要通过表单填入的内容了。改写
article/views.py
,添加如下代码,包含依赖的模块和一个视图函数以处理写文章的请求:
# 引入redirect重定向模块
这个函数的作用是,当视图函数接收到一个客户端的
reuqest
请求时,首先根据
request.method
判断用户是要
提交数据(POST)
还是
获取数据(GET)
:
POST
:将POST给服务器的表单数据赋于article_post_form
实例,然后使用Django内置方法.is_valid()
判断提交的数据是否满足模型的要求。如果满足要求,保存表单中的数据,此时
commit=False
说明先不要提交数据到数据库,因为还少一个字段author
,然后指定author
为id=1的用户,再提交数据到数据库,并通过redirect
返回文章列表。redirect
的作用是可以通过url地址的名字,反向解析到对应的url。如果不满足要求,则返回一个字符串"表单内容有误,请重新填写。"
GET
:返回一个空的表单类对象,提供给用户填写。
编写模板
这个编写模板是编写的哪个模板呢?刚才我们编写了关于提交文章的视图函数,那现在编写的当然是写文章的页面了(模板)!在templates/article/
下新建
create.html
文件,写入如下代码:
html>
我们的重点不在于HTML的书写,不过还是简单说一下上面的
create.html
文件:
div
是区块标签,可以将网页分割为独立的、不同的部分,以实现网页的规划和布局。
和
之间相当于一个盒子,可以设置外边距、内边距、宽和高,同时内部可以容纳段落、 标题、表格、图像等各种网页元素。
...
之间的内容就是需要提交的表单。
method="post"
指定了表单提交的方式为POST(和视图函数中的
request.method
相联系),
action="."
指定了表单提交的地址为默认的当前
url
。
{% csfr_token %}
必须包含在表单中,不然会发生错误。
和
标签中的
name=''
属性指定了当前文本框提交的数据的名称,它必须与表单类中的字段名称相对应,否则服务器无法将字段和数据正确的对应起来。最后,为了打开刚编写的
create.html
模板,我们还需要干嘛?模板是由视图函数调用的,那视图函数由谁调用?得有它自己的路由呀,所以最后一步需要干嘛?如下:打开
article/urls.py
,加入以下代码:
'article-create/',views.article_create,name=
知道加到哪儿吗?不知道的话可没认真学哦。然后大功告成,启动服务器,进入
http://127.0.0.1:8000/article/article-create/
地址,出现如下界面:
create.html
模板页面,然后写上点东西,点击完成,跳转至:
base.html
、
header.html
和
footer.html
,其中
header.html
是网页的导航栏,入口适合放在这里:打开
templates/header.html
文件,加入如下代码:
<li class="nav-item">
知道加在哪里吗?当然加在文件中的
的标签之前,文章中的
标签只有一个,里面是
文章
的菜单,链接指向
article-list
。因此我们之前点击这个按钮就会回到首页。OK,这个时候再去
http:127.0.0.1:8000/article/article-list/
看看:
写文章
的按钮,点一下试试,就导向了
http://127.0.0.1:8000/article/article-create/
。OK,现在我们就可以容易的增加文章了,不过还不能删除哈,只能在后台删除,下文我们讲讲如何增加删除功能。
参考文献:
https://www.dusaiphoto.com/article/2/
http://c.biancheng.net/view/7288.html
http://www.python3.vip/tut/webdev/django/
• end •
走在路上
goldsunC
![e3527dd7ff1eaeb6e58bf0e0a08e7ef3.png](https://i-blog.csdnimg.cn/blog_migrate/81267a80acc50fced4ae25c341bfd774.jpeg)