【Flask】 路由入门

简介: 【Flask】 路由入门

路由介绍


现代 Web 应用程序使用有意义的 URLs 去帮助用户。


如果一个网站使用有意义的 URL 能够让用户记住并且直接访问这个页面,那么用户会更有可能再一次访问该网站。


正如上面所说,route 装饰器是用于把一个函数绑定到一个 URL 上


接下来我们实现:


  • 访问根目录 ‘/’ ,返回 ’ Root directory’
  • 访问 ‘/hello`' ,返回 '`Hello, World!’
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return 'Index Page'
@app.route('/hello')
def hello():
    return 'Hello, World!'


终端执行

export FLASK_APP=hello.py
export FLASK_ENV=development
flask run

3.png4.png




这样就实现了通过访问不同的 URL 地址从而响应不同的页面。


不仅如此!你可以动态地构造 URL 的特定部分,也可以在一个函数上绑定多个不同的规则。



变量规则

为了给 URL 增加变量的部分,你需要把一些特定的字段标记成 <variable_name> 。


这些特定的字段将作为参数传入到你的函数中,当然也可以指定一个可选的转换器通过规则


<converter:variable_name> 将变量值转换为特定的数据类型。


转换器的主要类型如下:image.png

from flask import Flask
app = Flask(__name__)
# String 类型
@app.route('/user/<username>')
def show_user(username):
    return 'User: {}'.format(username)
# int 类型
@app.route('/page/<int:id>')
def show_page(id):
    return 'Page: {}'.format(id)
# path 类型
@app.route('/path/<path:subpath>')
def show_path(subpath):
    return 'Path: {}'.format(subpath)


唯一URLs/重定向行为

Flask 的 URL 规则是基于 Werkzeug 的 routing 模块


该模块背后的思路是基于 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 去。


当访问 https://xxx/projects/ 时,页面会显示 The project page 。


  • 第二种情况


URL 结尾不带斜线,类似 UNIX-like 系统下的文件的路径名。此时如果访问结尾带斜线的 URL 会产生一个 404 “Not Found” 错误。


当访问 https://xxx/about 时,页面会显示 The about page ;


但是当访问 https://xxx/about/ 时,页面就会报错 Not Found 。


当用户访问页面忘记结尾斜线时,这个行为允许关联的 URL 继续工作,并且与 Apache 和其它的服务器的行为一致,反之则不行,因此在代码的 URL 设置时斜线只可多写不可少写;


另外,URL 会保持唯一,有助于避免搜索引擎索引同一个页面两次。



HTTP方法

HTTP (也就是 Web 应用协议) 有不同的方法来访问 URLs 。


默认情况下,路由只会响应 GET 请求,但是能够通过给 route() 装饰器提供 methods 参数来改变。

from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return "--注册页面--"
    else:
        return "--注册API--"


如果使用 GET 方法,HEAD 方法将会自动添加进来。你不必处理它们。


也能确保 HEAD 请求会按照 HTTP RFC (文档在 HTTP 协议里面描述) 要求来处理,因此你完全可以忽略这部分 HTTP 规范。


同样地,自从 Flask 0.6 后,OPTIONS 方法也能自动为你处理。


HTTP方法(通常也称为“谓词”)告诉服务器客户端想要对请求的页面做什么。


下面这些方法是比较常见的:


  • GET


浏览器通知服务器只获取页面上的信息并且发送回来。这可能是最常用的方法。


  • POST


浏览器通知服务器它要在 URL 上提交一些信息,服务器必须保证数据被存储且只存储一次。这是 HTML 表单通常发送数据到服务器的方法。


  • PUT


同 POST 类似,但是服务器可能触发了多次存储过程,多次覆盖掉旧值。


现在你就会问这有什么用,有许多理由需要如此去做。


考虑下在传输过程中连接丢失:在这种情况下浏览器和服务器之间的系统可能安全地第二次接收请求,而不破坏其它东西。该过程操作 POST 方法是不可能实现的,因为它只会被触发一次。


  • HEAD

浏览器告诉服务器获取信息,但是只对头信息感兴趣,不需要整个页面的内容。


应用应该处理起来像接收到一个 GET 请求但是不传递实际内容。在 Flask 中你完全不需要处理它,底层的 Werkzeug 库会为你处理的。


  • DELETE


移除给定位置的信息。


  • OPTIONS


给客户端提供一个快速的途径来指出这个 URL 支持哪些 HTTP 方法。从 Flask 0.6 开始,自动实现了该功能。


