Django的请求与响应

2022-09-26 15:26:37 浏览数 (1)

请求与响应

  • 请求是指浏览器通过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定义了三种请求方法: GETPOSTHEAD
  • HTTP1.1 新增了五种请求方法: OPTIONSPUTDELETETRACE以及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: 请求协议 httporhttps

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区分具体的请求动作.

代码语言:javascript复制
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')

0 人点赞