1,flask_script作用

flask_script的作用是可以通过命令行的实行来操作Flask,例如通过命令跑一个开发版本的服务器,设置数据库,定时任务等,

我们把脚本命令代码放在一个叫做manage.py的文件中,然后运行python manage.py hello命令就可以输出print后的内容了。
这里实际上用print模拟我们的操作,具体操作会替换print的内容。

2,安装flask_scripts

要使用flask_script,可以通过pip install flask_script安装最新版本。直接在pycharm安装或者使用wheel安装。

3,具体操作

主要的点和Django一样,这里新建一个manage.py文件,里面集成这些服务器功能,具体过程如下:。

#flask_script_demo.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run()
#manage.py
from flask_script import Manager
from flask_script_demo import app #从上面的文件中引入app
from db_scripts import DBManager #db_scripts专门写数据库相关的文件的。
manager = Manager(app) 
@manager.command
def runserver():
  print("服务器跑起来了!!") # “runserver”直接就写在manage.py文件中,所以在cmd命令中使用“python manage.py runserver”
# 和数据库相关的操作都放在一起
manager.add_command('db',DBManager)
# db是命令前缀,作用:区别于“runserver”直接写在manage.py文件中,这个是写在专门给数据库的文件里的,
# 前面加上“db”是便于在cmd命令中使用“python manage.py db init”,注意这个“db”,他相当于子命令
if __name__ == '__main__':
  manager.run()
#db_scripts.py
from flask_script import Manager DBManager = Manager()
# 这里括号里不用加“app”,因为这里不是主文件 @DBManager.command
def init():
print("数据库初始化完成!")
@DBManager.command
def migrate():
print("数据表迁移成功!")

4,注意点

这里使用的是虚拟环境,我们运行服务器不是在pycharm里,而是在cmd里,我们进入如下文件夹(该项目根目录):

然后在框中cmd,执行下图,命名为“”python manage.py  runserver”,注意这是直接写在manage.py里的函数:

我们再写manage.py调用“db_scripts.py”的文件:

效果如图:

=================================================================================================

下面我们具体讲讲“manager.add_command('db',DBManager)”的用法:

这里为什么加了个“db”?

可以看到manage.py中有这么一句:

@manager.command
def runserver():
  print("服务器跑起来了!!")

  这是直接存在于manage.py中的一句话,但是对于被导入到manage.py文件中的“init”和migrate而言,不能直接通过“python manage.py init”来直接运行服务器

#db_scripts.py
from flask_script import Manager DBManager = Manager()
# 这里括号里不用加“app”,因为这里不是主文件 @DBManager.command
def init():
print("数据库初始化完成!")
@DBManager.command
def migrate():
print("数据表迁移成功!")

 这里的原因就是为了区别被导入文件与本身就有的文件的区别,正确的服务器运行代码应该为:python manage.py prex init

04flask_scripts使用的更多相关文章

随机推荐

  1. Eclipse使用JDBC小案例

    JDBC(Java Database Connectivity:Java访问数据库的解决方案)定义一套标准接口,即访问数据库的通用API,不同数据库厂商根据各自数据的特点去实现这些接口. JDBC是J ...

  2. 如何用ps简单快速扣头发丝

    好久不用PS抠图,今天接到一个小任务,换背景,以前一直用通道的办法,但用通道比较费劲,发现一个更简单的办法,就是用快速蒙版+调整边缘. 这张是原图: 1.先用快速蒙版制作选取(Q) 再按Q,退出快速蒙 ...

  3. Beans 自动装配

    http://wiki.jikexueyuan.com/project/spring/beans-auto-wiring/spring-autowiring-byname.html

  4. Leetcode-35.搜索插入位置

    题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6 ...

  5. 2018-2019-2 网络对抗技术 20165231 Exp2 后门原理与实践

    实验内容 1.使用netcat获取主机操作Shell,cron启动 2.使用socat获取主机操作Shell, 任务计划启动 3.使用MSF meterpreter(或其他软件)生成可执行文件,利用n ...

  6. codeforces 1151 B

    codeforces 1151  B codeforces 1151  B  1600fen 题意:n*m的矩阵,问能否从n行中每行选一个数 异或 大于0 解析:刚开始看没思路,想用dfs跑一遍,看到 ...

  7. 解决多个py模块调用同一个python的logging模块,打印日志冲突问题

    前期对python中的logging模块进行了封装,这样自动化测试框架中的多个测试脚本(py)就可以使用同一个封装后的日志系统,这样各脚本中只需要引用一下即可,方面快捷.那么当我使用unittest框 ...

  8. $(document).ready和window.onload的区别

    $(document).ready比window.onload先执行.window.onload只执行一次. $(document).ready和window.onload都是在都是在页面加载完执行的 ...

  9. php输出语句 echo print printf print_r var_dump sprintf

    php的几种输出方式: echo 常用的输出语句,例如:echo 'helloworld!'; print() 输出语句,有返回值.例如:print('helloworld!'); 输出成功返回1,失 ...

  10. flutter 登录后跳转到根路由

    flutter 登录以后  会有返回箭头显示 因为  路由的切换导致不是路由的第一个页面,解决办法清空路由. Navigator.of(context).pushAndRemoveUntil( new ...