目录
练习代码:https://blog.csdn.net/zh__quan/article/details/82155617
1.HTTP 通信协议
1.什么是HTTP
HTTP:Hyper Text Transfer Protocol
超级 文本 传输 协议
作用:规范了数据是如何打包以及传递的
2.请求消息
由 请求起始行,请求消息头,请求主体
请求主体:
post和put两种提交方式会产生请求主体
3.响应消息
由 响应起始行,响应消息头,响应主体
2.HttpRequest
1.HttpRequest介绍
HttpRequest,在Django中是对请求对象的封装体现.会封装请求过程中所有的信息.
在Django中,HttpRequest被封装成了request被自动传到了视图处理函数中.
2.HttpRequest 中的主要内容
1.request.scheme : 请求协议
2.request.body : 请求主体
3.request.path : 请求路径(资源具体路径)
4.request.get_host() : 请求的主机地址 / 域名
5.request.method : 获取请求方法
6.request.GET : 封装了GET请求方式提交的数据
7.request.POST : 封装了POST请求方式提交的数据
8.request.COOKIES : 封装了cookie的数据
9.request.META : 封装了请求的元数据
request.META.HTTP_REFERER : 封装了请求的源地址
3.获取请求提交的数据
1.get 请求方式
request.GET['名称']
1.使用表单提交数据
<form></form>
2.通过超链接拼查询字符串
<a href="地址?参数1=值1&参数2=值2"></a>
此种方式,属于http标准
Django中,通过url传递参数
url(r'^01_test/(\d+)',test_views)
此种方式,非http标准的,属于Django标准
2.post 请求方式
request.POST['名称']
CSRF:Cross-Site Request Forgery
跨站点伪装攻击
解决方案:
1.取消 CSRF 的验证
删除 settings.py 中 MIDDLEWARE 中 CsrfViewMiddleware 中间件
2.开放验证权限,无须验证,直接进入
在视图处理函数之上增加一个装饰器
@csrf_protect
3.必须要通过验证后才可以请求
在模板中<form>下的第一行增加:
{% csrf_token %}
4.Django中的表单处理
表单页面的get 和 post 请求,是由同一个视图(views)去处理的
3.使用forms模块处理表单
1.forms模块的作用
通过forms模块,允许将表单与class相结合,允许通过class生成表单
2.使用 forms 模块
1.创建 forms.py 文件
2.导入 forms
from django import forms
3.创建class,一个class对应成一个表单
class LoginForm(forms.Form):
pass
4.在class中创建属性
一个属性对应着一个表单控件
(参考文档)
3.在 模板中,解析 form 对象
1.注意
1.需要自定义 <form>
2.需要自定义按钮 <input type="submit">
2.处理方法
在视图中创建 forms.Form 的对象,并发送到模板中
ex:
form = RemarkForm()
return render(request,'xx.html',locals())
1.手动解析
在模板中:
{% for field in form %}
{{field}} : 表示的就是控件
{{field.label}} : 表示的就是控件前的文本
{% endfor %}
2.自动解析
1.{{form.as_p}}
将form对象中的每个属性使用p标记包裹起来,再显示在网页上
2.{{form.as_ul}}
将form对象中的每个属性使用li标记包裹起来,再显示在网页上
注意:必须手动提供 <ol></ol> 或 <ul></ul>
3.{{form.as_table}}
将form对象中的每个属性使用tr标记包裹起来
注意:必须手动提供<table></table>
练习:
1.创建一个数据库 - day07
2.在程序中创建一个 Models - Users
uname - 用户名
upwd - 密码
uage - 年龄
uemail - 邮箱
同步回数据库,并通过后台管理的方式插入几条测试数据
3.创建 forms.Form 类,表示登录的 form
需要 用户名,密码 两个控件(俩属性)
4.将 form 放在模板中,解析成对应的控件
自己提供<form>以及提交按钮
5.点击提交按钮时,要验证用户名和密码的值是否正确
4.在视图中,通过forms.Form自动获取表单数据
1.通过 forms.Form 的构造,接收post数据
form = XXXForm(request.POST)
2.需要让 form 通过验证后,再取值
form.is_valid()
返回True:提交的数据已经通过验证,允许接收表单提交的数据
返回False:提交的数据验证未通过,无法取值
3.获取表单中的数据
通过 form.cleaned_data (字典) 接收提交的数据
作业:
1.创建 RegisterForm,根据 Users 的属性,构建 RegisterForm 的属性
2.在模板中,根据RegisterForm,创建表单控件
3.提交数据时,再交给RegisterForm接收提交的数据,通过验证后,将数据插入到数据库中