Flask【第三章】:Flask中的reques

Flask中的request

每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制使不同的。接下来我们一个个来看看,在Flask中的request是怎么玩的。

一、request的各参数

玩之前还是那样需要我们先导入request。

from flask import request

1. request.method

说明:这是获取request的请求方式

演示:这里以登录为例

前端代码:

# 使用get方式发送请求
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="get">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>
get方式发送

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"]) #指定允许的请求方式
def login():
    print("method:",request.method)
    return render_template("login.html")

app.run("192.168.13.69","5000",debug=True)
后端代码

后端输出:

修改前端代码为post方式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>
修改前端发送方式为post

在浏览器中输入用户密码后点击登录发送post请求,后端输出如下:

2. request.form

说明:获取存放在Formdata中的数据,以一个类似字典的格式输出。

示例:这里以登录为例

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>
使用post发送

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"])
def login():
    print("form:",request.form)
    return render_template("login.html")

app.run("192.168.13.69","5000",debug=True)
后端代码

前端输入用户名密码后,后端输出:

form: ImmutableMultiDict([('username', 'root'), ('pwd', '123')])

3. request.args

说明:获取存放在URL也就是地址栏中的数据。

示例:这里以登录为例

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="get">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>
使用get发送

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"])
def login():
    print("args:",request.args)
    return render_template("login.html")

app.run("192.168.13.69","5000",debug=True)
打印args

前端输入用户名密码后,后端输出:

args: ImmutableMultiDict([('username', 'admin'), ('pwd', '123')])

4. request.url

说明:获取访问的完整路径

示例:这里以登录为例

地址栏输入地址:

http://192.168.13.69:5000/login?username=admin&pwd=123

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"])
def login():
    print("url:",request.url)
    return render_template("login.html")

app.run("192.168.13.69","5000",debug=True)
获取url完整路径

输入地址后,后端输出:

url: http://192.168.13.69:5000/login?username=admin&pwd=123

5. request.path

说明:获取路由地址

示例:这里以登录为例

地址栏输入地址:

http://192.168.13.69:5000/login?username=admin&pwd=123

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"])
def login():
    print("path:",request.path)
    return render_template("login.html")

app.run("192.168.13.69","5000",debug=True)
获取路由地址

输入地址后,后端输出:

path: /login

6. request.host

说明:获取主机地址(包括端口号)

示例:这里以登录为例

地址栏输入地址:

http://192.168.13.69:5000/login?username=admin&pwd=123

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"])
def login():
    print("host:",request.host)
    return render_template("login.html")

app.run("192.168.13.69","5000",debug=True)
获取主机地址

输入地址后,后端输出:

host: 192.168.13.69:5000

7. request.values

说明:获取Formdata 和Url中的数据,注意的时,不要使用to_dict,因为会覆盖相同的key。to_dict后面会说。

示例:这里以登录为例

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>
发送post请求

地址栏输入地址:

http://192.168.13.69:5000/login?username=admin&pwd=123

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"])
def login():
    print("values:",request.values)
    return render_template("login.html")

app.run("192.168.13.69","5000",debug=True)
获取values值

后端输出:

values: CombinedMultiDict([ImmutableMultiDict([('username', 'admin'), ('pwd', '123')]), ImmutableMultiDict([('username', 'root'), ('pwd', '666')])])

8. request.json

说明:如果提交时请求头中的Content-Type:application/json字典操作,那就将其序列化成字典

注意:在做前后端分离时,一定要商议好Content-Type类型。在此不做演示了

9. request.data

说明:如果提交时请求头中的Content-Type无法被识别或者没有此信息,flask会将请求体中的原始数据(就是一堆字节)存放在request.data中。

在此不做演示

10. request.cookies

说明:获取Cookies中的数据

在此不做演示

11. request.headers

说明:获取请求头信息

在此不做演示

12. request.files

说明:序列化文件存储,用来处理删除的文件,使用save来保存上传的文件

演示:上传一个图片到服务器,服务器保存下来。

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
    文件:<input type="file" name="my_file">
    <input type="submit" value="上传">
</form>
</body>
</html>
上传文件

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"])
def login():
    if request.method == "GET":
        return render_template("login.html")
    my_file = request.files.get("my_file")
    my_file.save(my_file.filename)
    return "上传成功"

app.run("192.168.13.69","5000",debug=True)
后端代码

注意:在save函数中,必须指定保存的文件名,my_file.filename指的是用原文件名,也可以自定义文件名。

结果显示:

二、关于to_dict参数

根据字面我们可以得知,是将类似字典格式的数据转换成字典格式。所有的类似字典格式的数据都可以通过此参数进行转换。

比如:request.form得到的是一个类似字典格式的数据,我们可以使用request.form.to_dict()将其转换成字典格式:

示例:

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>
登录,发送post请求

后端代码:

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route("/login",methods=["GET","POST"])
def login():
    print("form:",request.form.to_dict())
    return render_template("login.html")

app.run("192.168.13.69","5000",debug=True)
将其转换成字典格式

后端输出:

form: {'username': 'zjk', 'pwd': '123'}

原文地址:https://www.cnblogs.com/zhangjunkang/p/10234657.html