Flask学习(二)
来源:互联网 发布:tensorflow 编辑:程序博客网 时间:2024/06/05 18:08
路由
一、使用route装饰器把一个函数绑定到对应的 URL
@app.route('/')def index(): return 'Index Page'@app.route('/hello')def hello(): return 'Hello World'
但是,不仅如此!你可以构造含有动态部分的 URL,也可以在一个函数上附着多个规则
二、变量规则
要给 URL 添加变量部分,你可以把这些特殊的字段标记为 <variable_name>
, 这个部分将会作为命名参数传递到你的函数。规则可以用 <converter:variable_name>
指定一个可选的转换器。这里有一些不错的例子:
@app.route('/user/<username>')def show_user_profile(username): # show the user profile for that user return 'User %s' % username@app.route('/post/<int:post_id>')def show_post(post_id): # show the post with the given id, the id is an integer return 'Post %d' % post_id
三、唯一 URL / 重定向行为
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 定义 中不同。 第一种情况中,指向 projects 的规范 URL 尾端有一个斜线。这种感觉很像在文件系统中的文件夹。访问一个结尾不带斜线的 URL 会被 Flask 重定向到带斜线的规范 URL 去。
然而,第二种情况的 URL 结尾不带斜线,类似 UNIX-like 系统下的文件的路径名。访问结尾带斜线的 URL 会产生一个 404 “Not Found” 错误。
这个行为使得在遗忘尾斜线时,允许关联的 URL 接任工作,与 Apache 和其它的服务器的行为并无二异。此外,也保证了 URL 的唯一,有助于避免搜索引擎索引同一个页面两次。
四、构造 URL
如果 Flask 能匹配 URL,那么 Flask 可以生成它们吗?当然可以。你可以用 url_for() 来给指定的函数构造 URL。它接受函数名作为第一个参数,也接受对应 URL 规则的变量部分的命名参数。未知变量部分会添加到 URL 末尾作为查询参数。这里有一些例子:
>>> from flask import Flask, url_for>>> app = Flask(__name__)>>> @app.route('/')... def index(): pass...>>> @app.route('/login')... def login(): pass...>>> @app.route('/user/<username>')... def profile(username): pass...>>> with app.test_request_context():... print url_for('index')... print url_for('login')... print url_for('login', next='/')... print url_for('profile', username='John Doe')...//login/login?next=//user/John%20Doe
(这里也用到了 test_request_context() 方法,下面会解释。即使我们正在通过 Python 的 shell 进行交互,它依然会告诉 Flask 要表现为正在处理一个请求。请看下面的解释。 环境局部变量 )
为什么你要构建 URL 而非在模板中硬编码?这里有三个绝妙的理由:
反向构建通常比硬编码的描述性更好。更重要的是,它允许你一次性修改 URL, 而不是到处边找边改。
URL 构建会转义特殊字符和 Unicode 数据,免去你很多麻烦。
如果你的应用不位于 URL 的根路径(比如,在 /myapplication 下,而不是 / ), url_for() 会妥善处理这个问题。
五、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()
如果存在 GET ,那么也会替你自动地添加 HEAD,无需干预。它会确保遵照 HTTP RFC (描述 HTTP 协议的文档)处理 HEAD 请求,所以你可以完全忽略这部分的 HTTP 规范。同样,自从 Flask 0.6 起, 也实现了 OPTIONS 的自动处理。
你不知道一个 HTTP 方法是什么?不必担心,这里会简要介绍 HTTP 方法和它们为什么重要:
HTTP 方法(也经常被叫做“谓词”)告知服务器,客户端想对请求的页面 做 些什么。
六、静态文件
动态 web 应用也会需要静态文件,通常是 CSS 和 JavaScript 文件。理想状况下, 你已经配置好 Web 服务器来提供静态文件,但是在开发中,Flask 也可以做到。 只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。
给静态文件生成 URL ,使用特殊的 ‘static’ 端点名:
url_for('static', filename='style.css')
这个文件应该存储在文件系统上的 static/style.css 。
- Flask学习(二)
- flask入门学习(二)
- Flask Web 开发学习稿(二)
- flask 学习(二)
- Flask 框架学习(二)
- flask sqlalchemy(二)
- Flask--Restful(二)
- python Flask学习笔记(二)-集成bootstrap
- flask 学习之路(二) 程序的基本结构
- Flask学习(二):Flash案例代码修改
- Flask 学习篇二:学习Flask过程中的记录
- Flask学习(一)
- flask成长记(二)
- Flask源码分析(二)
- Flask学习笔记(一)
- flask学习笔记(-结构)
- flask学习笔记(-用户)
- Flask学习总结笔记(4)-- Jinja2模板引擎之二
- SVN服务器搭建
- 电脑图标突然变大怎么办?
- JsonCpp的简单使用方法
- 【java】数据类型
- epoll过人之处
- Flask学习(二)
- 利用属性动画轻松实现 Android TV 游标动画,你缺的是几行代码
- LeetCode 350 Intersection of Two Arrays II
- ehcache memcache redis 三大缓存框架比较
- eclipse中vm格式变为html类型
- 关于Android高性能Restful请求的通用封装(单Retrofit和Retrofit+RxJava)
- C# ftp 上传、下载、删除
- 今天,你刷牙“出血”了吗?
- javaweb中 ServletActionContext.getServletContext().getRealPath("")获得服务器路径