Flask入门二:快速入门

来源:互联网 发布:韩国身份证知乎 编辑:程序博客网 时间:2024/04/16 19:58

一.一个最小的Flask应用

from flask import Flaskapp = Flask(__name__)#app是程序实例,一个项目只能有一个程序实例@app.route('/')#路由装饰器def hello_world():#视图函数    return 'Hello World!'       #返回一个字符串if __name__ == '__main__':    app.run()

把程序保存为hello.py 用Python解释器运行

$ python hello.py    * Running on  http://127.0.0.1:5000/

访问 http://127.0.0.1:5000/ ,会看见 Hello World 问候。欲关闭服务器,按 Ctrl+C。

这段代码做了什么?
1. 首先,我们导入了 Flask 类。这个类的实例将会是我们的 WSGI 应用程序
2.接下来,我们创建一个该类的实例,第一个参数是应用模块或者包的名称。 如果你使用单一的模
块(如本例),你应该使用 name ,因为模块的名称将会因其作为单独应用启动还是作为模
块导入而有不同( 也即是 ‘main’ 或实际的导入名)。这是必须的,这样 Flask 才知道到哪
去找模板、静态文件等等。 详情见 Flask的文档。
3. 然后,我们使用 route() 装饰器告诉 Flask 什么样的URL 能触发我们的函数。
4.这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中
的信息。
5.最后我们用 run() 函数来让应用运行在本地服务器上。 其中 if name ==’main‘: 确保服务器
只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。

(1)调试模式

如果你启用了调试支持,服务器会在代码修改后自动重新载入,并在发生错误时提供一个相当有用的调试器。
有两种途径来启用调试模式:
一种是直接在应用对象上设置:

app.debug = Trueapp.run()

另一种是作为 run 方法的一个参数传入:

app.run(debug=True)

两种方法的效果完全相同。
【注意】
- 交互式调试器绝对不能用于生产环境。

(2)路由装饰器

@app.route('/')def index():    return 'Index'@app.route('/hello/')def hello():    return '<h1>Hello world!</h1>'

这个函数的返回值称为响应,是客户端接收到的内容。
像 index() 这样的函数称为视图函数(view function)。视图函数返回的响应可
以是包含HTML 的简单字符串,也可以是复杂的表单。

(3)变量规则

@app.route('/user/<name>')def showUserName(name):    return "User %s" %name@app.route('/post/<int:post_id>')def showPostId(post_id):    return "Post %d" %post_id

Flask 支持在路由中使用 int、 float 和 path 类型。path 类型也是字符串,但
不把斜线视作分隔符,而将其当作动态片段的一部分。
int | 接受整数
float | 接受浮点数
path | 和默认的相似,但也接受斜线
变量规则的意义:处理动态信息。
* 【注意】 *
1. app.route()函数中中括号里的是变量名,必须与视图函数的形参名一致!
2. 如果是int或float类型,不能直接return!必须要转换为字符串格式才可以,否
则会报错:TypeError: ‘int’ object is not callable

(4)唯一 URL / 重定向行为

@app.route('/about/') # 建议用法# @app.route('/about') # 不建议用法def about():    return 'The about page'

虽然它们看起来着实相似,但它们结尾斜线的使用在 URL 定义 中不同:
- 第一种情况中,指向 about的规范 URL 尾端有一个斜线。这种感觉很像在文件系
统中的文件夹。访问一个结尾不带斜线的 URL 会被 Flask 重定向到带斜线的规范
URL 去。因此, 强烈建议统一加上斜线!
- 第二种情况的 URL 结尾不带斜线,类似 UNIX-like 系统下的文件的路径名。访问
结尾带斜线的URL 会产生一个 404 “Not Found” 错误。
这个行为使得在遗忘尾斜线时,允许关联的 URL 接任工作,与 Apache 和其它的服
务器的行为并无二异。此外,也保证了 URL 的唯一,有助于避免搜索引擎索引同一
个页面两次。

(5)重定向和错误

  • 用 redirect() 函数把用户重定向到其它地方。
  • 用 abort() 函数放弃请求并返回错误代码。例如:
@app.route('/redir/')def redir():    return redirect('/login/')@app.route('/login/')def login():    abort(401)

用户会从/redir/重定向到一个不能访问的页面 (401 意味着禁止访问)。

(6)构造URL

用 url_for()来给指定的函数生成(构造) URL。它接受函数名作为第一个参数,
也接受对应 URL 规则的变量部分的命名参数。例如:

@app.route('/world/')def world():    # return redirect('/hello/')    # return redirect(url_for('hello'))    # return redirect(url_for('showUserName',name = 'liusheng'))    return redirect(url_for('showPostId', post_id = 100))     # 注意这里的100可以是字符串也可以是整型

使用url_for()生成 URL 而非在模板中硬编码的好处:

1. 反向构建通常比硬编码的描述性更好。允许一次性修改 URL,而不用到处边找边改。2. URL 构建会转义特殊字符和 Unicode 数据,免去你很多麻烦。

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

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

Flask-Script 扩展使用 pip 安装:

(venv) $ pip install flask-script

把命令行解析功能添加到 hello.py 程序中时需要修改的地方:

from flask_script import Managermanager = Manager(app)if __name__ == '__main__':    manager.run()

修改之后程序可以使用一组基本命令行选项来启动 Web 服务器。:

python hello.py runserver

–host HOST |设置host为 HOST
–port PORT |设置port为 PORT
-d |设置以debug模式运行而非run模式
-r |设置自动重新载入(app.debug为True)
标准命令:

python hello.py runserver -d -r --host 0.0.0.0python hello.py runserver -d -r --port:5001
原创粉丝点击