# request模块 ## 1、request.method 查看请求方式 ## 2、request.form 获取POST请求提交的数据 ```python @app.route('/login',methods=['GET','POST']) def fn(): if request.method == 'POST': # 判断用户请求是否是post请求 print(request.form) # ImmutableMultiDict([('user_name', '吕星辰'), ('user_password', '123456')]) print(request.form.get('user_name')) # 吕星辰 print(request.form.to_dict()) # {'user_name': '吕星辰', 'user_password': '123456'} ``` 上边代码,模拟了前端表单 post请求,在flask中,对于post请求,获取数据使用form,获取到的是一个对象,可使用\**get方法\**获取对应的数据(如果没有数据,get方法会返回None,但是用其他获取单个数据方式会报错!!!),也可以使用\**to_dict( )\**方法转化为字典。 ## 3、request.args 获取GET请求提交的数据 ```python @app.route('/login',methods=['GET','POST']) def fn(): print(request.args) # ImmutableMultiDict([('user_name', '吕星辰'), ('user_password', '123')]) print(request.args.get('user_name')) # 吕星辰 print(request.args.to_dict()) # {'user_name': '吕星辰', 'user_password': '123'} ``` **上边代码,同上,模拟前端表单get请求,在flask中,对于get请求,获取数据使用\**args\**,获取到的是一个对象,也可使用\**get方法\**获取对应的数据,也可以使用\**to_dict( )\**方法转化为字典。** ## 4、request.path 获取域名后面的url路径 ```python # 请求的是 http://0.0.0.0:9527/req?id=10 print(request.path) # '/req' ``` ## 5、request.base_url 获取路径包含根路径 ```python #请求 http://0.0.0.0:9527/req?id=10 print(request.base_url) # 'http://0.0.0.0:9527/req' ``` ## 6、request.headers 获取请求头信息,请求headers信息,dict形式 ```python request.headers.get("Accept") ''' Accept: text/html, application/xhtml+xml, */* Content-Type: application/x-www-form-urlencoded Accept-Language: zh-CN Accept-Encoding: gzip, deflate Host: localhost:5000 Content-Length: 55 Connection: Keep-Alive Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like GeckoCore/1.70.3704.400 QQBrowser/10.4.3587.400 ''' ``` ## 7、request.host 获取主机域名地址 ## 8、request.host_url 获取根路径,包含斜线 ```python # 请求路径为 http://0.0.0.0:9527/req?id=10 print(request.host) # http://0.0.0.0:9527/ ``` ## 9、request.remote_addr 访问的远程IP地址 ## 10、request.files 文件上传 ## 11、request.json和request.get_json request.get_json(force=False, silent=False, cache=True) ```python ##源码 @property def json(self): """This will contain the parsed JSON data if the mimetype indicates JSON (:mimetype:`application/json`, see :meth:`is_json`), otherwise it will be ``None``. """ return self.get_json() def _get_data_for_json(self, cache): return self.get_data(cache=cache) def get_json(self, force=False, silent=False, cache=True): """Parse and return the data as JSON. If the mimetype does not indicate JSON (:mimetype:`application/json`, see :meth:`is_json`), this returns ``None`` unless ``force`` is true. If parsing fails, :meth:`on_json_loading_failed` is called and its return value is used as the return value. :param force: Ignore the mimetype and always try to parse JSON. :param silent: Silence parsing errors and return ``None`` instead. :param cache: Store the parsed JSON to return for subsequent calls. """ ``` `request.json()`调用的是`request.get_json()`方法,`request.get_json()`方法默认情况下只对minmetype为==appication/json== 的请求可以正确解析。并将数据作为json输出。如果minmetype不是json格式(appication/json),则返回None。**请求头content-type 为 application /json ,所以要使用get_json( ) 方法去获取数据,使用request.form 无法获取 用时axios post请求的数据!**