1、flask_script介绍
Flask-Script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。要使用Flask-Script,可以通过pip install flask-script安装最新版本
2、通过命令行调用manage.py中的方法(@manage.command)
第一步:新建manage.py文件
第二步:写入代码
from flask_script import Manager
from flask_sqlalchemy_dome import app
manage = Manager(app)
@manage.command
def index():
print("hello")
if __name__ == '__main__':
manage.run()
代码解读:
导入Manager方法
from flask_script import Manager
从py文件中导入app, 保证当前文件夹为根目录(ptcharm设置的标签:make directory as)
from flask_sqlalchemy_dome import app
建立与app的连接
manage = Manager(app)
写一个方法:
@manage.command
def index():
print("hello")
调用:
if __name__ == '__main__':
manage.run()
第三步:在命令行中进行调用
1、如果是不同的盘符,就先进行盘符的调整
2、通过cd 文件所在路径,进入文件
3、通过python py文件名 方法 的方式进行运行
3、通过命令行进行传参(@manage.option(-x, —xxx, dest=xxx))
代码写入:
from flask_script import Manager
from flask_sqlalchemy_dome import app
manage = Manager(app)
@manage.option('-n', '--name', dest='name')
@manage.option('-u', '--url', dest='url')
def hello(name, url):
return f"欢迎 {name} {url}"
if __name__ == '__main__':
manage.run()
代码解释:
@manage.option('-n', '--name', dest='name')
# '-n':通过-n 参数的方式进行传参 python manage.py hello -n gongzhujun ,就能将gongzhujun传给name
# '--name':这是-n的全称,python manage.py hello --name gongzhujun,效果与-n传参效果一致
#(@manage.option('-n', dest='name')如果不写--name的话,就无法通过这种方式传参了)
# dest='name',可以将name理解为形参
4、一个案例:通过命令行定义超级管理员
1、建立config.py存放相关配置
USERNAME = "root"
PASSWORD = "147258"
DATABASE = "gongzhujun"
PORT = 3306
HOSTNAME = "127.0.0.1"
ENGINE = f"mysql+mysqlconnector://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
SQLALCHEMY_DATABASE_URI = ENGINE
SQLALCHEMY_TRACK_MODIFICATIONS = False
注意此处:SQLALCHEMY_DATABASE_URI = ENGINE的写法,只要进行普通的赋值就行
2、建立flask_sqlalchemy_dome.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# 导入config配置文件
import config
app = Flask(__name__)
# 通过from_object()方法,引用config文件
app.config.from_object(config)
db = SQLAlchemy(app)
# 设置模型,模型也可以单独放一个文件
class Administrator(db.Model):
__tablename__ = "admin"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(10))
email = db.Column(db.String(10))
db.create_all()
if __name__ == '__main__':
app.run(debug=True)
3、建立flask_script_admin.py
from flask_script import Manager
# 导入模, 与数据库连接的db, 与flask的app
from flask_sqlalchemy_dome import app, Administrator, db
# 与命令行建立联系
manage = Manager(app)
# 定义相关参数
@manage.option('-n', '--name', dest='name')
@manage.option('-e', '--email', dest='email')
def admin(name, email):
administrator = Administrator(name=name, email=email)
db.session.add(administrator)
db.session.commit()
if __name__ == '__main__':
manage.run()
命令行输入:
数据库显示: