【Flask开发实战】蓝图与子域名

一、什么是蓝图

Flask 蓝图(Blueprint)是一种组织 Flask 应用的方式,允许将应用拆分为更小、更易于管理的部分。蓝图可以包含路由、视图函数、模板和静态文件等,并且可以在多个应用中重复使用。

在 Flask 中,蓝图允许你创建可重用的应用组件,每个蓝图都可以独立于 Flask 应用创建、注册和使用。通过使用蓝图,可以将应用的功能分成逻辑上相关的模块,使代码结构更加清晰,易于维护和扩展。

之前介绍过,我们有个主程序文件app.py,里面可以写项目的url和视图函数,但如果项目比较大的话,所有代码都写到app程序文件里面,这显然不是一个合理的结构,此时用上蓝图可以优雅的帮我们实现这种需求。

二、蓝图的使用介绍

以下是一个简单的 Flask 蓝图使用案例:

假设我们有一个简单的博客应用,其中包含用户身份验证、文章管理和评论功能。我们可以使用蓝图来组织这些功能。

1、创建蓝图: 首先,我们可以创建三个蓝图来分别管理用户认证、文章和评论:

# auth.py
from flask import Blueprint

auth_bp = Blueprint('auth', __name__)

# article.py
from flask import Blueprint

article_bp = Blueprint('article', __name__)

# comment.py
from flask import Blueprint

comment_bp = Blueprint('comment', __name__)

2、注册蓝图: 然后,在应用的主文件中注册这些蓝图:

from flask import Flask
from auth import auth_bp
from article import article_bp
from comment import comment_bp

app = Flask(__name__)

app.register_blueprint(auth_bp, url_prefix='/auth')
app.register_blueprint(article_bp, url_prefix='/article')
app.register_blueprint(comment_bp, url_prefix='/comment')

3、定义路由和视图函数: 在每个蓝图中定义相应的路由和视图函数:

# auth.py
@auth_bp.route('/login')
def login():
    return 'Login Page'

# article.py
@article_bp.route('/')
def articles():
    return 'List of Articles'

# comment.py
@comment_bp.route('/')
def comments():
    return 'List of Comments'

三、子域名在蓝图中的使用

如果在flask项目中需要使用到子域名设置,子域名的实现一般也是通过蓝图来实现。创建蓝图的时候我们知道添加了一个url_prefix=/user作为url前缀,那样我们就可以通过/user/来访问user下的url。但使用子域名则不需要。另外,还需要配置SERVER_NAME,比如app.config[SERVER_NAME]='example.com:9000'。并且在注册蓝图的时候,还需要添加一个subdomain的参数,这个参数就是子域名的名称。

看一下蓝图的实现过程(例如admin.py):

from flask import Blueprint
bp = Blueprint('admin',__name__,subdomain='admin')

@bp.route('/')
def admin():
    return 'Admin Page'

app的实现:

from flask import Flask
import admin

# 配置`SERVER_NAME`
app.config['SERVER_NAME'] = 'example.com:8000'
# 注册蓝图,指定了subdomain
app.register_blueprint(admin.bp)

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=8000,debug=True)

写完以上两个文件后,还是不能正常的访问admin.example.com:8000这个子域名,因为我们没有在host文件中添加域名解析,你可以在最后添加一行127.0.0.1 admin.example.com,就可以访问到了。另外,子域名不能在127.0.0.1上出现,也不能在localhost上出现 

相关推荐

  1. Flask开发实战蓝图域名

    2024-04-29 09:26:03       30 阅读
  2. Flask python 开发篇:蓝图的使用

    2024-04-29 09:26:03       44 阅读
  3. Python Flask实现蓝图Blueprint配置和模块渲染

    2024-04-29 09:26:03       27 阅读
  4. ESP32网络开发实例-mDNS域名解析

    2024-04-29 09:26:03       54 阅读
  5. Flask Web开发基础:数据库ORM实战

    2024-04-29 09:26:03       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-29 09:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-29 09:26:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-29 09:26:03       82 阅读
  4. Python语言-面向对象

    2024-04-29 09:26:03       91 阅读

热门阅读

  1. http请求内容

    2024-04-29 09:26:03       29 阅读
  2. FaceDiffuser 部署笔记

    2024-04-29 09:26:03       35 阅读
  3. Gateway

    Gateway

    2024-04-29 09:26:03      33 阅读
  4. Spring Cloud Gateway 原理

    2024-04-29 09:26:03       37 阅读
  5. 深入探究ES5与ES6的主要区别

    2024-04-29 09:26:03       34 阅读
  6. 迁移学习修改最后把一层类别数

    2024-04-29 09:26:03       33 阅读
  7. 智能家居如何融合人工智能技术

    2024-04-29 09:26:03       35 阅读
  8. Spring Cloud Gateway直接管理Vue.js的静态资源

    2024-04-29 09:26:03       31 阅读