• 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'}

  • 相关阅读:
    Instr() 函数用法
    tomcat通过tomcat 安装根目录下的conf-Catalina-localhost目录发布项目详解
    字符串中包含任意几个字符中的至少一个
    四大奶粉中的三个
    mysql几个操作数据库命令符下的常用命令
    访问网络资源302 200 解释
    浅谈Java变量的初始化顺序详解
    static块的本质
    迭代器
    集合接口和类
  • 原文地址:https://www.cnblogs.com/zhangjunkang/p/10234657.html
Copyright © 2020-2023  润新知