Flask 被设计为可扩展形式,故而没有提供一些重要的功能,例如数据库和用户认证,所以开发者可以自由选择最适合程序的包,或者按需求自行开发。

社区成员开发了大量不同用途的扩展,如果这还不能满足需求,你还可使用所有 Python 标准包或代码库。为了让你知道如何把扩展整合到程序中,接下来我们将在 hello.py 中添加一个扩展,使用命令行参数增强程序的功能。

使用Flask-Script支持命令行选项

Flask 的开发 Web 服务器支持很多启动设置选项,但只能在脚本中作为参数传给 app.run()函数。这种方式并不十分方便,传递设置选项的理想方式是使用命令行参数。

Flask-Script 是一个 Flask 扩展,为 Flask 程序添加了一个命令行解析器。Flask-Script 自带了一组常用选项,而且还支持自定义命令。

Flask-Script 扩展使用 pip 安装:

(venv)[user@localhost test]$ pip install flask-script

示例 2-3 显示了把命令行解析功能添加到 hello.py 程序中时需要修改的地方。

示例 2-3 hello.py:使用 Flask-Script

from flask_script import Manager

manager = Manager(app)

# ...

if __name__ == '__main__':

manager.run()

专为 Flask 开发的扩展都暴漏在 flask.ext 命名空间下。Flask-Script 输出了一个名为Manager 的类,可从 flask_script 中引入。这个扩展的初始化方法也适用于其他很多扩展:把程序实例作为参数传给构造函数,初始化主类的实例。创建的对象可以在各个扩展中使用。在这里,服务器由 manager.run() 启动,启动后就能解析命令行了。

这样修改之后,程序可以使用一组基本命令行选项。现在运行 hello.py,会显示一个用法

消息:

(venv)[user@localhost test]$ python hello.py

usage: hello.py [-?] {shell,runserver} ...

positional arguments:

{shell,runserver}

shell            Runs a Python shell inside Flask application context.

runserver        Runs the Flask development server i.e. app.run()

optional arguments:

-?, --help         show this help message and exit

shell 命令用于在程序的上下文中启动 Python shell 会话。你可以使用这个会话中运行维护任务或测试,还可调试异常。

顾名思义,runserver 命令用来启动 Web 服务器。运行 python hello.py runserver 将以调试模式启动 Web 服务器,但是我们还有很多选项可用:

(venv)[user@localhost test]$ python hello.py runserver --help

usage: hello.py runserver [-?] [-h HOST] [-p PORT] [--threaded]

[--processes PROCESSES] [--passthrough-errors] [-d]

[-D] [-r] [-R]

Runs the Flask development server i.e. app.run()  # 运行 Flask 开发服务器:app.run()

optional arguments:

-?, --help            show this help message and exit   # 显示帮助信息并退出

-h HOST, --host HOST

-p PORT, --port PORT

--threaded

--processes PROCESSES

--passthrough-errors

-d, --debug           enable the Werkzeug debugger (DO NOT use in production

code)

-D, --no-debug        disable the Werkzeug debugger

-r, --reload          monitor Python files for changes (not 100{'const':

True, 'help': 'monitor Python files for changes (not

100% safe for production use)', 'option_strings':

['-r', '--reload'], 'dest': 'use_reloader',

'required': False, 'nargs': 0, 'choices': None,

'default': None, 'prog': 'hello.py runserver',

'container': <argparse._ArgumentGroup object at

0x20260d0>, 'type': None, 'metavar': None}afe for

production use)

-R, --no-reload       do not monitor Python files for changes

--host 参数是个很有用的选项,它告诉 Web 服务器在哪个网络接口上监听来自客户端的连接。默认情况下,Flask 开发 Web 服务器监听 localhost 上的连接,所以只接受来自服务器所在计算机发起的连接。下述命令让 Web 服务器监听公共网络接口上的连接,允许同网中的其他计算机连接服务器:

(venv)[user@localhost test]$ python hello.py runserver --host 0.0.0.0

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

现在,Web 服务器可使用 http://a.b.c.d:5000/ 网络中的任一台电脑进行访问,其中“a.b.c.d”是服务器所在计算机的外网 IP 地址。

说明:若外部主机无法访问,检查本机的防火墙配置,可以关闭防火墙试一下

