组团学

request对象(请求对象)

阅读 (150036)

一、作用

获取请求报文中传递的数据

二、概述

  • 浏览器发送到服务器的所有报文被flask接收后,创建出request对象,request被用在视图函数中,获取请求的数据

  • request对象由flask框架创建好,通过引入后就可以在视图中使用

  • 导入

    from flask import request

三、request属性

  • url 完整的请求URL

  • base_url 去掉GET参数的URL

  • url_root 去掉了?后面的参数

  • host_url 只有主机IP和端口号的URL地址

  • host 返回主机和端口

  • path 装饰器中写的路由地址

  • full_path 去掉了ip和端口剩下的完整的url

  • method 请求方法的类型

  • remote_addr 请求客户端的IP地址

  • remote_user 请求客户端的用户名

  • args 存储GET方法请求的数据

  • view_args 提取url中的部分值传递给视图的参数

  • form 存储POST方法请求的数据

  • files 用于文件上传

  • headers 存储所有到请求头信息

  • cookies 存储请求的Cookiec

  • json 获取传递过来的json数据

  • cookies 存储所有请求的cookie

示例

请求网址:http://127.0.0.1:8000/req/?a=1&b=2&c=3

from flask import request @app.route('/req/') def req(): # 完整的请求URL # return request.url # 基本路由地址,不包括get参数 # return request.base_url # 只有主机和端口号 # return request.host_url # 只包含装饰器中的路由地址 # return request.path # 去掉了ip和端口剩下的完整的url # return request.full_path # 请求方法类型 # return request.method # 客户端的IP # return request.remote_addr # 获取GET参数 # return request.args # 提取url中的部分值传递给视图的参数 # return request.view_args # 存储所有请求的cookie # return request.cookies # 获取请求头信息 return request.headers['User-Agent']

四、ImmutableMultiDict 类型对象

  • 概述

    request对象中的args、form、files属性都是该类型的对象

    是类似字典的对象,与python中的字典的区别在于该类型的对象用来处理一个键拥有多个值的情况

  • 方法

    • get() 根据键获取值 只能获取键的一个值

      注意:如果一个键有多个值,获取第一个值

    • getlist() 将键的值以列表的形式返回

五、获取GET 与 POST传参

  • get 传参使用

    url:http://127.0.0.1:5000/args/?a=1&b=2&c=3&c=4

    @myApp.route("/args/") def args(): a = request.args.get("a") b = request.args.get("b") clist = request.args.getlist("c") print(a, b, clist) return "获取到了get参数"
  • 获取POST传参

    test_post.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/post/" method="POST"> <p>用户名:<input type="text" name="username" placeholder="输入用户名"></p> <p>年龄:<input type="text" name="age" placeholder="输入年龄"></p> <p><input type="submit" value="提交"></p> </form> </body> </html>

    视图函数

    @myApp.route("/post/", methods=["POST", "GET"]) def test_post(): if request.method == 'POST' username = request.form.get("username") age = request.form.get("age") print(username, age) return username, age else: return render_template('test_post.html')
需要 登录 才可以提问哦