一、请求与响应
1.1 请求:浏览器通过http协议发送给服务器端的数据。
包括协议(http、https及协议号)和请求头,请求体。请求头中为键值对的方式,包含大量信息。请求体中主要包括要发送给服务器的数据(可以无数据)。
请求方法:HTTP1.0有GET,POST,HEAD方法三种,HTTP1.1新增了五种请求方法,OPTIONS,PUT,DELETE,TRACE和CONNECT。
GET:请求指定的页面信息,返回实体主体。
HEAD:类似与GET请求,但是返回的响应中无具体内容,只获取报头(一般调试常用)
POST:提交数据进行处理,数据包括在请求体里。
OPTIONS:允许客户端查看服务器性能。
PUT:从客户端向服务器端传送的数据取代指定文档的内容。
DELETE:请求服务器删除指定界面。
CONNECT:协议中预留给能够将连接方式改为管道方式的代理服务器。
TRACE:回显服务器收到的请求,主要用于测试或者诊断。、
请求实际为django视图函数中的第一个参数,django中有HttpRequest类,django接受到请求后根据请求构建出一个HttpRequest对象并传递给为相应的视图函数。
HttpRequest对象常用方法:
request.path_info:URL字符串。
request.method:HTTP请求方法(‘GET’、'POST’等)
request.GET:若为GET请求,返回一个类字典对象QueryDict,包含get请求的所有数据。
request.POST:若为POST请求,返回一个类字典对象QueryDict,包含post请求的所有数据。
request.FILES:类字典对象,包含上传的所有文件信息。
request.COOKIES:返回字典对象,包含所有的cookie,键值均为字符串。
request.session:类字典对象,表示当前会话。
request.body:字符串,请求体的内容(PUT或POST)
request.scheme:请求协议(http/https)
**request.get_full_path()**请求的完整路径。
request.META:请求中的元数组(消息头)
request.META[‘REMOTE_ADDR’]:客户端IP地址
1.2 响应:接到请求后做相应的处理后返回给浏览器的数据。
起始行为协议及版本号和状态码、响应头、响应体(同请求头,请求体)。
常见状态码:
200请求成功
301永久重定向(资源被永久转移到其他url)
302临时重定向(资源被临时转移到其他url)
404请求的资源(网页)不存在
500内部服务器错误
分类:
1 * * 信息,服务器收到请求,需要继续执行操作。
2 * * 成功,操作被成功接收并处理。
3 * * 重定向,需要进一步操作来完成请求。
4 * * 客户端错误,包含语法错误或无法完成请求。
5 * * 服务器错误,服务器在处理请求的过程中发生了错误。
在django中使用HttpResponse对象返回响应,
HttpResponse(content=响应体,content_type=响应数据类型,status=状态码)
HttpResponse有多个子类,都在django.http中
HttpResponseRedirect 重定向,状态码302
HttpResponseNotModified未修改,304
HttpResponseBadRequest错误请求,400
HttpResponseNotFound没有对应资源,404
HttpResponseForbidden请求被禁止,403
HttpResponseServerError服务器错误,500
二、GET与POST请求
根据请求方式不同,可设定分发函数,在同一个url下根据请求方式、参数的不同将其分发给不同的函数。
2.1 GET
一般用于向服务器获取数据。
GET也可向服务器传递数据,一般使用查询字符串(Query String)传递,(注意不要传递敏感数据,因为传递后会出现在地址栏),真正传递数据还是使用POST请求。
在django后端拿取数据有以下几种方法。
建议使用request.GET
.get()
可传入默认值,若无此参数则返回设定的默认值,增强程序的1健壮,不易报错。
由于是类字典,,与字典不同,若直接按键取值或使用GET.get()方法,则同名参数只返回最后一个,但若直接打印GET方法,则可打印所有值,也可使用request.GET.getlist()方法获取所有值
2.2 POST
一般用于向服务器提交大量/隐私数据。
客户端通过表单等POST请求将数据传递给服务器端。
若想接受POST请求,则要取消csrf验证,否则将会拒绝客户端发来的POST请求,报403响应。
可在setting.py中的MIDDLEWARE中取消该安全验证,将 'django.middleware.csrf.CsrfViewMiddleware’注释掉即可。
可使用requests模块验证,或者写一个简单的表单
POST_FORM='''
<form method='post' action='/mypage'>
用户名:<input type='text' name='uname'>
<input type='submit' value='提交'>
</form>
'''
将其通过GET请求的响应返回,即可输入,输入后点击提交即可发送POST请求。
若使用浏览器抓包动能,除了一个POST 200外,还会显示一个GET 404,这是由于我们未设置网站的图标,故返回404.。