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

相关推荐
神奇小汤圆几秒前
SpringBoot 4 最被低估的新特性:Spring Data AOT
后端
杨运交1 分钟前
[004][缓存模块]Caffeine缓存自定义:构建灵活的Spring Boot缓存管理器
后端
刀法如飞6 分钟前
一款开箱即用的Flask 3.0 MVC工程脚手架,面向AI开发
后端·python·flask
xingpanvip10 分钟前
星盘接口开发文档:组合三限盘接口指南
android·开发语言·前端·python·php·lua
神奇小汤圆21 分钟前
美团Java一面:布隆过滤器有什么缺点?
后端
Zfox_23 分钟前
【LangChain】核心组件(上)
后端·langchain·ai编程
苏三说技术1 小时前
京东二面:假如SQL中join了10张表,如何优化性能?
后端
vortex51 小时前
Villain:新一代轻量级 C2 框架完整使用指南
python·网络安全·kali·c2
测试员周周1 小时前
【AI测试系统】第5篇:AI 编码工具抛硬币?我们用 LangGraph 做了个“确定性+AI”的测试系统(附自愈架构)
人工智能·python·功能测试·测试工具·架构·langchain·单元测试