Flask中获取参数(路径,查询,请求体,请求头)
上一篇中已经讲述了:HTTP协议向服务器传参有几种途径{ 链接 }
在Flask中同样通过这4中传参途径进行归纳:
1. URL中路径参数的获取:
拓展:
- # 路由参数/路径参数:http://127.0.0.1:5000/users/13312345678
- # 路由查询参数:http://127.0.0.1:5000/users/?mobile=13312345678&?user_name="yd"
1.1 是什么?
Flask不同于Django直接在定义路由时编写正则表达式的方式,而是采用转换器;
1.2 怎么用?
1.语法:<>
2.作用:提取URL路径参数
3.效果:将该位置数据以
字符串格式匹配,值同样为字符串类型,转换器中的值为参数名传入视图- 4.
案例:
# 127.0.0.1/user/123
@app.route('/users/<user_id>')
def user_info(user_id):
print(type(user_id))
return 'hello user {}'.format(user_id)
- 5.转换器原理:
导包:`from werkzeug.routing import BaseConverter`,进入BaseConverter通过继承查看。
- 6.Flask默认转换器:
共6种+1个默认
DEFAULT_CONVERTERS = {
"default": UnicodeConverter,
"string": UnicodeConverter,
"any": AnyConverter,
"path": PathConverter,
"int": IntegerConverter,
"float": FloatConverter,
"uuid": UUIDConverter,
}
- 7.
坑转换器string和path的区别:
http://127.0.0.1:5000/users/4/2/3
# @app.route('/users/<path:user_id>')
# user_id=4/2/3 @app.route('/users/<string:user_id>')
# 找不到
http://127.0.0.1:5000/users/4
# 只能匹配到/users/ 斜线后面部分
# user_id=4 # string匹配的转换器所在位置的数据,不带斜线
# path配置转换器所在位置的数据,包括(除# ?之外的所有符号【包括中引文不同状态】)
- 8.自定义转换器
8.1为什么?
内置转换器不满足需求时,自定义匹配
8.2怎么做?
参考源码实现
#app文件导包routing中的map类,app.py中类属性 = routing中的 map类, map类属性:self.converters = self.default_converters.copy() 。。。
8.3实现步骤:
定义类
继承BaseConverter
定义正则表达式
把自定义转换器,添加到默认转换字典中
8.4案例:
# 个人练习:匹配学号--2015100446
class StuIdConverter(BaseConverter):
regex = "20[0-5]{2}100\d[0-9]{2}" # 添加自定义转换器到默认转换器字典中
app.url_map.converters['stu_id'] = StuIdConverter @app.route('/<stu_id:data>')
def get_stu_id(data):
print("stu_id={}".format(data))
return 'stu_id value is stu_id={}'.format(data)
2.查询参数,请求头,请求体
使用请求上下文对象request获取
| 属性 | 说明 | 类型 |
|---|---|---|
| data | 记录请求的数据,并转换为字符串 | * |
| form | 记录请求中的表单数据 | MultiDict |
| args | 记录请求中的查询参数 | MultiDict |
| cookies | 记录请求中的cookie信息 | Dict |
| headers | 记录请求中的报文头 | EnvironHeaders |
| method | 记录请求使用的HTTP方法 | GET/POST |
| url | 记录请求的URL地址 | string |
| files | 记录请求上传的文件 | * |
案例:
# 访问127.0.0.1:5000/?name=yd,获取name值
from flask import request app = Flask(__name__) @app.route("/")
def index():
name = request.args.get("name")
return "请求参数:{}".format(name) if __name__ == "__main__":
app.run() #上传图片
from flask import Flast, request
app = Flask(__name__)
@app.route("/img", methods=["POST"])
def up_load():
image = request.file.get("image")
image.save("./new_image.jpg")
if __name__ == "__main__":
app.run()
# 注释
1. 客户端发图片是post请求,而Flask默认是GET请求,所以我们需要指明请求方式是POST
2. 通过request.file.get("image")获取到前端上传的文件,我们直接用image接受,image此时是一个对象,我们可以直接用image.save()方法保存。保存时需要指定存储路径和文件名。
3. 注意坑:
args:查询字符串,当多个同名参数
Flask取第一个,django取最后一个。method:get请求方式也能提交
form表单
Flask中获取参数(路径,查询,请求体,请求头)的更多相关文章
- Django中获取参数(路径,查询,请求头,请求体)
一.通常HTTP协议向服务器传参有几种途径 : 提取URL的特定部分,如/weather/shanghai/2018,可以在服务器端的路由中用正则表达式截取: 查询字符串(query string), ...
- go的gin框架从请求中获取参数的方法
前言: go语言的gin框架go里面比较好的一个web框架, github的start数超过了18000.可见此框架的可信度 如何获取请求中的参数 假如有这么一个请求: POST /post/te ...
- 使用HTTP协议向服务器传参的方式及django中获取参数的方式
使用HTTP协议向服务器传参的四种方式 URL路径携带参数,形如/weather/beijing/2018; 查询字符串(query string),形如key1=value1&key2=va ...
- Flask中路由参数
Flask中路由参数.请求方式设置 一.参数设置 1.参数类型 Flask中参数的使用 @app.route('/parames/<username>/') def hello_world ...
- JSP userBean setProperty直接从request中获取参数
JSP userBean setProperty直接从request中获取参数: form表单Jsp: <%@ page language="java" import=&qu ...
- Java中获取文件路径
Java中获取文件路径 1.实例说明 (1)得到 ClassPath的绝对URI路径 Thread.currentThread().getContextClassLoader().getResourc ...
- Android中获取文件路径的方法总结及对照
最近在写文件存贮,Android中获取文件路径的方法比较多,所以自己也很混乱.找了好几篇博客,发现了以下的路径归纳,记录一下,以备不时之需 Environment.getDataDirectory() ...
- flask中获取request的参数的方法
request请求总体分为两类: 1.get请求 访问时会在地址栏直接显示参数不安全,且参数大小比较小. 2.post请求 参数不显示在地址栏,一般用户注册.登录都通过post请求完成. flask获 ...
- web项目中获取各种路径的方法
~Apple web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/&qu ...
随机推荐
- C和C++从零开始系列(一)
今天开始写下一系列C和C++从入门开始的文章. 简单说几句C和C++的关系.C语言早于C++. C语言 贝尔实验室的Ken Thompson发明了 UNIX,当时有个B语言的.后来D.M.Ritchi ...
- Python3 并发编程4
目录 Event事件 线程池与进程池 基本概念 使用方法 和信号量的区别 协程(coroutine) 基本概念 实现方式 多线程爬取梨视频 Event事件 用来控制线程的执行 e.isSet()查看对 ...
- CCF-CSP题解 201612-4 压缩编码
\(CSP\)也考\(DP\)的嘛...想了两小时贪心的我在宿舍凌乱... 还是智障+老花啊...这不是一道区间合并裸题嘛...石子合并啊... 再看看这\(3s\)的时限,\(O(n^3)\)都够了 ...
- SpringBoot电商项目实战 — Zookeeper的分布式锁实现
上一篇演示了基于Redis的Redisson分布式锁实现,那今天我要再来说说基于Zookeeper的分布式现实. Zookeeper分布式锁实现 要用Zookeeper实现分布式锁,我就不得不说说zo ...
- Caffe源码-SGDSolver类
SGDSolver类简介 Solver类用于网络参数的更新,而SGDSolver类实现了优化方法中的随机梯度下降法(stochastic gradient descent),此外还具备缩放.正则化梯度 ...
- PWN INTEGER OVERFLOW 整数溢出
0x00 Preview Last few passage I didn't conclude some important points and a general direction o ...
- [译]C# 7系列,Part 3: Default Literals 默认文本表达式
原文:https://blogs.msdn.microsoft.com/mazhou/2017/06/06/c-7-series-part-3-default-literals/ C#的default ...
- [译]C# 7系列,Part 7: ref Returns ref返回结果
原文:https://blogs.msdn.microsoft.com/mazhou/2017/12/12/c-7-series-part-7-ref-returns/ 背景 有两种方法可以将一个值传 ...
- c++-面向对象类的示例-求周长面积,判断体积相等-文件操作和一般操作
面向对象编程示例:求周长和面积 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //圆的周 ...
- 【译】ModSecurity事务生命周期
本篇简要介绍ModSecurity Transaction Lifecycle,也即ModSecurity的事务生命周期. Transaction Lifecycle In ModSecurity, ...