学习笔记,仅供参考
请求
HTTP请求
- 根据HTTP标准,HTTP请求可以使用多种请求方法。
- HTTP1.0定义了三种请求方法:GET,POST和HEAD方法(最常用)
- HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
HTTP1.1请求详述
请求 | 描述 |
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。 数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
HttpRequest对象
当服务器接收到http协议的请求后,会根据请求数据报文创建HttpRequest对象,视图函数中第一个参数request接受的就是HttpRequest对象,比如:
def page_bunny(request, name, age):
html = "Bunny's name is " + name + " and its age is " + age
return HttpResponse(html)
- HttpRequest属性
- path:字符串,表示请求的路由信息
- method:字符串,表示HTTP请求方法,常用值:‘GET’,‘POST’
- encoding:字符串,表示提交的数据的编码方式
- GET: QueryDict查询字典的对象,包含get请求方式的所有数据
- POST: QueryDict查询字典的对象,包含post请求方式的所有数据
- FILES:类似于字典的对象,包含所有的上传文件
- COOKIES:Python字典,包含所有的cookie,键和值都为字符串
- session:似于字典的对象,表示当前的会话
- body:字符串,请求体的内容
- environ:字符串,客户端运行的环境变量信息
- scheme:请求协议(‘http’/‘https’)
- path_info:URL字符串
- request.get_full_path():请求的完整路径
- request.get_host():请求的主机
- request.META:请求中的元数据(消息头)
- request.META[‘REMOTE_ADDR’]:客户端IP地址
- request.META[‘HTTP_REFERER’]:请求源地址
举个例子
我们在views.py中输入如下代码:
def page_bunny(request, name, age):
print("request.path = " + request.path)
print("request.method = " + request.method)
html = "Bunny's name is " + name + " and its age is " + age
return HttpResponse(html)
并向http://127.0.0.1:8000/bunny/10/huang/发起请求:
这时我们的请求头为(通过Chrome浏览器中的【检查】【Network】查看):
GET /bunny/10/huang/ HTTP/1.1
Host: 127.0.0.1:8000
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,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-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
我们再看看cmd中的输出(cmd会显示视图函数中print方法要打印的内容):
request.path = /bunny/10/huang/
request.method = GET
可以看见我们的路由为/bunny/10/huang/,请求方式为GET