初认Flask框架

目录

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

相关推荐
测试199817 分钟前
2025软件测试面试题汇总(接口测试篇)
自动化测试·软件测试·python·测试工具·面试·职场和发展·接口测试
泯泷17 分钟前
「译」为 Rust 及所有语言优化 WebAssembly
前端·后端·rust
紫薯馍馍40 分钟前
Dify创建 echarts图表 (二)dify+python后端flask实现
前端·flask·echarts·dify
梦想很大很大1 小时前
把业务逻辑写进数据库中:老办法的新思路(以 PostgreSQL 为例)
前端·后端·架构
抽风的雨6101 小时前
【python深度学习】Day53 对抗生成网络
python·深度学习
Android洋芋1 小时前
GitHub开源协作实践:HelloGitHub项目详解与企业级应用实战
后端
程序小武2 小时前
Python 面向对象编程基础-类的创建与__init__实例化
python
Qyee162 小时前
【算法】基于中位数和MAD鲁棒平均值计算算法
python·算法
雨果talk2 小时前
Spring Boot集成Mina的Socket资源管理:从稳定通信到高性能优化
spring boot·后端·性能优化
雨果talk2 小时前
【一文看懂多模块Bean初始化难题】Spring Boot多模块项目中的Bean初始化难题:包名不一致的优雅解决方案
java·spring boot·后端·spring·springboot