P18-P25 second_bule_print

由于项目中代码比较多了,在P18的时候我们新建一个项目,创建后是这个样子的

目录

1 蓝图 Blueprint

1.1 与应用对象在同一文件的蓝图

1.2  与应用对象不在同一文件的蓝图

1.3  蓝图的静态文件

2  路由转换器

2.1  不添加过滤器

2.2  添加过滤器

2.2.1  any过滤器

2.2.2  path过滤器

2.2.3  uuid 过滤器

2.2.4  其他过滤器

2.2.5  自定义过滤器

3  flask中的request对象

3.1  get请求

3.2  post发送一段json信息

3.3  post发送一个文件


1 蓝图 Blueprint

flask中的蓝图是多个路由与视图集成的产物,相当于django中的子应用,创建蓝图的目的是方便复用与维护

蓝图可以有自己的模板,静态文件,但是蓝图并不是一个完整的应用,不能独立运行

1.1 与应用对象在同一文件的蓝图

与应用对象在同一文件的蓝图是这样做的,首先创建一个蓝图对象,然后在蓝图中写路由和视图,最后把蓝图放到应用对象中

这里面蓝图的名称user是给开发者看的,和路由没有关系,创建的路由必须是之前没有的,当前代码我们还是访问127.0.0.1:5000

为了方便使用与记忆,我们一般会在app的路由中,加入以蓝图名称命名的前缀

这样我们就需要访问 127.0.0.1:5000/user

1.2  与应用对象不在同一文件的蓝图

我们大多数情况是在别的文件中定义蓝图,首先我们要在项目路径下创建一个python包

创建之后我们发现会有一个空的 __init__.py,我们在里面创建一个蓝图对象

之后在路径other_bule_print 创建一个py文件来存放视图,这里我们就叫views.py

  • 视图可以和蓝图放在一起,也可以不放在一起,这里我们就使用更复杂的不放在一起的方法

在vies.py中导入蓝图后,定义一个蓝图中的路由与视图

之后我们回到我们开服务的main.py,先从文件中导入蓝图,之后注册

这里我们如果直接访问的话是404,这是因为没加载views.py,所以我们要在other_bule_print的__init__.py中加载views.py

这里要注意这个导入一定要写在定义蓝图的后面,要不到视图哪里会找不到other_bule_print

修改之后我们呢再访问一下

1.3  蓝图的静态文件

创建蓝图对象时加入参数static_folder

  • 不加是不行的,蓝图对象的static_folder默认为None

我们在这里创建一个文件夹static,然后放一张图片进去

之后我们访问一下 http://127.0.0.1:5000/other_bule_print/static/flask.png

发现可以访问到这个图像

使用static_url_path可以定义静态文件的url,template_folder可以定义模板文件路径,在这里就不展示了

2  路由转换器

2.1  不添加过滤器

  • 路由的转换实际上就是对get请求的操作

我们一般使用路由转换处理非敏感的数据(如小说网站的小说页数等),在flask中我们这样写

这时我们访问一下该路由

2.2  添加过滤器

那么如果我想对路由的格式有要求,那么我应该这样写

这里我们要求的是整形,我们先给个整形访问一下

发现函数接收的变量也是整形

我们现在给一串字符试一下

发现如果是一串字符就会返回404,404就不会print出我们的内容了

除了整形之外,Flask还内置了其他类型的转换器

  • default 默认,无限制
  • string 无限制,如果你输入了一个18进去,它是字符串类型的,在默认中输入18进去也是字符串类型的

2.2.1  any过滤器

前两个相当于没有,下面我们给一个any的例子

如果不在这个迭代器中的元素就会返404,我们访问一个在迭代器中的

  • 迭代器中的元素类型必须为字符

2.2.2  path过滤器

之后我们给一个path过滤器的例子

感觉上和string的差不多,我们后续如果有用到不同的我们再说

2.2.3  uuid 过滤器

uuid说明 UUID_百度百科

我们也简单用一下,后面如果提到会再讲

2.2.4  其他过滤器

我们也可以对传进来的数据设置最大值或最小值,那么我们应该这样写

  • 把min改为max就是对最大值的限制

我们先输入18试一下

发现没有问题,我们再输入16试一下

发现返回404

这里我们就不测试所有的了,后面用到会再提

2.2.5  自定义过滤器

上面提到的过滤器除了int,float其他的其实一般都不用,我们一般会自己写一套方法进行过滤,我们这样写

首先导入werkzeug,然后使用其中的BaseConverter,BaseConvter是自定义过滤器的基类

之后我们自定义一个类,里面创建后搞一个属性regex,这个名称是固定的,然后在里面写上正则表达式

之后使用url_map把过滤器注册给app,之后写上路由和视图

然后我们访问一下

自定义过滤器一共有三个变量

  • custom_class 过滤器的类
  • custom 过滤器的名字
  • custom_num 过滤器给路由与视图的变量

3  flask中的request对象

flask中的request对象不同与django每个视图都有,flask的request对象是全局对象,使用时需要导入

对象中有如下属性

3.1  get请求

我们现在发一个get请求(浏览器访问)看一下,首先写一个路由,由于怕与蓝图的路由有冲突,所以我在app中定义路由

然后我们访问一下

3.2  post发送一段json信息

我们现在上传一个图像看看,首先我们先把要发送的图像准备好,我们发送python.jpg这个图像

然后我们写一个请求代码

之后我们写服务

开启服务后我们运行请求代码

运行后会返回done以及生成demo.jpg,我们看一下这张图像

发现符合我们的预期,最后我们看一下服务端print出来的信息

请求的数据很多我就不截全了,这个是图像的字符形式

我们再看一下剩下的信息

  • 在字符串中br(换行)是不生效的

3.3  post发送一个文件

  • 图像也算文件是可以用这种方式发送过来的

我们首先写一个请求,把我们目录下的main.py发送过来

之后我们写服务,上面的例子实际上发送的是一串json信息,这次是发送的文件

我们运行一下请求代码

发现返回200我们的请求成功了,之后我们再看一下main

这里就有了我们请求的文件信息,之后我们再看一下目录

发现有这个file.py文件且与我们main.py的内容一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值