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

相关推荐
望道同学9 小时前
PMP/信息系统项目管理师 9 张 思维导图【考试必备】
前端·后端·程序员
码事漫谈9 小时前
C++11到C++23语法糖万字详解
后端
码事漫谈9 小时前
别人的C#看着难受?可能是你不清楚这些语法糖
后端
第二只羽毛9 小时前
主题爬虫采集主题新闻信息
大数据·爬虫·python·网络爬虫
plmm烟酒僧9 小时前
TensorRT 推理 YOLO Demo 分享 (Python)
开发语言·python·yolo·tensorrt·runtime·推理
天才测试猿9 小时前
Postman中变量的使用详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
+VX:Fegn089510 小时前
计算机毕业设计|基于springboot+vue的学校课程管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
帕巴啦10 小时前
Arcgis计算面要素的面积、周长、宽度、长度及最大直径
python·arcgis
AI小云10 小时前
【数据操作与可视化】Matplotlib绘图-生成其他图表类型
开发语言·python·matplotlib
MediaTea10 小时前
Python 第三方库:plotnine(类 ggplot 的 Python 数据可视化库)
开发语言·python·信息可视化