初认Flask框架
目录
- Flask框架概述
- 1.Flask的安装及应用
- 1. 安装Flask
- 2. 创建第一个flask应用
- 3. 运行Flask应用
- 2.Flask路由与视图函数
- 1.动态路由
- 2.支持多种http请求方法
- 3.使用Jinja2模板渲染HTML
- 4.模板继承与块
- Flask表单处理与用户输入
- 1.安装Flask-WTF
- 2.创建一个简单表单
Flask框架概述
Flask 作为一个微框架,强调简单性和灵活性。它依赖于两个重要的 Python 库来提供核心功能:
Werkzeug:这是 Flask 的底层库,提供了 WSGI 接口、HTTP 请求和响应处理、路由等核心功能。
Jinja2:一个功能强大的模板引擎,用于动态生成 HTML 页面。
Flask 的设计目的是让开发者能够快速开发应用,并提供了灵活的方式进行扩展。如果你不需要复杂的功能,Flask 的核心本身已经足够满足需求。如果你需要更多高级特性,可以通过 Flask 的扩展库进行补充。
1.Flask的安装及应用
1. 安装Flask
2. 创建第一个flask应用
Flask的应用结构非常简单,只需创建一个 Python 文件,并通过 Flask()类来实例化应用对象。以下是一个最简单的 Flask 应用示例:
代码解析:
Flask(name):创建 Flask应用实例,__name__参数用于 Flask 了解当前模块的名称,通常我们使用这个参数来帮助 Flask 在不同模块间进行配置。
@app.route(‘/’):定义路由和视图函数的映射。'/'是根路径,当用户访问根 URL 时,Flask会调用 hello world()函数。
return’Hello,world!:视图函数返回一个简单的字符串响应,Flask 会将其作为 HTTP 响应返回给客户端。
app.run(debug=True):启动Flask开发服务器,debug=True 表示启用调试模式,这样可以在开发过程中自动重载应用,并在发生错误时显示详细信息。
3. 运行Flask应用
2.Flask路由与视图函数
Flask的核心之一就是路由系统,它将用户访问的 URL 与对应的视图函数相连接。Flask 通过装饰器@app.route()来定义路由,而视图函数则负责处理用户的请求并返回响应。
1.动态路由
Flask支持动态路由参数,可以通过URL中的动态部分来获取数据:
代码解释:
name:这是一个动态路由参数,Flask 会提取 URL 中的 name 部分并将其传递给视图函数
当用户访问/greet/John 时,name 的值将为 John,返回的响应为 Hello,John!。
2.支持多种http请求方法
Flask不仅支持 GET 请求,还支持其他常见的 HTTP 请求方法,如 POST、PUT、DELETE等。你可以通过methods 参数来指定允许的请求方法:
代码解释:
methods=[‘POST’]:只允许 POST 请求访问此路由。如果用户通过 GET 请求访问,Flask 会返回405 Method Not Allowed 错误.
3.使用Jinja2模板渲染HTML
Flask 结合 Jinja2 模板引擎来动态生成 HTML 页面。你可以将 HTML 文件与 Python 代码分离,保持应用结构清晰。在 Flask 中,模板文件默认存放在 templates 文件夹中。
代码解析:
render template(‘greet.html’,name=name):Flask会加载greet.html模板,并将name的值传递给模板。模板中的{{name }}会被替换为传入的值。
4.模板继承与块
Flask 支持模板继承和块(Block)功能,这对于构建复杂页面非常有用。你可以在基础模板中定义通用的布局结构,在子模板中覆盖特定的部分。
父模板:
子模板:
代码解析:
{% extends’base.html’%}:子模板继承了 base.html 模板。
{% block title %}Home{% endblock %}:覆盖父模板中的 title 块。
{% block content %}:定义页面的主要内容区域。
Flask表单处理与用户输入
Flask 可以通过表单来获取用户输入,常见的做法是结合 Flask-WTF 扩展来简化表单处理和验证。
Flask-WTF 为 Flask 提供了一个表单类,你可以在表单类中定义字段和验证规则。
1.安装Flask-WTF
2.创建一个简单表单
代码解析:
FlaskForm:继承自 FlaskForm 类,定义表单字段。
StringField(‘Name’,validators=[DataRequired()]):定义了一个文本输入字段,并且通过 DataRequired()验证器确保字段不能为空。
form.validate on submit():检査表单是否通过验证并被提交。
index.html 模板
代码解析:
{{ form.csrf_token }}:FlasK-WTF 会自动生成并验证 CSRF token,以防止跨站请求伪造攻击。
{{ form.name()}}:这是通过 Jinja2 模板渲染NameForm 表单的字段。form.name()会生成对应的 HTML 标签。
{% if form.name.data %}:如果用户提交了表单并且 name 字段不为空,则显示欢迎信息。
点击submit