request对象(请求对象)

2022-09-14 18:48:42 浏览数 (1)

一、作用

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

二、概述

  • 浏览器发送到服务器的所有报文被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

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

四、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

代码语言:javascript复制
<span class="hljs-meta">@myApp.route("/args/")</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">args</span><span class="hljs-params">()</span>:</span>
    a = request.args.get(<span class="hljs-string">"a"</span>)
    b = request.args.get(<span class="hljs-string">"b"</span>)
    clist = request.args.getlist(<span class="hljs-string">"c"</span>)
    print(a, b, clist)
    <span class="hljs-keyword">return</span> <span class="hljs-string">"获取到了get参数"</span>

获取POST传参

test_post.html

代码语言:javascript复制
<!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>

视图函数

代码语言:javascript复制
<span class="hljs-meta">@myApp.route("/post/", methods=["POST", "GET"])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test_post</span><span class="hljs-params">()</span>:</span>
   <span class="hljs-keyword">if</span> request.method == <span class="hljs-string">'POST'</span>
      username = request.form.get(<span class="hljs-string">"username"</span>)
      age = request.form.get(<span class="hljs-string">"age"</span>)
      print(username, age)
      <span class="hljs-keyword">return</span> username, age
    <span class="hljs-keyword">else</span>:
    	<span class="hljs-keyword">return</span> render_template(<span class="hljs-string">'test_post.html'</span>)

0 人点赞