分类: Python

Flask入门二:路由规则的理解

Flask的路由规则是基于Werkzeug的路由模块,基本功能就是两点:
1、给出一个URL,匹配到它对应的处理函数,进行下一步处理操作;
2、给出函数能反推构造出URL;

带参数的路由:

@app.route('/hello/<name>')
def hello(name):
    return 'Hello %s' % name

hello.png
在浏览器的地址栏中输入”http://localhost:8000/hello/test”,你将在页面上看到”Hello man”的字样。URL路径中”/hello/”后面的参数被作为”hello()”函数的”name”参数传了进来。

还可以在URL参数前添加转换器来转换参数类型,

@app.route('/id/<int:user_id>')
def get_id(user_id):
    return 'User ID: %d' % user_id

id.png
访问”http://localhost:8000/id/test”,你会看到404错误。但是试下”http://localhost:8000/id/123″,页面上就会有”User ID: 123″显示出来。参数类型转换器”int:”帮你控制好了传入参数的类型只能是整形。目前支持的参数类型转换器有:

string          不带斜杠(默认值)的任何文本,字符型。
int          整型。
float          浮点值。
path         字符型,可有斜杠。

多URL的路由
一个函数上可以设施多个URL路由规则,

@app.route('/')
@app.route('/hello')
@app.route('/hello/<name>')
def hello(name=None):
    if name is None:
        name = 'World'
    return 'Hello %s' % name

g.png
helloworld.png
test.png
这个例子接受三种URL规则,”/”和”/hello”都不带参数,函数参数”name”值将为空,页面显示”Hello World”;”/hello/“带参数,页面会显示参数”name”的值,效果与上面第一个例子相同。

HTTP请求方法设置
HTTP请求方法常用的有Get, Post, Put, Delete,CONNECT、OPTIONS、TRACE等

GET
浏览器告知服务器:只 获取 页面上的信息并发给我。这是最常用的方法。
HEAD
浏览器告诉服务器:欲获取信息,但是只关心 消息头 。应用应像处理 GET 请求一样来处理它,但是不分发实际内容。在 Flask 中你完全无需 人工 干预,底层的 Werkzeug 库已经替你打点好了。
POST
浏览器告诉服务器:想在 URL 上 发布 新信息。并且,服务器必须确保 数据已存储且仅存储一次。这是 HTML 表单通常发送数据到服务器的方法。
PUT
类似 POST 但是服务器可能触发了存储过程多次,多次覆盖掉旧值。你可 能会问这有什么用,当然这是有原因的。考虑到传输中连接可能会丢失,在 这种 情况下浏览器和服务器之间的系统可能安全地第二次接收请求,而 不破坏其它东西。因为 POST 它只触发一次,所以用 POST 是不可能的。
DELETE
删除给定位置的信息。
OPTIONS
给客户端提供一个敏捷的途径来弄清这个 URL 支持哪些 HTTP 方法。 从 Flask 0.6 开始,实现了自动处理。
from flask import request
 
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return 'This is a POST request'
    else:
        return 'This is a GET request'

当你请求地址”http://localhost:5000/login”,”GET”和”POST”请求会返回不同的内容,其他请求方法则会返回405错误。

URL构建方法
Flask提供了”url_for()”方法来快速获取及构建URL,方法的第一个参数指向函数名(加过”@app.route”注解的函数),后续的参数对应于要构建的URL变量。下面是几个例子:

url_for('login')    # 返回/login
url_for('login', id='1')    # 将id作为URL参数,返回/login?id=1
url_for('hello', name='man')    # 适配hello函数的name参数,返回/hello/man
url_for('static', filename='style.css')    # 静态文件地址,返回/static/style.css
app = Flask(__name__, static_folder='files')

如果要改变这个静态目录的位置,可以在创建应用时,指定static_folder'参数

相关文章

发表新评论