zoukankan      html  css  js  c++  java
  • 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'}

  • 相关阅读:
    September 17th 2016 Week 38th Saturday
    【2016-09-16】UbuntuServer14.04或更高版本安装问题记录
    September 16th 2016 Week 38th Friday
    September 11th 2016 Week 38th Sunday
    September 12th 2016 Week 38th Monday
    September 10th 2016 Week 37th Saturday
    September 9th 2016 Week 37th Friday
    c++暂停
    八皇后问题
    ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
  • 原文地址:https://www.cnblogs.com/zhangjunkang/p/10234657.html
Copyright © 2011-2022 走看看