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之初学者的主要内容,如果未能解决你的问题,请参考以下文章

Flask之初学者

Flask之初学者

Flask之初学者

Flask之初学者

Flask之初学者

Flask连接数据库打怪升级之旅