现在在 HTML4 和 XHTML1 中,表单只能以 GET 和 POST 方法来提交到服务器。


在 JavaScript 和以后的 HTML 标准中也能使用其它的方法。


同时,HTTP 最近变得十分流行,浏览器不再是唯一使用 HTTP 的客户端。比如许多版本控制系统使用 HTTP。



案例

1.请开发一个小应用,URL 地址输入https://xxx/name (https://xxx 是点击“Web 服务”自动生成的链接,name 表示你输入的名字),访问页面会显示 name。


from flask import Flask, request
app = Flask(__name__)
@app.route('/<username>')
def show_user(username):
    return username

2.请完成一个应用,当 URL 是https://xxx/sum/a/b时,并且为GET请求时, 其中a和b都是数字,服务器返回它们的和。

from flask import Flask, request
app = Flask(__name__)
@app.route('/sum/<int:a>/<int:b>', methods=['GET', 'POST'])
def show_user(a, b):
    if request.method == 'GET':
        return '{0} + {1} = {2}'.format(a, b, a + b)
    else:
        return 'Please choose GET method to request!'
@app.route('/sum/<int:a>/<int:b>', methods=['GET', 'POST'])
def show_user(a, b):
    if request.method == 'GET':
        return '{0} + {1} = {2}'.format(a, b, a + b)
    else:
        return 'Please choose GET method to request!'
目录
相关文章
|
6月前
|
安全 网络安全 数据安全/隐私保护
Flask 入门系列教程(六)
Flask 入门系列教程(六)
|
6月前
|
关系型数据库 数据库连接 数据库
Flask应用基础入门总结
Flask应用基础入门总结
74 0
|
6月前
|
网络架构 Python
Flask的路由讲解
Flask的路由讲解
65 0
|
5月前
|
Python
Flask三种添加路由的方法
Flask 是一个流行的 Python Web 框架,它提供了多种方法来添加路由。路由是将 URL 映射到特定函数的过程,它是构建 Web 应用程序的基础。本文将介绍 Flask 中几种常用的路由添加方法,并附带代码示例。
70 3
|
25天前
|
前端开发 JavaScript 数据库连接
一、Flask入门介绍
一、Flask入门介绍
37 1
|
5月前
|
API 网络架构 开发者
Flask Web开发基础【路由和Jinja2模板引擎】
# Flask Web开发基础 Flask是轻量级Web框架,专注于核心功能:请求响应、模板渲染和URL路由。本文档介绍了使用Flask的基础知识,包括命令行和Python两种运行模式,以及如何修改入口文件、端口和地址。此外,还讨论了URL路由的概念和其在Flask中的实现,展示了动态路由和多URL绑定的例子。最后,提到了Jinja2模板引擎,解释了其基本语法,并通过电影列表案例展示了如何结合Flask使用模板。
67 1
|
25天前
|
中间件 网络架构 Python
三、Flask基本内容介绍之路由
三、Flask基本内容介绍之路由
22 0
|
2月前
|
Python
Flask路由
现代Web框架使用路由技术来帮助用户记住应用程序URL。 无需从主页导航即可直接访问所需页面。
35 0
|
5月前
|
开发框架 开发者 Python
使用 Flask 为 Web 应用添加路由
通过学习 Flask 中的视图函数和路由规则,你可以使用 Flask 构建强大的 Web 应用程序并为其添加功能。在 Flask 中,视图函数以 Python 函数的形式定义,每个视图函数都与一个 URL 相关联。在 Flask 中,URL 处理程序被称为视图函数,它们用于响应客户端请求并返回响应。在 Flask 应用程序中,这是可选的。在这里,我们将其命名为 'hello',并将其与 URL '/hello/<name>' 绑定在一起。在上面的示例中,我们使用了默认的视图函数名称 'hello'。
48 2
|
6月前
|
数据库连接 Python
Flask 框架入门与实践:构建你的第一个 Web 应用
【5月更文挑战第18天】本文介绍了使用 Flask 框架构建第一个 Web 应用的步骤。首先通过 `pip install Flask` 安装框架,然后编写基本的 Python 代码创建应用,包括定义路由和响应。示例展示如何显示 &quot;Hello, World!&quot;,并扩展到显示用户信息的功能。利用模板(如 `index.html`)可使页面更丰富。随着学习深入,可以利用 Flask 的更多特性,如表单处理和数据库连接,来构建更复杂的 Web 应用。本文旨在激发读者对 Flask 和 Web 开发的兴趣,鼓励不断探索和实践。
135 7