Django(part7)--请求及HttpRequest对象

学习笔记,仅供参考



请求


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

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/106743610
今日推荐