上一篇中已经讲述了: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实现步骤:

    1. 定义类

    2. 继承BaseConverter

    3. 定义正则表达式

    4. 把自定义转换器,添加到默认转换字典中

  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中获取参数(路径,查询,请求体,请求头)的更多相关文章

  1. Django中获取参数(路径,查询,请求头,请求体)

    一.通常HTTP协议向服务器传参有几种途径 : 提取URL的特定部分,如/weather/shanghai/2018,可以在服务器端的路由中用正则表达式截取: 查询字符串(query string), ...

  2. go的gin框架从请求中获取参数的方法

    前言: go语言的gin框架go里面比较好的一个web框架, github的start数超过了18000.可见此框架的可信度 如何获取请求中的参数 假如有这么一个请求: POST   /post/te ...

  3. 使用HTTP协议向服务器传参的方式及django中获取参数的方式

    使用HTTP协议向服务器传参的四种方式 URL路径携带参数,形如/weather/beijing/2018; 查询字符串(query string),形如key1=value1&key2=va ...

  4. Flask中路由参数

    Flask中路由参数.请求方式设置 一.参数设置 1.参数类型 Flask中参数的使用 @app.route('/parames/<username>/') def hello_world ...

  5. JSP userBean setProperty直接从request中获取参数

    JSP userBean setProperty直接从request中获取参数: form表单Jsp: <%@ page language="java" import=&qu ...

  6. Java中获取文件路径

    Java中获取文件路径 1.实例说明 (1)得到 ClassPath的绝对URI路径 Thread.currentThread().getContextClassLoader().getResourc ...

  7. Android中获取文件路径的方法总结及对照

    最近在写文件存贮,Android中获取文件路径的方法比较多,所以自己也很混乱.找了好几篇博客,发现了以下的路径归纳,记录一下,以备不时之需 Environment.getDataDirectory() ...

  8. flask中获取request的参数的方法

    request请求总体分为两类: 1.get请求 访问时会在地址栏直接显示参数不安全,且参数大小比较小. 2.post请求 参数不显示在地址栏,一般用户注册.登录都通过post请求完成. flask获 ...

  9. web项目中获取各种路径的方法

    ~Apple   web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/&qu ...

随机推荐

  1. 【ZooKeeper系列】1.ZooKeeper单机版、伪集群和集群环境搭建

    ZooKeeper安装模式主要有3种: 单机版(Standalone模式)模式:仅有一个ZooKeeper服务 伪集群模式:单机多个ZooKeeper服务 集群模式:多机多ZooKeeper服务 1 ...

  2. flash存储器原理及作用是什么?

    flash存储器的工作原理 flash存储器又称闪存(快闪存储器),是一种电可擦可编程只读存储器的形式,是可以在操作中被多次擦或写,EEPROM与高速RAM成为当前最常用且发展最快的两种存储技术.计算 ...

  3. 21.跨域和CORS

    一 跨域 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的 ...

  4. 3年Java开发6个点搞定高并发系统面试疑惑

    前言 其实所谓的高并发,如果你要理解这个问题呢,其实就得从高并发的根源出发,为啥会有高并发?为啥高并发就很牛逼? 说的浅显一点,很简单,就是因为刚开始系统都是连接数据库的,但是要知道数据库支撑到每秒并 ...

  5. Java面向对象之初始化块

    目录 Java面向对象之初始化块 普通初始化块 静态初始化块 初始化块与构造器 Java面向对象之初始化块 在程序设计中,让数据域正确地执行初始化一直是一个亘古不变的真理. 那么,有哪些手段可以初始化 ...

  6. 【玩转SpringBoot】翻身做主人,一统web服务器

    寄人篱下的日子 一直以来受传统影响,我们的web工程总是打成war包,然后放入tomcat的webapps目录下面. 如下图01: 当tomcat启动时,会去解压war包,然后运行web工程.这大家都 ...

  7. 爬取https://www.parenting.com/baby-names/boys/earl网站top10男女生名字及相关信息

    爬取源代码如下: import requests import bs4 from bs4 import BeautifulSoup import re import pandas as pd impo ...

  8. 阿里云服务器部署Tornado应用

    本篇详细介绍tornado应用部署到阿里云服务器上的全过程. Tornado程序地址:github https://github.com/ddong8/ihasy.git 准备工作:阿里云服务器Cen ...

  9. Winform中实现将照片剪贴到系统剪切板中(附代码下载)

    场景 效果 点击剪切按钮 点击粘贴按钮 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免 ...

  10. springboot搭建项目,实现Java生成随机图片验证码。

    这篇文章主要介绍了如何通过Java如何生成验证码并验证.验证码的作用我想必大家都知道,话不多说开始实施! 首先创建一个springboot项目以下是项目结构,内有utli工具类.存放生成图片验证码方法 ...