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可以显示当前老师的个数。