2.6、Flask扩展的更多相关文章

  1. Inside Flask - flask 扩展加载过程

    Inside Flask - flask 扩展加载过程 flask 扩展(插件)通常是以 flask_<扩展名字> 为扩展的 python 包名,而使用时,可用 import flask. ...

  2. Flask從入門到入土(二)——請求响应與Flask扩展

    ———————————————————————————————————————————————————————————— 一.程序和請求上下文 Flask從客戶端收到請求時,要讓視圖函數能訪問一些對象 ...

  3. Flask 扩展 自定义扩展

    创建一个为视图访问加日志的扩展Flask-Logging,并从中了解到写Flask扩展的规范. 创建工程 先创建一个工程,目录结构如下: flask-logging/ ├ LICENSE # 授权说明 ...

  4. Flask从入门到精通之flask扩展

    Flask被设计成可扩展形式,因此并没有提供一些重要的功能,比如数据库和用户认证,所以开发者可以自由选择最适合程序的包,或者按需求自行开发.社区成员开发了大量不同用途的扩展,如果这还不能满足需求,你还 ...

  5. Flask扩展实现HTTP令牌token认证HTTPTokenAuth

    Token认证 在restful设计中,用户认证模式通常使用json web token,而不会使用传统的HTTP Basic认证(传入账号密码) token认证模式如下:在请求header中加入to ...

  6. Flask基础(13)-->Flask扩展Flask-Script

    Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...

  7. flask扩展系列之 - 访问速度限制

    flask-limiter 是一个对客户端的访问速率进行限制的flask扩展.可以自定义一些访问的(速度)限制条件来把那些触发限制的请求拒之门外.一般常用来进行对爬虫的限制. 下面就常见的用法,举了一 ...

  8. Flask扩展 -- flask-mail

    电子邮件是最常用的通信方式之一.虽然Python标准库中的smtplib包可用在Flask程序中发送电子邮件,但包装了smtplib的Flask-Mail扩展能更好的和Flask集成. 1.安装Fla ...

  9. flask 扩展之 -- flask-pagedown

    支持 Markdown 语法, 并添加 富文本文章的预览功能. 使用到的包列表: PageDown : 使用 JavaScript 实现的客户端 Markdown 到 HTML 的转换程序. Flas ...

随机推荐

  1. 把握linux内核设计思想系列

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 本专栏分析linux内核的设计实现,包含系统调用.中断.下半部机制.时间管理. ...

  2. eclipse添加插件、删除插件 示例: eclipse marketplace

    在有些版本的eclips上并没有eclipse marketplace ,这让eclipse添加插件变得比较玛法,传统的办法都是通过自行下载插件或者用 help->install new sof ...

  3. Android 高亮指示层提示

    此库出自翔神之手   用起来绝对方便 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0J ...

  4. c# 删除程序占用的文件,强力删除文件,彻底删除文件,解除文件占用

    c# 删除程序占用的文件.清理删除文件.彻底删除文件,解除文件占用 文件打开时,以共享读写模式打开 FileStream inputStream = new FileStream(name, File ...

  5. Linux下使用popen()执行shell命令【转】

    本文转载自:https://my.oschina.net/u/727148/blog/262987 函数原型: #include “stdio.h” FILE popen( const char co ...

  6. C# textbox中输入时加限制条件 // C#Winform下限制TextBox只能输入数字 // 才疏学浅(TextBox 小数点不能在首位+只能输入数字)

    textbox中输入时加限制条件 分类: C# winform2008-08-26 08:30 306人阅读 评论(0) 收藏 举报 textbox正则表达式object 1.用正则表达式! 2.使用 ...

  7. hdu 1242(BFS+优先队列)

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  8. [NOIP 2016] 蚯蚓

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4721 [算法] 首先,我们可以维护一个堆,堆中存放蚯蚓的长度,由于除当前蚯蚓其他的蚯 ...

  9. Angularjs+Bootstrap实现分页指令

    本插件的开发目的主要给前端同学使用,本人是专注于后台开发的,对css样式不熟悉,但逼于前端要求做一个共公组件方便日常开发,所以这个插件在样式上可能不适合大部分人,喜欢的拿走吧,不喜欢的也请别喷.  一 ...

  10. H264的RTP负载打包的数据包格式,分组,分片

    H264的RTP负载打包的数据包格式,分组,分片 1.    RTP数据包格式 RTP报文头格式(见RFC3550 Page12): 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 ...