Flask http的请求与响应


请求

文档: https://flask.palletsprojects.com/en/2.0.x/api/#flask.Request

  • request:flask中代表当前请求的 request 对象
  • 作用:在视图函数中取出本次客户端的请求数据
  • 导入from flask import request
  • 代码位置
  • ? 代理类 from flask.app import Request ---> from flask.globals.Request
  • ? 源码类:from flask.wrappers.Request
  • ? 基类:from werkzeug.wrappers import Request as RequestBase

request,常用的属性如下:

属性 说明 类型
data 记录请求体的数据,并转换为字符串
只要是通过其他属性无法识别转换的请求体数据
最终都是保留到data属性中
例如:有些公司开发微信小程序,原生IOS或者安卓,这一类客户端有时候发送过来的数据就不一样是普通的表单,查询字符串或ajax
bytes类型
form 记录请求中的html表单数据 ImmutableMultiDict
args 记录请求中的查询字符串,也可以是query_string ImmutableMultiDict
cookies 记录请求中的cookie信息 Dict
headers 记录请求中的请求头 ImmutableMultiDict
method 记录请求使用的HTTP方法 GET/POST
url 记录请求的URL地址 string
files 记录请求上传的文件列表 ImmutableMultiDict
json 记录ajax请求的json数据 Dict
from flask import Flask, request
from werkzeug.datastructures import ImmutableMultiDict
from werkzeug.wrappers import Request as RequestBase
from flask.wrappers import Request
# 项目实例应用对象
app = Flask(__name__)

# 加载配置
app.config.update({
    "DEBUG": True
})


# 在http的常用请求方法中,delete和get是没有请求体的!!!


@app.route(rule="/data", methods=["post", "put", "patch"])
def data():
    """获取请求体"""
    # 获取原生的请求体数据[当request对象的其他属性没法接受请求体数据时,会把数据保留在data中,如果有request对象的属性处理了请求体数据,则data就不再保留]
    # print(request.data)  # 如果客户端上传的是xml文档,html格式,二进制流格式,base64格式,就要使用data来接收

    """
    1. 没有上传任何数据:
        b''
    2. 上传json数据
        b'{\n    "username": "xiaoming",\n    "age": 16\n}'
    3. 上传表单数据
        b''
    4. 上传xml数据
        b'\n    \xe5\x95\x86\xe5\x93\x81\xe6\xa0\x87\xe9\xa2\x981\n    \xe5\x95\x86\xe5\x93\x81\xe6\xa0\x87\xe9\xa2\x982\n'
    """

    # 接收表单上传的数据
    # print(request.form)
    """
    ImmutableMultiDict([('name', '小明'), ('age', '19')])
    """

    # 接收ajax上传的json数据
    # print(request.json)     # {"username": "xiaoming", "age": 16}
    # print(request.is_json)  # True 往往用于判断是否是ajax请求

    # 上传文件列表 HTML必须以
# 表单属性才能上传文件 # print(request.files) """ ImmutableMultiDict([('avatar', )]) """ # 接受上传文件 # avatar = request.files["avatar"] # print(avatar) """ from werkzeug.datastructures import FileStorage FileStorage,上传文件处理对象,flask封装的一个上传文件处理对象,可以允许我们直接调用对应的方法进行文件的存储处理, 也可以结合其他的ORM模块像djangoORM那样通过模型操作对上传自动存储处理 """ # 处理上传文件[一般不会这么做!!!而是采用专业的第三方存储设备来存储,] # from pathlib import Path # save_path = str(Path(__file__).parent / "uploads/avatar.jpeg") # avatar.save(save_path) # 获取请求头信息 print(request.headers) # 获取全部的而请求头信息 print(request.headers.get("Host")) # 127.0.0.1:5000,客户端请求地址,也相当于服务器地址 # 获取客户端发送过来的自定义请求头 print(request.headers.get("company")) # beijing,不存在的键的结果:None,存在则得到就是值, print(request.headers.get("token")) # jwt...xxx # 获取客户端的请求头中的相关数据 print(request.user_agent) # 用户访问服务器时使用的网络代理,一般就是浏览器标记信息,PostmanRuntime/7.26.10 print(request.remote_addr) # 客户端远程地址 print(request.server) # 服务端的端点,格式:(IP, 端口) # 获取请求方法 print(request.method) # POST # 本次请求的url地址 print(request.url) # http://127.0.0.1:5000/data print(request.root_url) # 根路径 print(request.path) # /data return "获取请求体" if __name__ == '__main__': app.run()