初认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

相关推荐
喵手12 分钟前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手20 分钟前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集
熊猫_豆豆25 分钟前
YOLOP车道检测
人工智能·python·算法
rannn_11126 分钟前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
nimadan1226 分钟前
**热门短剧小说扫榜工具2025推荐,精准捕捉爆款趋势与流量
人工智能·python
默默前行的虫虫31 分钟前
MQTT.fx实际操作
python
短剑重铸之日36 分钟前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
YMWM_41 分钟前
python3继承使用
开发语言·python
JMchen12341 分钟前
AI编程与软件工程的学科融合:构建新一代智能驱动开发方法学
驱动开发·python·软件工程·ai编程
亓才孓1 小时前
[Class类的应用]反射的理解
开发语言·python