相关文章推荐

对于 Web 应用,与客户端发送给服务器的数据交互至关重要。在 Flask 中由全局的 request 对象来提供这些信息,比如说GET在url后面追加参数、POST在body中带参数、又或者是POST的表单提交方式,这时候就需要从 request 里提取出参数。
这篇文章详细介绍了request对象常用的属性和方法。

导入request

from flask import request

request常用的属性和方法

属性用途类型
data记录请求的数据,并转化成字符串*
form记录请求中的表单数据MultiDict
args记录url中的查询参数MultiDict
cookies记录请求中的cookies信息Dict
headers记录请求报文头EnvironHeaders
method记录请求使用的HTTP方法GET/POST/…
files记录上传的文件*
url记录请求的URL地址string
  • form
    从POST或者PUT请求中解析表单数据。如果GET请求将表单数据编码到url里面,而不是放在表单中传输过来的信息,则不能使用form捕捉。使用form解析后是ImmutableMultiDict(一键多值字典)类型。
  • args
    获得url中携带的params(参数),与传输方式(GET or POST)无关。有时候POST请求也会将参数加入到url中,这种情况下也可以得到args属性。使用args解析后也是ImmutableMultiDict(一键多值字典)类型。
    form和args的例子:
    浏览器默认的将GET请求的表单数据编码到url中,而不会单独发送表单数据。POST请求的表单通过表单数据传到服务端,而不会编码到url中。利用浏览器这样的特性,就可以通过以下这个例子认识到form和args的区别:
    html代码:
<!--通过改变form标签中method属性来改变数据请求的方式-->
<form action="http://127.0.0.1:10001/login" method="POST">
First name:<br/>
<input type="text" name="firstname"><br/>
请选择一个选项:<br/>
<input type="radio" name="sex" value="male" checked>Male<br/>
<input type="radio" name="sex" value="female">Female<br/>
<input type="submit" value="Submit">
</form> 

python代码:

from flask import Flask,render_template,request
from time import sleep
app=Flask("submit and catch form element")
#使用request.args来获得表单数据
@app.route("/login",methods=["POST","GET"])
def check_pass():
	firstname=request.form.get("firstname")#获取表单中参数的值
	sex=request.args.get("sex")#获得url中携带的params(参数),与传输方式(GET or POST)无关
	print(firstname)
	print(sex)
	return render_template("login_success.html")
if __name__=="__main__":
	app.run(host="127.0.0.1",port="10001",debug=True)

1.当在HTML中使用POST方法提交表单时,结果如下:

可以看到request通过form方法获得表单数据,这时,浏览器中请求的url为:http://127.0.0.1:10001/login
2.当在HTML中使用GET方法提交表单时,结果如下:

可以看到request通过args方法获取了url中的params,同时浏览器中请求的url为http://127.0.0.1:10001/login?firstname=%E6%B5%B7%E8%B4%BC%E7%8E%8B&sex=male

  • values
    类型为CombinedMultiDict,内容是form和args的结合。可以通过values代替form和args。
  • cookies
    返回请求的cookies,类型为dict。
  • headers
    返回请求头,为字典类型。比如chrome浏览器的请求头打印如下:
Host: 127.0.0.1:10001
Connection: keep-alive
Content-Length: 46
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: cross-site
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
  • data
    包含请求的数据,并转化成字符串,除非是Flask无法处理的mimetype。
  • files
    获取上传的文件流,可以获得一个文件对象,并保存本地。
  • method
    获取请求方法,GET或者POST或者其他。
  • get_json(force=False,slient=False,cache=True)
  • json
    如果请求的mimetype是application/json,那么这个参数将会解析json数据,如果不是将会返回None,可以代替上面的get_json()方法。
  • path
  • script_root
  • base_url
  • url
  • url_root
    如果用户请求的url如下面所示:
    http://www.lhystrive.com/application/page.html?name=lhy
    则上面参数内容如下:
名称显示内容
path./page.html
script_root/application
base_urlhttp://www.lhystrive.com/application/page.html
urlhttp://www.lhystrive.com/application/page.html?name=lhy
url_roothttp://www.lhystrive.com/application/

更多具体的内容可以参考下面这个博客,我觉得很不错!!!
【Flask】关于Flask的request属性

from flask import Flask,render_template,request,redirect from wtforms.fields import core from wtforms.fields import html5 from wtforms.fields import simple from wtforms import Fo 在请求结束时,指定数据的交互格式; 为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。 请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: before_first_request 在处理第一个请求前执行 before_request 在每次请求前执行 如果在某修饰的函数返回了一个响应,视图函数将不再被调用 after_request 如果没有抛出 import flask from flask import json, jsonify, request, render_template app = flask.Flask(__name__) @app.route("/api", methods=["GET", "POST"]) def api(): if request.method == 'GET': return jsonify({"login status": "成功1"}) elif request.method == "POST": data = reques 文章目录1 请求报文和响应报文2 request对象2.1 什么是request对象?2.2 为什么要有request对象?2.3 requst对象常用方法2.3.1 使用request属性获取url2.3.2 其他request对象常用的属性和方法。3 GET和post的实例:3.1 常见的HTTP方法见下表:3.2 GET请求:3.3 POST请求:3.3.1 render_template的简单使用3.3.2 正式开始我们的POST案例:3.4 一个视图函数同时可以接收GET和POST请求 【Flask学习笔记:一】开发环境部署 【Flask学习笔记:二】Flask 入门基础知识 【Flask学习笔记:三】Flask request、response 【Flask学习笔记:三】Flask request、response 一、request 如果要访问请求数据,可以使用全局请求对象 requestFlask 会解析传入的请求数据,并允许通过该全局对象访问它。如果... 1、flask简介 Flask是python一款小二精的轻量级Web框架,默认依赖于jinja2模版引擎和WSGI工具集--Werkzeug。虽然flask只保留了WEB开发的核心功能,没有Django的功能全,但是,它可以用第三方插件进行功能扩展,比如数据库可以使用Flask-SQLAlchemy,缓存可以使用Flask-Cache等 特点:灵活性可拓展性强,对各种数据库的契... 在介绍flaskrequest之前,先简单介绍下python的ThreadLocal对象。ThreadLocal,故名思义,就是线程的全局变量,最近才接触这个概念,之前在C++和C#还没遇到过这个东西。首先看下下面的代码:          import threading localobj=threading.local() def threadfunc(name):
 
推荐文章