目录
form表单
Web开发当中,大部分的数据是通过form表达来向服务器进行提交
一、get方式
1、编写前端页面
以下是form.html的主要代码
1、form表单通过form标签中的action确定提交的位置,不写或者为空代表提交到当前路由
2、form表单通过form标签中的method确认请求方式,不写或者为空代表以get方式提交
3、form表单提交的时候,表单元素必须有name且唯一
<p>------------get--------------</p>
<form action="" method="get">
<p>
<label>文章类型</label>
<input type="text" name="types">
</p>
<p>
<label>文章类型</label>
<input type="submit" value="查询">
</p>
</form>
页面如下
2、修改视图文件
在views.py文件里,连接前端,并返回数据给前端
1、接收数据
request.GET可以接收前端传递过来的get请求的数据
request.GET是一个类字典对象
2、处理数据
增删改查
3、返回结果
locals
3、修改路由
在urls.py文件里,同步路由
4、修改前端代码
因为views.py文件接收了前端的数据,然后又给前端页面返回了参数,所以我们现在需要加入显示返回的数据的代码
{% if articles %}
{% for article in articles %}
<p>{{ article.title }}</p>
{% endfor %}
{% endif %}
<p>{{ types }}</p>
前端的总代码如下
<p>------------get--------------</p>
<form action="" method="get">
<p>
<label>文章类型</label>
<input type="text" name="types">
</p>
<p>
<label>文章类型</label>
<input type="submit" value="查询">
</p>
</form>
{% if articles %}
{% for article in articles %}
<p>{{ article.title }}</p>
{% endfor %}
{% endif %}
<p>{{ types }}</p>
5、查看效果
启动服务器,然后输入地址,显示效果如下
然后我们在文章类型中输入"散文",点击查询
可以看到,前端接收到了views视图文件中传回来的数据,并显示了出来
如果不输入数据就查询的话,则会显示None Type
二、POST方式
CSRF(Cross-site-request-forgery)跨站请求伪造.XSRF
Django已经编写好了csrf的逻辑,默认django的post请求必须经过csrf校验。
Django post请求步骤:
- 1、使用render方法进行返回
- Render方法的第一个参数必须是request,其他地方和render_to_response方法相似
- 2、在form表单的最上层添加{% csrf_token %}
- 3、然后开始和get请求类似接受数据和处理数据的步骤
1、编写前端代码
<p>---------------post-----------------</p>
<form action="" method="POST">
{% csrf_token %}
<p>
<label>类型名称</label>
<input type="text" name="name">
</p>
<p>
<label>类型描述</label>
<textarea name="description"></textarea>
</p>
<p>
<input type="submit" value="注册">
</p>
</form>
{% for t in types %}
<p>{{ t.label }}-------{{ t.description }}</p>
{% endfor %}
2、修改视图文件
和get方式相差不多
因为我们这里使用的同样是form,所以就不需要去urls文件里修改路由了,同时需要把get方法版本的form注释掉
3、查看效果
启动服务器,打开浏览器输入地址
点击注册后
红框内就是刚刚添加的
同时,数据表中也添加了这个数据
form表单类
表单可以提交数据,同时表单还需要做校验。
我们可以用前端进行校验,开发难度较低,但是前端校验不能完全防止错误数据,因为有些请求是可以不经过网页的,所以一个安全的注册需要前后端共同校验。
1、在app当中创建一个forms.py脚本
Form类表单的修饰
- Required 字段是否可以为空 True
- Max_length 最大长度
- Min_length 最小长度
- Label 标签
- Initial 初始值
- Help_text 帮助文本
- Error_message 错误信息
- Disabled 是否可以被修改
- Widget 添加前端样式
创建这个文件有两种方式
(1)手动定义
(2)继承
我们最开始在app的models文件中创建数据表的时候,创建了类,这里就直接继承那里的类的就行
2、修改views文件
首先导入刚刚创建的forms.py,并实例化AuthorForm
然后把authorForm实例当成字典返回给前端界面
3、修改urls文件
添加forms路由
4、编写前端
1、直接使用
2、As_p 添加到p标签里
3、As_ul 添加到ul标签里
4、As_table(已经失效)
5、循环使用 在循环里标签
5、查看效果
启动服务器后,输入地址,显示的界面
form表单的检验
- 1、校验步骤
- 1、获取前端提交的数据,并将数据传递form类当中
- 2、使用form类实例的is_valid方法进行校验
- 3、使用form类实例的clean_data获取校验过的数据,errors方法获取校验发生的错误
在views文件中,修改视图
然后在urls文件中同步路由
最后还是编写前端代码
启动服务器,打开网页,当你没有满足要求就直接提交时,它会提示你,这是django自带的前端的检测,如果前端的检测都满足,那么我们还有后端的检测
自定义校验
1、自定义校验的方法名称必须是clean_校验字段的名称
2、通过self.clean_data方法获取校验字典的具体值
3、如果发生错误使用self.add_error(“字段名称”,”错误内容”)添加错误
之前在forms文件里的这段红框代码,就是自定义的检测,可以用于敏感词