1.让用户能够输入数据
当前,只有超级用户能够通过管理网站输入数据,我们不想让用户与管理网站交互,因此我们将使用Django的表单创建工具来创建让用户能够输入数据的页面
1>创建用于添加主题的表单
在Django中,创建表单的最简单方式是使用ModelForm,它根据我们在models.py中的信息自动创建表单。创建一个名为forms.py的文件,并存储到models.py所在的目录中
1处导入模块forms以及要使用的模型Topic。
2处根据模型Topic创建一个表单,该表单只包含字段text
4处让Django不要为字段text生成标签
2>定义new_topic的URL模式
将请求交给视图函数new_topic()
3>编写视图函数new_topic()
导入HttpResponseRedirect类,用户提交主题后将使用这个类将用户重定向到网页topics,函数reverse()根据指定的URL模型确定URL
1处的测试确定请求方法是GET还是POST。如果请求方法不是POST,那就可能是GET,因此我们要返回一个空表单
2处创建一个TopicForm实例,将其存储在变量form中,再通过上下文字典将这个表单发送给模板(7处)
如果请求方法是POST,将执行else代码块,3处使用用户输入的数据创建一个TopicForm实例form
4处检查提交的数据是否有效;5处表示调用save()将表单中的数据写入数据库
6处使用reverse()获取页面topics的URL,并将其传递给HttpResponseRedirect()
4>创建模板new_topic
1处定义了一个HTML表单,实参action告诉服务器将提交的表单数据发送到视图函数new_topic(),实参method让浏览器以POST方式提交数据
2处使用模板标签{% csrf_token %}来防止攻击者利用表单来获取对服务器未经授权的访问
3处用于显示表单
4处定义一个提交按钮
5>在页面topics中添加一个到页面new_topic的链接
6>运行manage.py