初学Flask试着架构基础搭建

准备工作:

创建的虚拟环境会自动安装 pip 和 easy_install,接下来可以使用:

pip install flask
pip install flask-script
pip install flask-sqlalchemy
pip install flask-migrate

flask-script 可以自定义命令行命令,用来启动程序或其它任务;flask-sqlalchemy 用来管理数据库的工具,支持多种数据库后台;flask-migrate 是数据库迁移工具,该工具命令集成到 flask-script 中,方便在命令行中进行操作。

 

 

 

app.py:运行主文件

app ——Flask 程序保存在此文件夹中

migrations ——包含数据库迁移脚本(安装了 flask-migrate 后自动生成)

tests ——单元测试放在此文件夹下

venv ——Python 虚拟环境

requirements.txt —— 列出了所有的依赖包,以便于在其他电脑中重新生成相同的环境

创建 requirements.txt 以及启动脚本 manage.py。程序中必须包含一个 requirements.txt 文件,用于记录所有的依赖包和版本号,便于在其它电脑上创建相同的开发环境。直接在终端使用如下命令即可创建 requirements.txt 文件:

pip freeze > requirements.txt

如果要在另一台电脑上创建这个虚拟环境的完全副本,运行以下命令即可:

pip install -r requirements.txt

config.py 存储配置

manage.py 其他任务

 

 

蓝本管理路由:

       

和路由相关联的蓝图都在休眠状态,只有当蓝图在应用中被注册后,此时的路由才会成为它的一部分。使用定义在全局作用域下的蓝图,定义应用程序的路由就几乎可以和单脚本应用程序一样简单了。

蓝图可以定义在一个文件或一个包中与多个模块一起创建更结构化的方式。为了追求最大的灵活性,可以在应用程序包中创建子

 

# app/controller/ _init__.py:创建蓝图_
from flask import Blueprint, Flask
from flask_sqlalchemy import SQLAlchemy
app_orders =Blueprint('app',__name__)
from . import test2,test1

def create_app(config_name):
    #
    app = Flask(__name__)
    app.config.from_object(config['default'])
    db.init_app(app)
    #蓝图注册
    from .controller import app_orders
    app.register_blueprint(app_orders)
    return app

数据库ORM:

#libaray init.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config

def getDB():

    app = Flask(__name__)
    #app.config['SQLALCHEMY_DATABASE_URI'] = config
    app.config.from_object(config['default'])
    #SQLAlchemy类的对象该对象包含用于ORM操作的辅助函数。它还提供了一个父Model类,使用它来声明用户定义的模型
    db = SQLAlchemy(app)
    print(db)
    return db
#library init.py 返回SQLAlchemy类的对象
from app.library import getDB

db = getDB()

 

#model COMPANY模型
from . import db
class COMPANY(db.Model):
    __tablename__ = 'COMPANY'
    id = db.Column('student_id', db.Integer, primary_key=True)
    NAME = db.Column(db.String(120))
    AGE = db.Column(db.String(50))
    ADDRESS = db.Column(db.String(200))
    SALARY = db.Column(db.String(10))

    def __init__(self, NAME, AGE, ADDRESS, SALARY):
        self.NAME = NAME
        self.AGE  = AGE
        self.ADDRESS = ADDRESS
        self.SALARY = SALARY
#路由指向及数据库处理
from app.model.Company import COMPANY
from . import app_orders
from ..model import db
# 将路由添加到蓝图里
@app_orders.route('/orders2')
def get_orders1():
    return 'test2'
@app_orders.route('/orders3')
def get_orders3():
    afile =123;

   # afile = request.files.get('pic')
    return 'test23%s' %afile
@app_orders.route('/new1', methods=['GET', 'POST'])
def new1():

    dstu = COMPANY('gg','33','213','21')
    db.session.add(dstu)
    db.session.commit()
    return 'success'

flask-migrate动态迁移数据库:

import os

from flask_script import Manager,Shell
from app import create_app
from app.model import db
from flask_migrate import Migrate,MigrateCommand
from app.model import Article,Company,Test,table1
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
# 1. 要使用flask_migrate,必须绑定app和db
migrate = Migrate(app,db)
# 2. 把MigrateCommand命令添加到manager中
manager.add_command('db',MigrateCommand)

def make_shell_context():
    return dict(app=app, db=db)
manager.add_command("shell",Shell(make_context=make_shell_context))

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

python manage.py db init:这个命令不需要执行,因为已经初始化了迁移脚本的环境,这个命令只执行一次。

 

python manage.py db migrate:这个命令需要执行,因为模型改变了。

python manage.py db upgrade这个命令也需要执行,每次运行了migrate命令后,就记得要运行这个命令。

注意点:需要将你想要映射到数据库中的模型,都要导入到manage.py文件中,如果没有导入进去,就不会映射到数据库中。

 

 

gunicorn 详解:https://www.jianshu.com/p/69e75fc3e08e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值