请求与响应
- 请求是指浏览器通过HTTP协议发送给服务端的数据
- 响应指的是服务端收到响应后做相应处理后再返回给浏览器
请求样例
代码语言:javascript复制GET /user/api/qoqa HTTP/1.1 ---> 起始行
Host: 127.0.0.1:8000 ---> 请求头
Connection: keep-alive
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: csrftoken=eOANN43FZcrKEyrhBtbyiRsQ9tdXjQky5DK7uurZ0ziC9uA94OH1TXfRoQtAfBod
{"username":"TETSTQIQUQ"} ---> 请求体
请求方法
HTTP1.0
定义了三种请求方法:GET
、POST
、HEAD
HTTP1.1
新增了五种请求方法:OPTIONS
、PUT
、DELETE
、TRACE
以及CONNECT
方法
方法 | 描述 |
---|---|
GET | 请求指定页面信息,并且返回实体。 |
HEAD | 类似于GET请求,只不过返回的响应中没有具体内容,只返回响应头。 |
POST | 向指定资源提交数据进行处理请求,数据被包含在请求体中。 |
PUT | 从客户端向服务器发送的数据取代指定文档中的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | 预留的管道连接代理服务器。 |
OPTIONS | 允许客户端查看服务器性能。 |
TRACE | 用于显示服务器收到的请求。 |
Django中的请求
path_info
: URL字符串,即当前请求的路径
method
: 字符串,表示http的请求方法
GET
: QueryDict查询字典的对象,包含get请求方式的所有资源
POST
: QueryDict查询字典对象,包含post请求方式的所有数据
FILES
: 类似于字典的对象,包含所有的上传文件信息
COOKIES
: Python字典,包含当前所有的cookie
session
: 类似于字典对象,表示当前会话
body
: 字符串,请求体的内容
scheme
: 请求协议 http
orhttps
request.get_full_path
: 请求完整路径
request.META
: 请求中的元数据(消息头) request.META['REMOTE_ADDR']
可以请求到客户端地址,当然你可以请求META中的任何信息.
响应
响应案例
代码语言:javascript复制HTTP/1.1 200 OK --->起始行
Bdpagetype: 1 ---> header内容
Bdqid: 0xc15b41b2000e57f6
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Thu, 03 Jun 2021 06:20:28 GMT
Expires: Thu, 03 Jun 2021 06:19:36 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=34099_33971_31253_33848_33607_26350_22157; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1622701228048364826613932802104961685494
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
{"code":200,"username":"Alex"} ---> body内容
常见状态码就不说了…
Django中的响应对象
构造函数格式:
HttpResponse
(content=响应体,content_type=响应体数据类型,statue=状态码)
Content-Type类型如下
'text/html'
: 默认的Html文件'text/plain'
: 纯文本'text/css'
”:css文件'text/javascript'
: js文件'application/json'
: json传输'application/xml'
: XML文件
类型 | 作用 | 状态码 |
---|---|---|
HttpResponseRedirect | 重定向 | 302 |
HttpResponseNotModified | 未修改 | 304 |
HttpResponseBadRequest | 错误请求 | 400 |
HttpResponseNotFound | 没有对应资源 | 404 |
HttpResponseForbidden | 请求被禁止 | 403 |
HttpResponseServerError | 服务器错误 | 500 |
GET与Post
无论是Get
还是Post
,都统一用视图函数接受请求,通过判断request.method
区分具体的请求动作.
if request.method == "GET":
处理GET请求内容
elif request.method == "POST":
处理POST请求内容
GET处理
GET
请求动作,一般用与向服务器获取数据- 能够产生
GET
请求的场景:- 浏览器输入URL回车后
html <a href="地址"?参数=值>
- form表单中的
method
为GET
GET
请求方式中,如果有数据需要传递给后端服务器,通常会用查询字符串Query String
传递[不要传递敏感数据]
- URL:http://127.0.0.1/login/page1?user=value&password=value
取GET内容的值
代码语言:javascript复制request.GET['Key'] # QueryDict
request.GET.get['Key','Value']
request.GET.getlist('Key')
POST处理
- POST请求动作,一般用与向服务器提交大量/隐私数据
- 客户端通过表单等POST请求将数据传给服务器
取POST客户端数据
代码语言:javascript复制request.POST['Key'] # QueryDict
request.POST.get('Key','Value')
request.POST.getlist('key')