Python中from urllib import request和from flask import request导入的request是同一个库吗?

两个库名字都叫 request,在 flask 里有这样一行:

request = LocalProxy(partial(_lookup_req_object, 'request'))

两个 request 库是相同的功能吗?

要是功能有不同,要用 urllib 的 request 就要用别名,或者全路径了吗:

import urllib.request
from urllib import request as request-a
from flask import request

Python中from urllib import request和from flask import request导入的request是同一个库吗?

6 回复

不是
flask 下面有个 request.py 是用来处理 flask 中 request 中的数据分析


不是同一个库,这是两个完全不同的东西,只是恰好都叫 request

  1. urllib.request:这是 Python 标准库的一部分,用于处理 HTTP 请求。你用它来打开 URL、发送 GET/POST 请求、处理响应等。它是一个低级的 HTTP 客户端工具

    from urllib import request
    response = request.urlopen('https://www.example.com')
    html = response.read()
    
  2. flask.request:这是 Flask Web 框架中的一个核心对象。它代表了当前 HTTP 请求的上下文,包含了客户端发来的所有信息,比如表单数据、查询参数、请求头、Cookies 等。你只能在处理请求的 Flask 视图函数内部使用它。

    from flask import Flask, request
    app = Flask(__name__)
    
    @app.route('/submit', methods=['POST'])
    def handle_submit():
        # 这里的 request 是 Flask 的请求对象
        username = request.form.get('username')
        return f'Hello, {username}'
    

简单总结urllib.request发起请求的工具,而 flask.request接收和解析请求的对象。它们用途不同,互不相关。

其实真是一个东西
A 是个客户端,
import urllib.request
把这个 request 给 web 服务器 B 发送过来

在 B 服务器上
from flask import request
之后, 这个 request 的内容就是 A 发过来的 request 内容了。

明白了么?
在客户端是 sent request
在服务端是 received request

哈哈哈哈哈哈

简单说 from flask import request 是 WSGI 里 environ 的封装
再说细一点,from flask import request 里的 requests 是 flask/ctx.py 里 RequestContext 的 request,这个 requests 有是基于 werkzeug.wrappers 的 Request,下面是他的__init__函数,可以看到输入的就是 environ
···
def init(self, environ, populate_request=True, shallow=False):
self.environ = environ
if populate_request and not shallow:
self.environ[‘werkzeug.request’] = self
self.shallow = shallow
···

help 一下就知道了

回到顶部