Flask - 蓝图和子域名

 蓝图:

之前我们写的 url 和视图函数都是在同一个文件,如果项目比较大的话,这显然不是一个合理的结构,而蓝图可以优雅的帮我们实现这个需求。例如:

from flask import Blueprint

bp = Blueprint(‘user‘, __name__, url_prefix=‘/user/‘)

@bp.route(‘/‘)
def index():
    return u"用户首页"

@bp.route(‘/profile/‘):
def profile():
    return u"个人简介"

然后我们在主程序中,通过app.register_blueprint()方法将这个蓝图注册进url映射中,看下主app的实现:

from flask import Flask
import user

app = Flask(__name__)
app.register_blueprint(user.bp)

if __name__ == ‘__main__‘:
    app.run(host=‘0.0.0.0‘, port=5000)

以后访问/user/,/user/profile/,都是执行user.py文件中的视图函数,这样就实现了项目的模块化。

以上就是对蓝图的一个简单介绍,但是使用蓝图还有几个需要注意的地方,就是蓝图如何寻找静态文件、模块文件、ulr_for函数如何反转url。以下进行介绍:

寻找静态文件:

默认不设置如何静态文件路径,Jinja2会在项目的static文件夹中寻找静态文件。也可以设置其他路径,在初始化蓝图的时候,Blueprint这个构造函数,有一个参数static_folder可以指定静态文件的路径,如:

bp = Blueprint(‘admin‘, __name__, url_prefix=‘/admin‘, static_folder=‘static‘)

static_folder 可以是相对路径(相对蓝图文件所在目录),也可以是绝对路径。在配置完蓝图后,还有一个需要注意的地方是如何在模板中引用静态文件。在模板中引用蓝图,应该要使用蓝图名+ . + static来引用,如:

<link href="{ url_for(‘admin.static‘, filename=‘about.css‘)}">

寻找模板文件:

跟静态文件一样,默认不设置任何模板文件的路径,将会在项目的templates中寻找模板文件。也可以设置其他的路径,在构造函数Blueprint中有一个template_folder参数可以设置模板路径,如:

bp = Blueprint(‘admin‘, __name__, url_prefix=‘/admin‘, template_folder=‘templates‘)

模板文件和静态文件有点区别,以上代码写完以后,如果你渲染一个模板 return render_template(‘admin.html‘) , Flask 默认会去项目根目录下的templates文件夹中查找admin.html文件,如果没有找到,才会去蓝图文件所在的目录下的templates文件夹中寻找:

url_for 生成 url:

用url_for生成蓝图的url,使用的格式是:蓝图名称+ . +视图函数名称。比如要获取 admin 这个蓝图下的 index 视图函数的 url ,应该采用以下方式:

url_for(‘admin.index‘)

其中这个蓝图名称是在创建蓝图的时候,传入的第一个参数。bp = Blueprint(‘admin‘, __name__, url_prefix=‘/admin‘, template_folder=‘templates‘)

子域名:

子域名在许多网站中都用到了,比如一个网站叫做 xxx.com ,那么我们可以定义一个子域名cms.xxx.com 来作为cms管理系统的网址, 子域名的实现一般也是通过蓝图来实现的。在之前的章节中,我们创建蓝图的时候添加一个url_prefix=/user作为url前缀,那样我们就可以通过/user/来访问user下的url。但使用子域名则不需要。另外,还需要配置SEVER_NAME, 比如app.config[SERVER_NAME] = ‘example.com:5000‘。并且在注册蓝图的时候,还需要添加一个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:5000‘

# 注册蓝图,指定了subdomain
app.register_blueprint(admin.bp)

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

修改本地的host文件

访问example.com:5000就可以访问了

原文地址:https://www.cnblogs.com/xushuhai/p/9110792.html

时间: 2024-10-05 10:22:43

Flask - 蓝图和子域名的相关文章

flask 蓝图

