【flask入门系列】路由和蓝图

简介: 这节我会介绍一下flask中的路由与蓝图,刚开始学其实大家不必着急,打好基础就行,python这门语言本身就比较简单,尤其对于学过django的同学来说,学习flask简直小菜一碟,完全可以用flask自己搭建一个像django那样的目录,使项目结构比较清晰。后期我也会专门出一个关于flask的小项目,帮助大家快速熟悉flask的项目结构以及使用,总之就一句话,使劲卷就完事了!!!

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛。😜
  • 📝 博主的个人网站:阿牛的博客小屋🔥

前言

这节我会介绍一下flask中的路由与蓝图,刚开始学其实大家不必着急,打好基础就行,python这门语言本身就比较简单,尤其对于学过django的同学来说,学习flask简直小菜一碟,完全可以用flask自己搭建一个像django那样的目录,使项目结构比较清晰。后期我也会专门出一个关于flask的小项目,帮助大家快速熟悉flask的项目结构以及使用,总之就一句话,使劲卷就完事了!!!

flask查询路由信息

flask不同于django,他的路由信息在装饰器中,而django则有专门的urls.py文件来放路由信息,那么下面我来说一说flask如何常看全部的路由信息。

命令行方式

flask routes

但是要注意,你要运行这个命令,你的主文件名如果不是app.py,那么你要设置FLASK_APP这个环境变量,windows下比较麻烦,手动搞一个全局环境变量吧,我试了set命令设置临时局部环境变量,总是设置不成功,各位如果感兴趣的话可以自己尝试一下,而你不用担心这个问题,我们一般用的是linux系统。下面是我手动添加的全局环境变量。

在这里插入图片描述
在这里插入图片描述

在程序中获取

在应用中url_map属性中保存着整个Flask应用的路由映射信息,可以通过读取这个属性获取路由信息

print(app.url_map)

如果想在程序中遍历路由信息,可以采用如下方式:

    for rule in app.url_map.iter_rules():
        print('name={} path={}'.format(rule.endpoint,rule.rule))

在这里插入图片描述

路由-在flask中指定请求方式

在Flask中,定义路由其默认的请求方式为:

GET
OPTIONS(自带)
HEAD(自带)

利用methods参数可以自己指定一个接口的请求方式

@app.route('/index1',methods=["POST"])
def index_1():
    return "你好呀!"

#GET或者POST都行
@app.route('index2',methods=["GET","POST"])
def index_2():
    return "我很好!"

不写的情况下,默认为GET

蓝图

在 Flask 中,使用蓝图 Blueprint 来分模块组织管理。
蓝图实际可以理解为是一个存储一组视图方法的容器对象,其具有如下特点:

  • 一个应用可以具有多个 Blueprint 。
  • 可以将一个 Blueprint 注册到任何一个未使用的 URL 下比如"/user"、"/ goods "。
  • Blueprint 可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的。
  • 在一个应用初始化时,就应该要注册需要使用的 Blueprint 。

但是一个 Blueprint 并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。

基本使用方式

使用蓝图可以分为三个步骤:

#1.创建一个蓝图对像
user_Bp = Blueprint('user',__name__)

#2.在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模板过滤器
@user_Bp.route('/')
def user():
    return "原来你还在哇!"
    
#3.在应用对象上注册这个蓝图对象
app.register_blueprint(user_Bp)

单文件蓝图

可以将创建蓝图对象与定义视图放到同一个文件中。
如下所示:

#导入Flask类和蓝图
from flask import Flask,Blueprint

# 从配置对象中加载的默认配置
class DefaultConfig(object):
    SECERT_KEY = 'jstwn63bng'

# 创建Flask项目的工厂函数
def create_flask_app(config):
    app = Flask(__name__)
    app.config.from_object(config)
    #从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
    app.config.from_envvar("KEY")
    return app

# 创建项目
app = create_flask_app(DefaultConfig)

#1.创建一个蓝图对像
user_Bp = Blueprint('user',__name__)

#2.在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模板过滤器
@user_Bp.route('/')
def user():
    return "原来你还在哇!"
#3.在应用对象上注册这个蓝图对象
app.register_blueprint(user_Bp)

# Flask应用程序的run方法启动web服务器
if __name__ == '__main__':
    app.run(host='0.0.0.0',port=8000,debug=True)

在这里插入图片描述

将其打包成多文件的蓝图

flask不像我们的的django,如果需要像djano那样清晰的目录结构,需要我们自己封装蓝图,至于我们为什么要如此麻烦的封装呢!是因为我们像django这样封装,会使得代码模块化,便于复用,后续有其他的项目需要这一块或者与这一块相似,我们完全可以把这一块拿出来复用,增加代码开发效率。

下面是一个结构比较清晰地flask的项目结构,大家可以看一看:

------project #工程目录
|-----main. py #启动文件
|-----user #用户蓝图
| |----\_init_ py #此处创建蓝图对象
| |----passport.py
| |----profile.py
| |----...
|----goods 商品蓝图
| |----\_init_ py
| |----...
...

示例:

主文件helloworld.py

#导入Flask类
from flask import Flask

# 从配置对象中加载的默认配置
class DefaultConfig(object):
    SECERT_KEY = 'jstwn63bng'

# 创建Flask项目的工厂函数
def create_flask_app(config):
    app = Flask(__name__)
    app.config.from_object(config)
    #从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
    app.config.from_envvar("KEY")
    return app

