zoukankan      html  css  js  c++  java
  • 第二章 Flask——Flask中的request

    第二章 Flask——Flask中的request

    一、request.method

    二、request.form

    三、request.args

    四、request.values

    五、request.cookies

    六、request.headres

    七、request.data

    八、request.files

    九、request.json

    十、request.其他

    介绍那么多之前先做一件事,那就是——导入模块,没错,Flask框架连request都是导入的

    from flask import Flask,request

    一、request.method

     查看请求方式

    print(request.method) # POST 看来可以使用这种方式来验证请求方式了

    二、request.form

    作用:

    获取POST请求中的数据

    前提是要在装饰器内写上允许的请求方式methods=["POST"]

    @app.route('/login',methods=["POST","GET"]) # 路由
    def login(): # 视图函数
        # print(request.args,type(request.args))
        # id = request.args.get("id")
        # username = request.args.get("username")
        print(request.form,type(request.form))
        username = request.form.get("username")
        password = request.form.get("password")
    
        print(username,password)
        return render_template("template.html")

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>template</title>
    </head>
    <body>
        <h1>请登录</h1>
        <form action="/login" method="post">
            用户名:<input type="text" name="username">
            密码:<input type="password" name="password">
            <input type="submit" value="提交">
        </form>
    </body>
    </html>

    取值方式与下面request.args相同,都打印了type类型是一样的

    三、request.args

    作用:

    获取GET请求中的数据

    获取url地址中的参数

    @app.route('/login') # 路由
    def login(): # 视图函数
        print(request.args,type(request.args))
        id = request.args.get("id")
        username = request.args.get("username")
        print(id,username)
        return render_template("template.html")

     

    print(request.args)  # ImmutableMultiDict([('id', '1'), ('age', '20')])
    print(request.args["id"])  # 1
    print(request.args.get("age"))  # 20
    print(list(request.args.keys()))  # ['id', 'age']
    print(list(request.args.values()))  # ['1', '20']
    req_dict = dict(request.args)  # {'id': ['1'], 'age': ['20']}
    print(req_dict)

    四、request.values

    作用:

    接收所有参数

    取值方式与上面两个方法相同。

    但是有一点需要注意

    我们修改一下html代码

    html

    <form action="/login?id=1&age=20&username=xxx" method="post">
            用户名:<input type="text" name="username">
            密码:<input type="password" name="password">
            <input type="submit" value="提交">
    </form>

    flask.py

    @app.route('/login',methods=["POST","GET"]) # 路由
    def login(): # 视图函数
        # print(request.args,type(request.args))
        # id = request.args.get("id")
        # username = request.args.get("username")
        print(request.values,type(request.values))
        username = request.values.get("username")
        password = request.values.get("password")
    
        print(username,password)
        return render_template("template.html")

    当用户输入用户名为admin,密码为123时,我们看下收到的数据

    CombinedMultiDict([ImmutableMultiDict([('id', '1'), ('age', '20'), ('username', 'xxx')]), ImmutableMultiDict([('username', 'admin'), ('password', '123')])]) <class 'werkzeug.datastructures.CombinedMultiDict'>
    xxx 123
    127.0.0.1 - - [29/Oct/2018 21:26:50] "POST /login?id=1&age=20&username=xxx HTTP/1.1" 200 -

    所以我们可以得出结论:

    !!!如果url和form中的Key重名的话,form中的同名的key中value会被url中的value覆盖!!!

    五、request.cookies

    作用:

    存在浏览器端的字符串儿也会一起带过来

    print(request.cookies)

    六、request.headres

    作用:

    用来获取本次请求的请求头

    print(type(request.headers))
        """
        Host: 127.0.0.1:5000
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
        Accept-Encoding: gzip, deflate
        Referer: http://127.0.0.1:5000/home
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 26
        Cookie: csrftoken=vDIozqveCEfArdYXlM6goHVlSQEn7h4bDygNphL2Feas60DiM2di0jlqKfxo7xhA
        Connection: keep-alive
        Upgrade-Insecure-Requests: 1
        Cache-Control: max-age=0
        """

    七、request.data

    作用:

    如果处理不了的就变成字符串儿存在data里面

    你一定要知道 request 是基于 mimetype 进行处理的

    mimetype的类型 以及 字符串儿 : http://www.w3school.com.cn/media/media_mimeref.asp

    如果不属于上述类型的描述,request就会将无法处理的参数转为Json存入到 data 中

    其实我们可以将 request.data , json.loads 同样可以拿到里面的参数

    八、request.files

    作用:

    保存文件

    九、request.json

    作用:

    获取所有json数据

    如果在请求中写入了 "application/json" 使用 request.json 则返回json解析数据, 否则返回 None

    十、request.其他

      # 获取当前的url路径
        print(request.path)# /req
        # 当前url路径的上一级路径
        print(request.script_root) #
        # 当前url的全部路径
        print(request.url) # http://127.0.0.1:5000/req
        # 当前url的路径的上一级全部路径
        print(request.url_root ) # http://127.0.0.1:5000/
  • 相关阅读:
    【转】Android WiFi 经常掉线出现的几个原因分析!
    如何分析解决Android ANR
    如何分析和研究Log文件 ,如何看日志信息
    Force removing ActivityRecord no saved state问题的原因分析
    win7下彻底卸载和重装mysql
    mysql的基本操作命令
    mysql 启动,停止,重启
    解决mysql登录报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)问题
    一个轻量级的基于 .NET Core 的 ORM 框架 HSQL
    C# ref引用参数与out输出参数的使用与区别
  • 原文地址:https://www.cnblogs.com/neymargoal/p/9873226.html
Copyright © 2011-2022 走看看