转自:http://spacewander.github.io/explore-flask-zh/7-blueprints.html 蓝图 什么是蓝图? 一个蓝图定义了可用于单个应用的视图,模板,静态文件等等的集合.举个例子,想象一下我们有一个用于管理面板的蓝图.这个蓝图将定义像/admin/login和/admin/dashboard这样的路由的视图.它可能还包括所需的模板和静态文件.你可以把这个蓝图当做你的应用的管理面板,管它是宇航员的交友网站,还是火箭推销员的CRM系统. 我什么时候会用到

12、Flask实战第12天:子域名

什么是子域名,我们的后台管理系统, 比如cms.heboan.com.配置子域名需要用到蓝图技术: 我现在buleprints下面创建一个cms.py 蓝图 from flask import Blueprint cms_bp = Blueprint('cms', __name__, subdomain='cms') @cms_bp.route('/') def index(): return 'cms page' 在主程序my_flask.py注册该蓝图 ... from blueprints

网站部署一级域名、二级域名、子域名

关于域名介绍: 一般来说,一个完整的域名用二个或者二个以上部分组成,各部分之间用英文的句号“.”开分割.如“www.baidu.com”,其中最后一个“.”的右边部分“.com”成为顶级域名(TLD,也成为一级域名,类似还有.cn,.net,.org,.gov,.edu,.tv等等,这里.com.cn其实是.cn下的二级域名).任何个人都可以注册一个.com域名,其中baidu.com也就是顶级域名.com下的二级域名,baidu.com还可以有image.baidu.com.music.bai

Windows下Apache服务器中自动配置二级子域名

今天我们介绍的这个办法,只需要简单修改 httpd-vhosts.conf 文件,配合 .htaccess 文件即可实现自动配置二级域名. 我们这里以 wpchina.com 为例,以下代码中的 wpchina.com 都可以替换成你自己想要域名. 我们的目标是,不同的子域名可以访问不同目录下的网站: wpchina.com => / : home.wpchina.com => /home: bbs.wpchina.com => /bbs: … 第一步,确认安装好 Apache 服务器,

Flask蓝图目录、Flask-SQLAlchemy、Flask-Script、Flask-Migrate

一.Flask蓝图目录 我们之前写的Flask项目都是自己组织的目录结构,其实Flask官方有其推荐的目录结构,以下就是一个符合官方推荐的Flask小型应用的项目结构目录示例,如下: 如图,这就是我们建立好的一个目录结构,一层一层的看一下,首先是app目录,它就是我们的主应用程序目录了,其中有一个__init__.py文件,里面的内容如下: from flask import Flask from .views.acc import acc_bp from .views.user import

(子)域名收集

一.域名收集 域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位. 例如:baidu.com.而 www.baidu.com 是该域名对应的子域名,www是主机头. whois查询 whois是用来查询域名的IP及所有者等信息的传输协议.简单说,就是一个用来查询域名是否已经注册,以及注册域名的详细信息. 不同域名后缀的whois信息需要到不同的whois数据库查询.如.com和.edu的whois信息有

Flask 蓝图进行路由分发

Flask 蓝图进行路由分发 Flask虽然说是一个轻型web框架,但也总不能用一个py文件写完全部view吧,所以我们要把路由分到不同的py文件中.这就需要用到蓝图了. 一 创建一个py文件 用于处理分过来的url,如创建music.py from flask import Blueprint music = Blueprint('music', __name__) @music.route("/") # 即 /music/ def roo(): return "music

flask蓝图的使用

首先,我对蓝图的理解相对通俗,就是觉得蓝图对于视图方法模块化.大项目协同开发过程中的一个很好的工具. 1.下图是我们通常情况下使用的项目组织结构 看一下视图方法: #views.py 1 from app import app 2 3 4 @app.route('/user/index') 5 def index(): 6 return 'user_index' 7 8 @app.route('/user/show') 9 def show(): 10 return 'user_show' 11

Python Flask 蓝图Blueprint

1. 目录结构 2. manage.py类似于django中manage import fcrm if __name__ == '__main__': fcrm.app.run(port=8001) 3. fcrm下面的__init__.py文件 from flask import Flask from .views import account #导入fcrm.views目录下account.py模块, from .views import order #导入fcrm.views目录下orde