🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
现在不想使用后端模板渲染的方式来显示静态页面了,我们要做到**前后端分离**(当然更彻底的是直接前端业务作为一个单独的服务提供),可以通过配置 蓝图 加载静态 html 资源的方式来呈现前端页面 在 `app/static/html` 目录下新建 `index.html` 代码如下 ``` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="/static/css/style.css"> <title>前后端分离静态页面</title> </head> <body> * 前后端分离的静态 HTML </body> </html> ``` 在 `app` 目录下新建 `html.py` 文件,代码如下 ``` #!/usr/bin/env python3 # -*- encoding: utf-8 -*- from flask import Blueprint, make_response,current_app html = Blueprint("html", __name__) @html.route("/<re(r'.*'):html_file_name>") def get_html(html_file_name): if not html_file_name: html_file_name = "index.html" if html_file_name != "favicon.ico": html_file_name = "html/"+html_file_name # flask 提供的返回静态文件的方法 resp = make_response(current_app.send_static_file(html_file_name)) return resp ``` 在改造下我们创建应用的工厂,导入提供静态页面的蓝图 对 `app` 目录下的 ` __init__` 初始化文件进行如下改造 ``` #!/usr/bin/env python3 # -*- encoding: utf-8 -*- from flask import Flask from flask_sqlalchemy import SQLAlchemy import logging from logging.handlers import RotatingFileHandler from config import config_map from app.utils.commons import ReCoverter # 创建数据库对象 db = SQLAlchemy() # 设置日志的记录级别 logging.basicConfig(level=logging.DEBUG) # 调试级别 debug # 创建日志记录器,指明日志保存路径、每个日志文件的最大大小 100Kb、保存的日志文件个数上限 file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024*1024*100, backupCount=10) # 创建日志记录格式 日志等级 输入日志信息的文件名 行数 日志错误 formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s') # 为刚创建的日志记录器设置日志记录格式 file_log_handler.setFormatter(formatter) # 为全局的日志工具对象 (flask app使用) 添加日志记录器 logging.getLogger().addHandler(file_log_handler) # 工厂模式 def create_app(config_name): app = Flask(__name__) # 设置 flask 的配置信息 config_class = config_map[config_name] app.config.from_object(config_class) # 使用 app 初始化 db db.init_app(app) # 为 flask 添加自定义的转换器 app.url_map.converters["re"] = ReCoverter # 注册蓝图 from app import api_1_0 app.register_blueprint(api_1_0.bp, url_prefix="/api/v1.0") # from app import admin # app.register_blueprint(admin.bp, url_prefix="/admin") # 注册提供静态文件的蓝图 from app import html app.register_blueprint(html.html) return app ``` 此时访问 `http://localhost:5000/` ![html_python_separate](https://img.kancloud.cn/59/1a/591a14ef472f9769cfb88829e872dd56_521x330.png)