一、认识HTTP请求
1.认识get和post
HTTP请求是指从客户端到服务器端的请求消息。常用的请求方式是GET请求和POST请求。
GET | POST | |
---|---|---|
通常使用 | 一般像服务器获取资源 | 一般向服务器提交数据 |
格式 | url中从?后开始,是参数(key=value的形式),以&符号进行区分。例如:https://www.baidu.com/s?wd=world&name=zhangsan | post请求的样式和get请求的样式相同,同时还可以把参数写在请求体当中 |
特点 | 参数写在url中是不安全的,而且url长度是有限的,携带的参数数据有限 | 参数写在请求体当中,这样更加安全隐蔽,安全性比get高,而且传输的数据量也比较大 |
2.request对象的方法
Django中的请求包含了很多方法,简单认识下:
方法 | 含义 |
---|---|
request.COOKIES | 用户身份 |
request.FILES | 请求携带的文件,比如图片 |
request.GET | get请求携带的参数 |
request.POST | post请求携带的参数 |
request.scheme | 请求协议,https还是http |
request.method | 请求的方式 |
request.path | 请求的路径 |
request.body | 请求的主体,返回的是一个字符串 |
request.META | 包含了具体的请求数据,包含所有的http请求的信息信息 |
request.META.get(‘OS’) | 请求的系统 |
request.META.get(‘HTTP_USER_AGENT’) | 发出请求的浏览器的版本 |
request.META.get(‘HTTP_HOST’) | 请求的主机 |
request.META.get(‘HTTP_REFERER’) | 请求的来源 |
3.常见的响应码
请求了服务器,那么服务器会返回一个相应信息,响应信息通常包含一个响应码,让我们识别请求是否成功。常见的响应码如下:
二、Django的请求演示
1.get请求
在html中,我们使用了一个表单form,在提交的时候,我们可以把整个表单提交到某个服务器。
- 参数action:提交的地址
- 参数method: 提交的方式 get/post,默认get
运行
结果
2.post请求
这次我们换post
运行,提交,我们看到表单中有个csrfmiddlewaretoken
值,下边讲
结果
CSRF
为什么会在请求参数中携带个csrfmiddlewaretoken
值呢?csrf是跨站请求伪造攻击,使用当前浏览器还在生效的cookie对指定网站进行操作,最初针对的是银行系统。
django的csrf 只针对post请求,会在请求之初,给用户下发一个串用来校验身份的编码,并且每次请求下发的串都不一样。使用csrf的步骤如下:
- 在settings文件中打开csrf相关验证
- 在模板中的form表单域中添加
{% csrf_token %}
,这个标签实际上是隐藏域
三、数据校验
我们在使用form表单的时候,通常会对传过来的数据进行校验,例如从长度,数据类型,空值等方面。关于校验有多种方式,例如通过前端校验和后台校验。
- 前端校验: 通过js或者jq对form表单提交的数据进行校验。优点就是直观和快速,能减少服务器压力,有利于对用户即时提醒,用户体验比较好。
- Django后端校验:在views视图中,对数据一个一个单独校验,安全性较高,但是比较复杂,也会增大服务器压力。
- Django-form表单类校验:Django-form表单类校验。一个自带的框架可以在html上自动生成一个校验表单。可以前端校验也可以后端校验。