Flask二之快速入门

一.一个最小的Flask应用

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

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

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

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

这段代码作了什么?浏览器

  1. 首先,咱们导入了 Flask 类。这个类的实例将会是咱们的 WSGI 应用程序
    2.接下来,咱们建立一个该类的实例,第一个参数是应用模块或者包的名称。 若是你使用单一的模服务器

块(如本例),你应该使用 name ,由于模块的名称将会因其做为单独应用启动仍是做为模
块导入而有不一样( 也便是 '__main__' 或实际的导入名)。这是必须的,这样 Flask 才知道到哪
去找模板、静态文件等等。 详情见 Flask的文档。app

  1. 而后,咱们使用 route() 装饰器告诉 Flask 什么样的URL 能触发咱们的函数。
    4.这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回咱们想要显示在用户浏览器中函数

的信息。
5.最后咱们用 run() 函数来让应用运行在本地服务器上。 其中 if name =='__main__': 确保服务器
只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是做为模块导入的时候。post

(1)调试模式

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

app.debug = True
app.run()

另外一种是做为 run 方法的一个参数传入:编码

app.run(debug=True)

两种方法的效果彻底相同。
【注意】url

  • 交互式调试器绝对不能用于生产环境。

(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 Manager
manager = 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.0
python hello.py runserver -d -r --port:5001
相关文章
相关标签/搜索