python信息技术实践之六Flask WEB框架

举报
tea_year 发表于 2024/06/20 15:48:46 2024/06/20
【摘要】 Flask是一个使用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展,使得开发者可以快速搭建基本的Web应用,同时也能够构建复杂的系统。本篇文章将引导初学者了解Flask的安装、基础用法、进阶技巧以及如何处理异常。Flask的安装安装Flask非常简单,可以通过Python的包管理工具pip来完成。打开命令行工具,输入以下命令:pip install Flask如果你使用的是...

Flask是一个使用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展,使得开发者可以快速搭建基本的Web应用,同时也能够构建复杂的系统。本篇文章将引导初学者了解Flask的安装、基础用法、进阶技巧以及如何处理异常。

Flask的安装

安装Flask非常简单,可以通过Python的包管理工具pip来完成。打开命令行工具,输入以下命令:

pip install Flask

如果你使用的是Python 3,则可能需要使用pip3来确保安装的是Python 3版本的Flask。

创建第一个Flask应用

创建一个基本的Flask应用只需要几行代码。下面是一个简单的示例:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello, Flask!'

这段代码创建了一个名为app的Flask实例,并定义了一个路由/,当用户访问根目录时,会返回一个简单的字符串Hello, Flask!

运行这个应用,可以使用以下命令:

flask run

这将启动一个开发服务器,通常可以在http://127.0.0.1:5000/访问你的应用。

那么,这些代码是什么意思呢?

  1. 首先我们导入了 Flask 类。 该类的实例将会成为我们的 WSGI 应用。

  2. 接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用 一个单一模块(就像本例),那么应当使用 __name__ ,因为名称会根据这个 模块是按应用方式使用还是作为一个模块导入而发生变化(可能是 ‘__main__’ , 也可能是实际导入的名称)。这个参数是必需的,这样 Flask 才能知道在哪里可以 找到模板和静态文件等东西。更多内容详见 Flask 文档。

  3. 然后我们使用 route() 装饰器来告诉 Flask 触发函数的 URL 。

  4. 函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息。

Flask的常用接口

Flask提供了许多接口来处理Web请求。下面是一些基础但非常有用的接口。

路由

路由是URL到Python函数的映射。在Flask中,使用@app.route()装饰器来定义路由。

@app.route('/hello')
def hello_world():
    return 'Hello, World!'

上面的代码定义了一个路由/hello,当访问这个URL时,会调用hello_world()函数。

处理表单数据

Flask可以很容易地处理表单提交的数据。假设你有一个简单的HTML表单,用户可以输入他们的姓名:

<form method="post" action="/greet">
    <input type="text" name="name">
    <input type="submit" value="Greet">
</form>

在Flask中,你可以这样获取表单数据:

from flask import request

@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    return 'Hello, {}!'.format(name)

错误处理

在Web应用中,错误处理是非常重要的。Flask允许你自定义错误页面。

@app.errorhandler(404)
def page_not_found(e):
    return 'This page does not exist.', 404

这段代码定义了当用户访问不存在的页面时,会显示自定义的404错误页面。

唯一的 URL / 重定向行为

以下两条规则的不同之处在于是否使用尾部的斜杠。:

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

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

projects 的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。

about 的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。

URL 构建

url_for() 函数用于构建指定函数的 URL。它把函数名称作为第一个 参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。

为什么不在把 URL 写死在模板中,而要使用反转函数 url_for() 动态构建?

  1. 反转通常比硬编码 URL 的描述性更好。

  2. 你可以只在一个地方改变 URL ,而不用到处乱找。

  3. URL 创建会为你处理特殊字符的转义和 Unicode 数据,比较直观。

  4. 生产的路径总是绝对路径,可以避免相对路径产生副作用。

  5. 如果你的应用是放在 URL 根路径之外的地方(如在 /myapplication 中,不在 / 中), url_for() 会为你妥善处理。

例如,这里我们使用 test_request_context() 方法来尝试使用 url_for()test_request_context() 告诉 Flask 正在处理一个请求,而实际上也许我们正处在交互 Python shell 之中, 并没有真正的请求。

from flask import Flask, url_for
from markupsafe import escape

app = Flask(__name__)

@app.route('/')
def index():
    return 'index'

@app.route('/login')
def login():
    return 'login'

@app.route('/user/<username>')
def profile(username):
    return '{}\'s profile'.format(escape(username))

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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。