87、flask之flask-script组件

Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开;

Flask Script和Flask本身的工作方式类似,只需定义和添加从命令行中被Manager实例调用的命令;

官方文档:http://flask-script.readthedocs.io/en/latest/

1、创建并运行命令

首先,创建一个Python模板运行命令脚本,可起名为manager.py;

在该文件中,必须有一个Manager实例,Manager类追踪所有在命令行中调用的命令和处理过程的调用运行情况;

Manager只有一个参数——Flask实例,也可以是一个函数或其他的返回Flask实例;

调用manager.run()启动Manager实例接收命令行中的命令;

#-*-coding:utf8-*-
from flask_script import Manager
from debug import app  

manager = Manager(app)  

if __name__ == ‘__main__‘:
    manager.run() 

其次,创建并加入命令;

2、有三种方法创建命令,即创建Command子类、使用@command修饰符、使用@option修饰符;

1)第一种——创建Command子类

Command子类必须定义一个run方法;

举例:创建Hello命令,并将Hello命令加入Manager实例;

from flask_script import Manager  ,Server
from flask_script import Command
from debug import app  

manager = Manager(app)  

class Hello(Command):
    ‘hello world‘
    def run(self):
        print ‘hello world‘  

#自定义命令一:
manager.add_command(‘hello‘, Hello())
# 自定义命令二:

manager.add_command("runserver", Server()) #命令是runserver
if __name__ == ‘__main__‘:
    manager.run() 

执行如下命令:

python manager.py hello
> hello world

python manager.py runserver 
> hello world

2)第二种——使用Command实例的@command修饰符

#-*-coding:utf8-*-
from flask_script import Manager
from debug import app  

manager = Manager(app)  

@manager.command
def hello():
    ‘hello world‘
    print ‘hello world‘  

if __name__ == ‘__main__‘:
    manager.run() 

该方法创建命令的运行方式和Command类创建的运行方式相同;

python manager.py hello
> hello world

3)第三种——使用Command实例的@option修饰符

复杂情况下,建议使用@option;

可以有多个@option选项参数;

from flask_script import Manager
from debug import app  

manager = Manager(app)  

@manager.option(‘-n‘, ‘--name‘, dest=‘name‘, help=‘Your name‘, default=‘world‘)    #命令既可以用-n,也可以用--name,dest="name"用户输入的命令的名字作为参数传给了函数中的name
@manager.option(‘-u‘, ‘--url‘, dest=‘url‘, default=‘www.csdn.com‘)  #命令既可以用-u,也可以用--url,dest="url"用户输入的命令的url作为参数传给了函数中的url

def hello(name, url):
‘hello world or hello <setting name>‘
    print ‘hello‘, name
    print url  

if __name__ == ‘__main__‘:
    manager.run() 

运行方式如下:

python manager.py hello
>hello world
>www.csdn.com

python manager.py hello -n sissiy -u www.sissiy.com
> hello sissiy
>www.sissiy.com

python manager.py hello -name sissiy -url www.sissiy.com
> hello sissiy
>www.sissiy.com

原文地址:https://www.cnblogs.com/liluning/p/8312567.html

时间: 2024-11-06 11:45:03

87、flask之flask-script组件的相关文章

flask 中的常用组件的使用 ,virtualenv组件和 pipreqs组件

一  . flask 中连接的数据库的组件 DButils #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql from DBUtils.PooledDB import PooledDB, SharedDBConnection POOL = PooledDB( creator=pymysql, # 使用链接数据库的模块 maxconnections=20, # 连接池允许的最大连接数,0和None表示不限制连接数 mincach

flask强大的第三方组件之falsk-sqlalchemy

定义: flask-sqlalchemy: 是对sqlalchemy进行了封装和扩展,用起来更加的方便. 前不久刚刚认识过了SQLAlchemy,点击这里复习一下 当 Flask 与 SQLAlchemy 发生火花会怎么样呢? Flask-SQLAlchemy就这么诞生了 首先要先安装一下Flask-SQLAlchemy这个模块 pip install Flask-SQLAlchemy 然后你要下载一个干净的Flask项目 点击下载 接下来基于这个Flask项目,我们要加入Flask-SQLAl

