flask项目中使用Flask-SQLAlchemy以及利用脚本方式启动flask项目的方法

项目的目录结构

flaskDemo
├── flaskapp
│   ├── __init__.py   # 应用的入口文件 —— 导入flaskapp这个包的时候会执行__init__.py文件中的代码
│   ├── models.py   # 项目定义Model的地方
│   ├── static
│   ├── templates
│   └── views        
│       └── teacher.py  # 蓝图
└── manage.py       # 启动项目的文件

截图为:

flaskapp/__init__.py文件

  主要是在这里进行项目的配置!  

# -*- coding:utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy


db = SQLAlchemy()

# 创建db时 一定要注意导入蓝图的顺序
# 注意要在db下面导入views蓝图~~在上面导入的话会报一个"循环导入"的错误
# 因为在teacher.py文件中引用了db!必须先有上面的db,才能在teacher.py中引入db
from flaskapp.views import teacher


def create_app():
    app = Flask(__name__)
    app.config['DEBUG'] = True
    app.config['SESSION_COOKIE_NAME'] = 'i am not session'

    ### SQLAlchemy的配置
    # 这个必须配置!!!!!!
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123@127.0.0.1:3306/t1?charset=utf8'
    # 避免一些不必要的警告~~
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    # 把app对象初始化到db中
    db.init_app(app=app)  # 里面的app参数是Flask对象


    # 注册views中的蓝图
    app.register_blueprint(teacher.teacher)

    return app

flaslapp/views/teacher.py文件

  主要实现了teacher蓝图。

# -*- coding:utf-8 -*-
from flask import Blueprint

from flaskapp import db
from flaskapp.models import Teacher

teacher = Blueprint("teacher",__name__,url_prefix='/teacher')


@teacher.route('/reg/<name>')
def reg(name):
    t = Teacher(name=name)
    db.session.add(t)
    db.session.commit()
    return "200 OK"


@teacher.route('/teacher_list')
def reg2():

    ret = Teacher.query.filter().all()

    return "当前有 {} 个老师".format(len(ret))

flaskapp/models.py

# -*- coding:utf-8 -*-

# 这个db是全新的SQLAlchemy对象
from flaskapp import db

# db.Model 就是 BaseModel~它离 main 使用的就是SQLAlchemy
class Teacher(db.Model):
    __tablename__ = 'teacher'
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(32),nullable=False)

if __name__ == '__main__': # 导入时不执行下面的语句,只有执行当前文件的时候才会执行下面的代码

    # 注意要在main下面导入create_app
    from flaskapp import create_app
    app = create_app()

    # 先清空再创建
    db.drop_all()
    db.create_all(app=app)

项目的启动文件manage.py

  这里配置了一下,方便像Django那样以脚本的方式运行flask项目,并且以命令的方式去执行数据库的迁移工作。

  主要使用的模块是:flask_script与flask_migrate,前者实现了以脚本的方式启动项目,后者实现的是以命令的方式进行数据库的迁移工作,注意flask_migrate安装前必须先安装好flask_script!

# -*- coding:utf-8 -*-
from flaskapp import create_app
# 脚本方式启动flask项目的模块
from flask_script import Manager


app = create_app()

# 在创建完app之后用 —— 以后在命令行中启动flask项目
# python3 manage.py runserver # 默认是127.0.0.1:5000
# 指定ip与端口
# python3 manage.py runserver -h 127.0.0.1 -p 9001
manager = Manager(app)

##### 使用脚本~~~
### 装饰器
# python3 manage.py flask_test hello
@manager.command
def flask_test(args):
    print(args)
    return args

### 指令集 —— 可以加一个装饰器,也可以加多个
# python3 manage.py  func --w whw
# python3 manage.py  func --who whw
@manager.option('-w','--who',dest='name')
@manager.option('-s','--sss',dest='name')
def func(name):
    print(name,'xxxxx')


########## 做类似于django 的 migrate数据库迁移的功能 ##########
# 注意Flask-Migrate依赖于Flask-Script组件!!!
from flask_migrate import Migrate,MigrateCommand
# 引入db~~
from flaskapp import db

mig = Migrate(app,db)
# 做一个指令集的增加配置
manager.add_command('db',MigrateCommand)
### 1、初始化命令~~会生成一个migrations包
'''
python3 manage.py db init
'''
### 2、 python3 manage.py db migrate

### 3、 python3 manage.py db update



if __name__ == '__main__':
    app.run('127.0.0.1',9001)
    # 以脚本方式启动flask项目用这个
    # manager.run()

  启动项目后,输入http://127.0.0.1:9001/teacher/reg/xxx就可以在数据库中添加一个名为xxx的老师的记录。

  输入http://127.0.0.1:9001/teacher/teacher_list可以显示当前老师的个数。

 

posted on 2019-06-07 16:30  江湖乄夜雨  阅读(688)  评论(0编辑  收藏  举报