搭建一个flask项目框架

一、项目布局:MVT开发模式

  • M–model(模型)

    1.主要对于数据库层的封装,实现 数据模型与数据库的解耦 ,使得数据模型不在依赖特定的数据库,而只需要更改config就可以实现数据库的迁移。

    2.设计思路:对象-关系-映射(Object–relation-Mapping

    3.常采用sqlalchemy使数据查询更加简单。

  • V–views(视图)

    作用:视图接受Web请求并且返回Web响应。

    20191203105009.png

  • T–template(模板)

    1. web,包括动态模板(通过views的数据结合进行数据展示)和静态html,
    2. 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用
    3. template注重的是向用户的展示,而不是业务逻辑。

二、文件布局

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BA1fePDe-1575367959294)(images\20191203110918.png)]

1203:项目名

app:放在工程代码

models模型层,负责连接数据库,完成数据操作

static静态文件夹,客户端能访问的,如网页的js,css,images。

templates放置html模板,属于模板层。

views视图层,负责处理用户的请求,做出反应,完成业务,重视业务逻辑。

config.py配置文件,配置一个项目所需的各项参数。

extensions.py外部的python库的配置与初始化。

manage.py 将项目封装成服务。

三、码代码

1.第一步创建以上的相关文件及文件夹,搭好项目的基本文件目录

​ 之后的第一步配置app/config.py
在这里插入图片描述

class Config:
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    @staticmethod
    def init_app(app):
        pass

# 开发环境   语法:mysql+pymysql://用户名:密码@ip:端口/数据库名
class DevelopmentConfig(Config):
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/bigdata'

# 测试环境
class TestingConfig(Config):
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/bigdata'

# 生产环境
class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/bigdata'

# 配置字典
config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

2.配置app/extensions.py

在这里插入图片描述

  • flask_moment: Flask-Moment是一个集成moment.js到Jinja2模板的Flask扩展 (moment.js: 提供了日期格式化、日期解析等功能 )
  • flask_sqlalchemy: 是一个很强大的关系型数据库框架,支持多种数据库后台 ,为models模型层提供友好的支持。
  • flask_bootstrap: 一个优秀的前端框架很好的集成于python中。
  • flask_migrate: 一个用来做数据迁移的falsk扩展,一般结合sqlalchemy一起使用。

代码如下

from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
from flask_migrate import Migrate


#创建对象
moment = Moment()
db = SQLAlchemy()
bootstrp = Bootstrap()
migrate = Migrate()

#创造一个初始化的方法
def config_extension(app):
    moment.init_app(app)
    db.init_app(app)
    bootstrp.init_app(app)
    migrate.init_app(app)

3.配置app/views完成蓝图设置

新建文件app/views/main.py

在这里插入图片描述

#app/views/main.py
from flask import Blueprint

main = Blueprint('main',__name__)

@main.route('/')
def index():
    return '配置完成!'

新建文件app/views_init_.py完成蓝图的注册

在这里插入图片描述

#app/views/__init__.py
from .main import main
from flask import Flask
BLUEPRINT = (
    (main,''),
)
#创建一个初始化的蓝图的方法
def config_blieprint(app):
    for blueprint,prefix in BLUEPRINT:
        app.register_blueprint(blueprint,url_prefix = prefix)

4. 完成app/_init_.py项目初始化及404

在这里插入图片描述


比较重要的是初始化的顺序:config的初始化必须要在在第一步!!!

from flask import Flask, render_template
from app.views import config_blieprint
from app.config import config
from app.extensions import config_extension

#创建一个初始化Flask项目的方法
def strat_app(config_name):
    app = Flask(config_name)
    app.config.from_object(config[config_name] or config['default'])
    config[config_name].init_app(app)
    config_extension(app)
    config_blieprint(app)
    config_errorhandler(app)
    return app
#定制404页面
def config_errorhandler(app):
    @app.errorhandler(404)
    def page_not_found(e):
        return render_template('errors/404.html')



5.manage.py 封装项目
在这里插入图片描述

import os
from flask_script import Server,Manager
from flask_migrate import MigrateCommand
from app import strat_app
config_name = os.environ.get('FLASK_CONFIG') or 'default'
app = strat_app(config_name)

manage = Manager(app)
manage.add_command("runserver", Server(use_debugger=True))
manage.add_command('db',MigrateCommand)

if __name__ == '__main__':
    manage.run()

最后:我们可以通过命令行去运行我们的项目

python manage.py runserver

在这里插入图片描述

打开浏览器访问:http://127.0.0.1:5000/

OK,我们就写好了一个flask的通用项目模板,如果需要添加什么需求就可以直接添加就可以了!

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