【Flask03】路由

3.1 路由介绍

修改【Flask02】中hello.py文件的代码,修改后如下所示:

# coding: utf-8
from flask import Flask
app = Flask(__name__)

# 如果访问/,返回 ‘这是首页’
@app.route('/')
def hello_world():
    return '这是首页'

# 如果访问/hello,返回 Hello,World!
@app.route('/hello')
def hello():
    return 'Hello,World!'

然后在终端执行相应命令启动服务:
在这里插入图片描述
访问地址 http://127.0.0.1:5000,浏览器页面会显示 ’这是首页‘;如果访问地址 http://127.0.0.1:5000/hello,浏览器页面会显示 Hello, World!。这样就实现了通过访问不同的 URL 地址从而响应不同的页面。

3.2 变量规则

为了给URL增加变量的部分,我们需要把一些特定的字段标记成*<变量名字>。这些特定的字段会作为参数传入函数中。当然也可以通过指定一个可选的转换器通过规则<converter:变量名>*将变量转换为特定的数据类型。在hello.py中添加如下代码:

@app.route('/user/<username>')
def show_user_profile(username):
    # 显示用户名
    return 'User {}'.format(username)

当访问http://127.0.0.1:5000/user/啦啦啦时,页面显示为:User 啦啦啦

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # 显示提交整型的用户"id"的结果,注意"int"是将输入的字符串形式转换为整型数据
    return 'Post {}'.format(post_id)

当访问http://127.0.0.1:5000/post/3时,页面显示为:Post 3。这里说的int转换是指用户在浏览器地址栏上输入的都是字符串,但是在传递给 show_post 函数处理时已经被转换为了整型。

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    # 显示 /path/ 之后的路径名
    return 'Subpath {}'.format(subpath)

当访问 http://127.0.0.1:5000/path/file/A/a.txt 时,页面显示为 Subpath file/A/a.txt。

转换器的主要类型如下:(意思是说只能接收这个类型的数据)
在这里插入图片描述
重定向行为
Flask的URL规则是基于Werkzeugrouting模块。该模块背后的思路是基于Apache和早期的HTTP服务器定下先例确保优雅和唯一的URL。在hello.py中添加如下代码:

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

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

这样会产生的结果是:当访问 http://127.0.0.1:5000/projects/ 时,页面会显示 The project page。当访问 http://127.0.0.1:5000/about 时,页面会显示 The about page;但是当访问 http://127.0.0.1:5000/about/ 时,页面就会报错 Not Found。

原因是:当用户访问页面忘记结尾斜线时,这个行为允许关联的URL继续工作,并且与Apache和其他的服务器的行为一致,反之则不行,因此在代码的URL设置时斜线只能多写不能少写;另外,URL保持唯一,有助于避免搜索引擎索引同一页面两次。

3.3 HTTP方法

先来看几个常用的HTTP方法:

GET:浏览器通知服务器只获取页面上的信息并且发送回来。这可能是最常用的方法
HEAD:浏览器告诉服务器获取信息,但是只对头信息感兴趣,不需要整个页面的内容。应用应该处理起来像接收到一个GET请求,但是不传递实际内容。
POST:浏览器通知服务器它要在URL上提交一些信息,服务器必须保证数据被存储且只存储一次,这是HTML表单通常发送数据到服务器的方法。(POST只会被触发一次)
PUT:同POST类似,但是服务器可能出发了多次存储过程,多次覆盖掉旧值。
DELETE:移除给定位置的信息。
OPTIONS:给客户端提供一个快速的途径来指出这个URL支持哪些HTTP方法。

HTTP有不同方法来访问URLs。默认情况下,路由只会相应GET请求,但是能通过给route()装饰器提供methods参数来改变。下面是一个例子:

@app.route('/login',methods['GET','POST'])
def login():
	if request.method == 'POST':
		do_the_login() # 如果是POST方法就执行登陆操作
	else:
		show_the_login_form() # 如果是GET方法就展示登陆表单

3.3 构建URL

可以使用*url_for()*方法去构建一个URL来匹配一个特定的函数。它接受函数名作为第一个参数,以及一些关键字参数,每一个关键字参数对应于URL规则的变量部分。未知变量部分被插入到URL中作为查询参数

总结:路由还是挺有意思的,虽然现在稍微有点懵。简单来说的话,route装饰器就是用于把一个函数绑定到一个URL上。这个URL里边可以包含变量,这个变量又可作为这个函数的参数传进来。
在实际操作中有时候会忘记把URL用单引号包起来,这个要注意。
另外对HTTP的几种方法也有了大致的了解,重点是GET和POST请求,一种是直接请求页面,另一种是可用于提交表单,PUT是在POST基础上可触发多次存储过程。

posted @ 2019-12-03 21:36    阅读(96)  评论(0编辑  收藏  举报