网站后端_Python+Flask.0008.FLASK响应相关之隐式显式与自定义响应?

隐式响应: 1. 视图函数的返回值会被隐式转换为一个响应对象 2. 如果返回的是一个合法的响应对象,则会从视图函数中直接返回 3. 如果返回的是一个字符串,会用字符串数据和默认参数创建字符串为主体,状态码为200,MIME类型为text/html的werkzeug.wrappers.Response响应对象 4. 如果返回的是一个元组(response, status, headers),且至少包含一个元素,status值会覆盖状态代码,headers可以是一个列表或是字典,作为额外的消息头 5

flask框架----flask基础

知识点回顾 1.flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi 2.实例化Flask对象,里面是有参数的 app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx') 3.两种添加路由的方式 方式一: @app.route('/xxxx') # @decorator def index(): return "Index" 方式二: def index():

网站后端_Python+Flask.0009.FLASK静态资源之默认及自定义资源目录?

默认位置: 说明: WEB应用大多会提供基于CDN的静态文件服务以便给用户更好的体验,静态文件主要包括CSS/JS/图片/字体等,FLASK默认只需要在项目根目录下创建"static"的目录,项目中使用基于/static开头的路径就可以访问,但是为了更好的处理能力,推荐使用Nginx或是其它的WEB服务器管理静态文件 推荐方案: 1. 不要在项目中直接写死静态文件路径,应该使用url_for生成路径,当然如果我们想指定路径也可以在创建app实例时指定static_folder参数 #!

网站后端_Python+Flask.0010.FLASK即插视图之自定义视图类及视图修饰?

即插视图; 说明: FLASK的视图灵感来自于DJANGO的基于类而非基于函数的通用视图,主要目的是为了解决多个视图函数之间已经实现的部分,通过类继承的方式继承到其它视图,总之为了一点,就是少写代码,然后通过add_url_rule让我们定义的视图类支持动态插入,也就是所谓的即插视图 深入视图: # 转换前: #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: h

网站后端_Python+Flask.0006.FLASK地址转换之默认转换与自定义转换?

动态规则: 说明: URL规则可添加变量部分,也就是说将符合同种规则的URL抽象成一个URL模式 @app.route('/instance/<uuid>/') def instance(uuid):     return 'Instance: {}'.format(uuid) 注意: 尖括号中内容是动态的,凡是匹配到/instance/前缀的都会被映射到这个路由上,在内部把uuid作为参数而获得,默认类型为字符串 默认转换: 说明: 可通过<converter:variable_nam

网站后端_Python+Flask.0007.FLASK构造跳转之301跳转与302重定向?

构造地址: 说明: FLASK支持通过视图函数及传参来构造URL,而且未来修改URL可一次性修改,且默认构建会转义特殊字符和Unicode数据,这些工作不需要我们自己处理,且不仅支持在上下文中构造而且还支持在模版文件中构造 #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: #

网站后端_Python+Flask.0005.FLASK调试模式之开启DEBUG与PIN使用?

自动加载: # 方式一 if __name__ == '__main__':     app.run(host='0.0.0.0', port=9000, debug=True) # 方式二 if __name__ == '__main__':     app.debug = True     app.run(host='0.0.0.0', port=9000) 说明: 可通过如上两种方式开启调试模式,调试模式下PY文件被修改会自动重新加载,资源文件/模版文件/配置文件修改必须重启生效~这个确实

网站后端_Python+Flask.0012.FLASK域名相关之域名与动态子域名实现?

域名设置: 说明: SERVER_NAME内置属性的设置会影响全局URL,它主要有两个作用,第一个作用是在请求上下文之外生成绝对URL,当然如果设置也会影响请求上下文内的绝对URL,第二个作用是用于子域名的支持 #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # "