flask成长记(一)

来源:互联网 发布:南昌金域名都 编辑:程序博客网 时间:2024/05/21 06:46

flask成长记(一)

硬件出身的蜗牛不怎么动框架之类的东西,正好趁现在这个轻量级的flask学一下。

教材没有,就是flask的文档,在这儿做个笔记,各位勿喷,这也就是个人笔记,蜗牛自己都不一定看第二遍……

先看下面这个官方的实例代码:

from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world():    return 'Hello World!'if __name__ == '__main__':    app.run()

那么,这段代码做了什么?

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

如果你禁用了 debug 或信任你所在网络的用户,你可以简单修改调用 run() 的方法使你的服务器公开可用,如下:

app.run(host=’0.0.0.0’)
这会让操作系统监听所有公开的IP。

路由

现代 web 应用使用优雅的 URL,这易于人们记住 URL ,这点在面向使用慢网络连接的移动设备的应用上特别有用。如果可以不访问索引页而直接访问想要的页面,他们多半会喜欢这个页面而再度光顾。

如上所见, route() 装饰器把一个函数绑定到对应的 URL 上。 这里是一些基本的例子:

@app.route('/')def index():    return 'Index Page'@app.route('/hello')def hello():    return 'Hello World'

注意里面其实是定义了函数。

变量规则

要给 URL 添加变量部分,你可以把这些特殊的字段标记为 < variable_name > , 这个部分将会作为命名参数传递到你的函数。规则可以用 < converter:variable_name > 指定一个可选的转换器。这里有一些不错的例子:

@app.route('/user/<username>')def show_user_profile(username):    # show the user profile for that user    # 这里其实是占位输出那种的。    #%S代表这里是一个字符串的输出。    return 'User %s' % username@app.route('/post/<int:post_id>')#上面这一句就使用了转换器,因为post_id传过来的时候是连在url之后的#其实是一个字符串,但是这里要求是int类型的#于是在路由里面就把他弄成一个int类型的了。常见的转换器下面有:def show_post(post_id):    # show the post with the given id, the id is an integer    return 'Post %d' % post_id

现有的转换器如下:

int 接受整数
float 同 int ,但是接受浮点数
path 和默认的相似,但也接受斜线

唯一的网址 / 重定向行为

Flask 的 URL 规则基于 Werkzeug 的路由模块。这个模块背后的思想是基于 Apache 以及更早的 HTTP 服务器规定的先例,保证优雅且唯一的 URL。

以这两个规则为例:

@app.route('/projects/')def projects():    return 'The project page'@app.route('/about')def about():    return 'The about page'

虽然它们看起来确实相似,但它们结尾斜线的使用在 URL 定义 中不同。 第一种情况中,规范的 URL 指向 projects 尾端有一个斜线。这种感觉很像在文件系统中的文件夹。访问一个结尾不带斜线的 URL 会被 Flask 重定向到带斜线的规范 URL 去。

然而,第二种情况的 URL 结尾不带斜线,类似 UNIX-like 系统下的文件的路径名。访问结尾带斜线的 URL 会产生一个 404 “Not Found” 错误。

当用户访问页面时忘记结尾斜线时,这个行为允许关联的 URL 继续工作,并且与 Apache 和其它的服务器的行为一致。另外,URL 会保持唯一,有助于避免搜索引擎索引同一个页面两次。

意思就是说,写了

@app.route('/haha')

那url为http://localhost:5000/haha可以,但是http://localhost:5000/haha/就不行,会404
但是写成

@app.route('/haha/')

那http://localhost:5000/haha和http://localhost:5000/haha/都是可以的。

HTTP 方法

HTTP (web 应用会话的协议)知道访问 URL 的不同方法。默认情况下,路由只回应 GET 请求,但是通过给 route() 装饰器提供 methods 参数可以更改这个行为。这里有一些例子:

@app.route('/login', methods=['GET', 'POST'])def login():    if request.method == 'POST':        do_the_login()    else:        show_the_login_form()
0 0
原创粉丝点击