Flask之初学者
Posted guyuyun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask之初学者相关的知识,希望对你有一定的参考价值。
Flask通过DOS命令行操作管理项目和数据库迁移操作
一、插件安装
- flask-script:在(虚拟)环境中使用“pip install flask-script”进行安装即可,此插件可以通过命令行更方便地去操作flask。
- flask-migrate:在(虚拟)环境中使用“pip install flask-migrate”进行安装即可,此插件可以对数据库进行迁移操作,比如当你改变了model中的内容时(如增加了一列,一般在运行项目时,如果数据库中已经建好了这张表,此时在代码中的改变不会更新到数据库中去的),就可以通过此插件同步更新到数据库中。
二、flask-script使用
1. 主文件:一般用于启动flask-script的Manager,可以通过主文件调用所有的函数(必须是被[Manager_obj].command装饰的函数才能被调用,而且一般不会所有的函数都定义在主文件中),比如新建并写好一个简单的py文件“manage.py”,然后就可以在DOS中使用命令“python manage.py runserver”调用了:
from flask_script import Manager from flask_script_migrate_demo import app # 实例化Manager,app为Flask实例对象,可以从其他文件导入 manage = Manager(app) # 使用此装饰器装饰的函数才能在DOS中调用 @manage.command def runserver(): # ... # print(‘The server has been started!‘) if __name__ == ‘__main__‘: manage.run() # 启动Manager
2. 子文件:子文件一般用于放置操作函数,然后通过主文件来调用,需要注意是子文件中的函数同样需要装饰器“[Manager_obj].command”,不过子文件中的Manager实例化不需要app(Flask对象)了,同时需要使用“[Manager_obj].add_command(‘[sub_manager_obj_name]‘, [sub_manager_obj])”将子文件中的Manager添加到主文件中,“sub_manager_obj_name”为子文件Manager的别名(DOS调用的就是它),如下代码在DOS中使用命令“python manage.py db db_init”调用即可:
from flask_script import Manager from flask_script_migrate_demo import app from db_scripts import DBManage manage = Manager(app) # 将子文件db_scripts的Manager对象DBManage导入,别名db_manage将用于DOS调用 manage.add_command(‘db_manage‘, DBManage) if __name__ == ‘__main__‘: manage.run() # 启动Manager
from flask_script import Manager # 需要APP(Flask对象)来实例化 DBManage = Manager() # 同样需要command装饰器 @DBManage.command def db_init(): # ... # print(‘The database has been initialized successfully!‘)
三、flask-migrate使用
1. 一般数据库模型类都是使用专门的py来定义存放的,比如“models.py”,当需求变化时,可能这些Model都已经映射到数据库中了,再想要修改时(比如新增加一列),如果没有其他插件,就只能删除数据库中的表,再重新生成了,显然这是不实用的,所以flask-migrate就显得非常有用了,它可以将代码中对数据库的修改同步更新(迁移操作)到数据库中。
2. flask-migrate插件是依赖于flask-script的,所以要使用flask-migrate,就需要先装好flask-script。
3. 基本使用(from flask_migrate import Migrate, MigrateCommand):
-
- Migrate实例化需要传入app(Flask对象)和db(SQLAlchemy对象);
- 使用flask-script插件中Manager的add_command将MigrateCommand添加到主文件的Manager中,这样就可以通过DOS来进行操作了;
- 需要用到的模型类Model需要导入到主文件中,没有导入的Model的所有操作都不会生效的;
- 在DOS命令行中使用:第一次执行manage.py的时候,需要依次使用命令“python manage.py db_migrate init”(初始化迁移环境)、“python manage.py db_migrate migrate”(生成对应的迁移文件)和“python manage.py db_migrate upgrade”(将迁移文件同步更新到数据库中)来完成数据库的映射,当之后你的model类中有改变时,只需要依次运行后面两个命令“migrate”和“upgrade”即可对数据库进行同步更新。“manage.py”和“db_migrate”是自定义的,见如下代码:
from flask_script import Manager from flask_script_migrate_demo import app from flask_migrate import Migrate, MigrateCommand from extends import db # db为SQLAlchemy对象 from models import User # User为db.Model的子类,即模型类,其他未导入的模型类就不能映射到数据库了 manage = Manager(app) migrate = Migrate(app, db) # 将MigrateCommand添加打Manager中,并取别名db_migrate manage.add_command(‘db_migrate‘, MigrateCommand) if __name__ == ‘__main__‘: manage.run() # 启动Manager
以上是关于Flask之初学者的主要内容,如果未能解决你的问题,请参考以下文章