# 创建项目
app = create_flask_app(DefaultConfig)

#从user包中导入蓝图对象
from user import user_Bp

#注册蓝图对象
app.register_blueprint(user_Bp)
# Flask应用程序的run方法启动web服务器
if __name__ == '__main__':
    app.run(host='0.0.0.0',port=8000,debug=True)

user包下的初始化文件\_init_ .py

from flask import Blueprint

#创建蓝图对象
user_Bp = Blueprint('user',__name__)

#在初始化user包时,要记得导入视图文件
from . import view

user包下的视图文件view.py

from . import user_Bp

@user_Bp.route('/')
def index():
    return '我在呢'

目录结构:
在这里插入图片描述

可以用新版flask的运行方式,在当前项目的终端输入指令flask run运行项目(flask项目运行的方式有很多,你喜欢哪一种就用哪一种)
在这里插入图片描述

蓝图扩展

扩展用法
1.指定蓝图的 url 前缀
在应用中注册蓝图时使用 url _ prefix 参数指定

app.register_ blueprint (user _ bp,url_prefix ='/user')
app.register blueprint (goods bp,url_prefix ='/goods')

在这里插入图片描述
如果你的蓝图里的所有视图函数都有一部分相同的url参数,则可以用这个前缀,省去在注册路由时对每个视图函数重复加相同参数的路劲

2.蓝图内部静态文件
和应用对象不同,蓝图对象创建时不会默认注册静态目录的路由。需要我们在创建时指定 static _ folder 参数
下面的示例将蓝图所在目录下的 static _ admin 目录设置为静态目录

admin = Btueprint ("admin",\__name__,,static _folder ='static_admin')

现在就可以使用/admin/static admin/访间 static admin 目录下的静态文件了。
也可通过 statie_url_path 改变访问路径

admin = Blueprint ("admin",\__name__,static _folder ='static_admin',statie_url_path ='lib')

3.蓝图内部模板目录
蓝图对象默认的模板目录为系统的模版目录。可以在创建蓝图对象时使用 template_folder 关键字参数设置模板目录

admin = Blueprint ("admin",\__name__,template_folder ="my_templates")

注:扩展2和扩展3博主这里不推荐,我更喜欢像django一样,在全局静态资源文件夹和模板文件夹中创建每个模块对应的资源文件目录,这样我觉的目录结构更清晰,当然,怎样搞都可以,你喜欢怎样的自己搞就是了,这就是flask的灵活。

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

相关文章
|
7月前
|
安全 网络安全 数据安全/隐私保护
Flask 入门系列教程(六)
Flask 入门系列教程(六)
|
7月前
|
网络架构 Python
Flask的路由讲解
Flask的路由讲解
77 0
|
6月前
|
Python
Flask三种添加路由的方法
Flask 是一个流行的 Python Web 框架,它提供了多种方法来添加路由。路由是将 URL 映射到特定函数的过程,它是构建 Web 应用程序的基础。本文将介绍 Flask 中几种常用的路由添加方法,并附带代码示例。
93 3
|
6月前
|
API 网络架构 开发者
Flask Web开发基础【路由和Jinja2模板引擎】
# Flask Web开发基础 Flask是轻量级Web框架,专注于核心功能:请求响应、模板渲染和URL路由。本文档介绍了使用Flask的基础知识,包括命令行和Python两种运行模式,以及如何修改入口文件、端口和地址。此外,还讨论了URL路由的概念和其在Flask中的实现,展示了动态路由和多URL绑定的例子。最后,提到了Jinja2模板引擎,解释了其基本语法,并通过电影列表案例展示了如何结合Flask使用模板。
75 1
|
2月前
|
前端开发 JavaScript 数据库连接
一、Flask入门介绍
一、Flask入门介绍
48 1
|
2月前
|
前端开发 JavaScript 中间件
七、Flask蓝图使用之七
七、Flask蓝图使用之七
47 0
|
2月前
|
中间件 网络架构 Python
三、Flask基本内容介绍之路由
三、Flask基本内容介绍之路由
44 0
|
3月前
|
Python
Flask路由
现代Web框架使用路由技术来帮助用户记住应用程序URL。 无需从主页导航即可直接访问所需页面。
45 0
|
5月前
|
存储 数据库 开发者
Flask中的蓝图与插件应用:构建模块化Web应用的利器
【7月更文挑战第19天】Flask蓝图和插件是构建模块化、可扩展和可维护Web应用的强大工具。蓝图允许你将应用分割成多个独立的部分,提高了代码的组织性和可重用性;而插件则为Flask应用提供了丰富的功能和社区支持,简化了开发过程。通过合理地使用蓝图和插件,你可以更加高效地开发出高质量的Web应用。
|
6月前
|
开发框架 开发者 Python
使用 Flask 为 Web 应用添加路由
通过学习 Flask 中的视图函数和路由规则,你可以使用 Flask 构建强大的 Web 应用程序并为其添加功能。在 Flask 中,视图函数以 Python 函数的形式定义,每个视图函数都与一个 URL 相关联。在 Flask 中,URL 处理程序被称为视图函数,它们用于响应客户端请求并返回响应。在 Flask 应用程序中,这是可选的。在这里,我们将其命名为 'hello',并将其与 URL '/hello/<name>' 绑定在一起。在上面的示例中,我们使用了默认的视图函数名称 'hello'。
54 2