当前位置: 首页 > backend >正文

Python初始Flask框架

目录

一,理解Flask框架

2,安装并运行Flask应用

1,创建一个基本的flask应用

2,配置flask动态路由

3,配置flask支持多种http请求方法

二,使用jinja2模板渲染HTML

三,模板继承与快

1,首先定义基础模板base.html

 2,定义子模板indes.html

四,Flask表单处理与用户输入

一,理解Flask框架

Flask 是一个轻量级的 Python Web 应用框架,被归类为 "微框架"(Microframework)。它的核心设计理念是保持简单而灵活,仅提供 Web 开发的基础功能,而不强制使用特定的数据库或模板引擎,允许开发者根据需求自由选择和集成各种扩展,Flask作为一个微框架,特点简单性和灵活性,它依赖于两个重要的Python库来提供核心功能:

  • Werkzeug: 这是 Flask 的底层库,提供了 WSGI 接口、HTTP 请求和响应处理、路由等核心功能
  • Jinja2: 一个功能强大的模板引擎,用于动态生成 HTML 页面。

Flask 的设计目的是让开发者能够快速开发应用,并提供了灵活的方式进行扩展。如果你不需要复杂的功能,Flask 的核心本身已经足够满足需求,Flask的特点及主要用途如下:

1,主要特点

  • 轻量级核心:Flask 的核心代码简洁,不包含 ORM、表单验证等功能,仅保留 Web 服务器网关接口(WSGI)、路由、请求处理等基础组件。
  • 高度可扩展:通过第三方扩展,轻松添加数据库集成、REST API 支持、身份验证等功能。
  • 内置开发服务器:方便开发调试,支持自动重载代码。
  • 模板引擎:默认使用 Jinja2 模板引擎,支持模板继承和丰富的表达式语法。

2,主要用途

  • web应用开发:快速搭建博客、企业网站、内容管理系统等。
  • 原型开发:由于其简洁性,适合快速实现产品原型。
  • 小型项目:对于资源有限或功能简单的项目,Flask 比 Django 等全栈框架更轻量高效。

2,安装并运行Flask应用

直接使用python的包管理工具安装即可:

pip3 install flask

如果安装太慢可以设置,更新镜像源

pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple    
pip3 config set install.trusted-host mirrors.aliyun.com
pip3 install --upgrade pip

1,创建一个基本的flask应用

[root@localhost one]# vim flask1.py
from flask import Flaskapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return 'Hello,World!\n'if __name__ == '__main__': ##创建用户入口app.run(host='0.0.0.0',port=5000,debug=True)[root@localhost one]python3 flask1.py   ##运行脚本,在前台运行
......./省略部分内容* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://192.168.10.101:5000[root@localhost one]# curl 192.168.10.101:5000         ##使用其他终端进行访问验证
Hello,World!

2,配置flask动态路由

flaks支持动态路由参数,可以通过url中的动态部分来获取数据。

from flask import Flaskapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return 'Hello,World!\n'@app.route('/greet/<name>')           ##可以在flask框架中添加部分内容
def greet(name):return f'ni hao,<name>\n'[root@localhost one]# curl 192.168.10.101:6000/greet/lisi       ##greet后面的内容就相当于一个变量,它的值为用户决定。
ni hao,lisi
[root@localhost one]# curl 192.168.10.101:6000
Hello,World!

3,配置flask支持多种http请求方法

^C[root@localhost ~]# cat flask2.py 
from flask import Flaskapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return 'Hello,World!\n'@app.route('/greet/<name>')
def greet(name):return f'ni hao,{name}\n'@app.route('/submit',methods=['POST'])    ##在flask继续添加此部分,当用户请求方法不为POST则拒绝
def submit():return '提交成功\n'

验证

[root@localhost ~]# curl 192.168.10.101:6000/submit      ##默认请求方法不为POST则访问不成功
<!doctype html>
<html lang=en>
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>[root@localhost ~]# curl -X POST 192.168.10.101:6000/submit    ##-X指定POST请求方法可以访问到
提交成功

二,使用jinja2模板渲染HTML

Flask 结合 Jinja2 模板引擎来动态生成 HTML 页面。你可以将 HTML 文件与 Python 代码分离,保持应用结构清晰。在 Flask 中,模板文件默认存放在 templates 文件夹中

[root@localhost ~]# mkdir templates   ##创建存放模板文件的目录,注意:一定要与flask文件同级目录
[root@localhost templates]# cat greet.html 
<html>
<head>
<meta charset="UTF=8">
<title>ni hao1</title>
</head><body>
<h1>hello,{{ name }}</h1>
</body></html>##修改flask.py文件为以下部分
[root@localhost templates]# vim /root/flask1.py 
from flask import Flask,render_templateapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return render_template('greet.html')@app.route('/greet/<name>')
def greet(name):return render_template('greet.html',name=name)##render_template('greet.html',name=name):Flask会加载greet.html模板,并将name的值传递给模板,flask文件中的{{ name }}会被替换传入的值

验证,greet后面内容输入什么则会输出什么

三,模板继承与快

Flask 支持模板继承和块(Block)功能,这对于构建复杂页面非常有用。你可以在基础模板中定义通用的布局结构,在子模板中覆盖特定的部分。

1,定义基础模板base.html

[root@localhost templates]# cat base.html        ##在templates中编辑base.html文件
<html>
<head>
<meta charset="UTF=8">
<title>
{% block title %}My website{% endblock %}</title>
</head><body>
<header>
<h1>欢迎来到我的网页</h1>                     ##此部分为访问时显示的内容
</header><div>
{% block content %}{% endblock %}
</div>
</body>
</html>from flask import Flask,render_templateapp=Flask(__name__)@app.route('/')
def hello_world():##定义站点名称return render_template('base.html')         ##只需将render_template()括号中的部分改为base。html即可访问

验证

 2,定义子模板indes.html

[root@localhost templates]# cat index.html 
{% extends 'base.html' %}{% block title %}zhangsan{% endblock %}{% block content %}<h1>ni hao lisi</h1>{% endblock %}##{% extends'base.htm1'%}:子模板继承了 base.html 模板
##{% block title %}Home{% endblock %}:覆盖父模板中的 title 块。
##{% block content %}:定义页面的主要内容区域。
##<h1>ni hao lisi</h1>:<h1></h1>中间的内容为显示到网页的内容

所谓的title快就是访问网页中以下部分的内容

验证:访问的时候基础模板的内容并不被替换掉

四,Flask表单处理与用户输入

pip3 install flask-wtf        #安装处理表单工具

1,创建一个简单的表单

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired          ##from部分主要作用:导入必要的库和模块app = Flask(__name__)
app.secret_key = 's3cr3t'                    ##创建 Flask 应用实例并设置密钥class NameForm(FlaskForm):    ##创建一个名为 NameForm 的表单类,包含一个名为 name 的文本字段name = StringField('Name', validators=[DataRequired()])@app.route('/', methods=['GET', 'POST'])    ##路由处理 GET 和 POST 请求
def index():form = NameForm()if form.validate_on_submit():return f'Hello, {form.name.data}!'return render_template('index.html', form=form)if __name__ == '__main__':#app.run(debug=True) app.run(host='0.0.0.0', port=5000, debug=True)   ##应用在本地服务器的 5000 端口运行

2,创建index.hmlt模块

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">           ##定义字符集为UTF-8,防止用户访问乱码<title>Flask Form</title>
</head>
<body><h1>Enter your name:</h1><form method="POST">                ##指定表单数据将通过 HTTP POST 方法提交{{ form.csrf_token }}           ##生成 CSRF保护令牌<label for="name">Name:</label> {{ form.name() }}<br><br>           ##渲染 WTForms 中定义的 name 字段<button type="submit">Submit</button></form>##Jinja2 模板语言的条件语句,如果用户提交了表单并且name字段并未空,则显示欢迎信息{% if form.name.data %}              <h2>Hello, {{ form.name.data }}!</h2>{% endif %}
</body>
</html>

3,验证

http://www.xdnf.cn/news/8520.html

相关文章:

  • 敦煌网测评从环境搭建到风控应对,精细化运营打造安全测评体系
  • 【自定义类型-结构体】--结构体类型,结构体变量的创建和初始化,结构体内存对齐,结构体传参,结构体实现位段
  • ComfyUI Chroma解锁文生图新维度;OpenMathReasoning数学推理数据集,首个专注数学推理的高质量数据集
  • 深入探索 CSS 中的伪类:从基础到实战​
  • 文件目录名称无效?数据恢复全流程与常见问题解析
  • CMA/CNAS认证电子签章审计追踪 质检 LIMS 系统应用要点
  • 电子电路:什么是滤波器,什么优势高通滤波器?
  • Cookie、Session、JWT
  • 吃出 “颈” 松:痉挛性斜颈的饮食调养之道
  • Redis从入门到实战 - 原理篇
  • lua脚本实战—— Redis并发原子性陷阱
  • I-CON: A UNIFYING FRAMEWORK FOR REPRESENTATION LEARNING
  • 从Android开发聊技术
  • Python打卡5.23(day24)
  • 【和春笋一起学C++】(十五)字符串作为函数参数
  • 快速开发平台如何选择?技术选型避坑指南与实践洞察
  • el-select中自定义 两组el-option,但是key不一样,并且点击需获取当前整个项的所有属性
  • 前端地图数据格式标准及应用
  • 基于若依的人脸识别(2)——后端实现步骤
  • 开源工具自建AI大模型底座:打造你的专属智能助理
  • GPU训练和call方法
  • 2025电工杯数学建模竞赛A题 问题2 建立基于历史功率的光伏电站日前发电功率预测模型(线性回归,随机森林,SVR模型,集成模型)- 完整代码与结果
  • Linux 进程控制总结
  • 香港维尔利健康科技集团全面推进AI医疗落地,构建智慧健康管理新模式
  • Claude 4 发布:编码 AI 新纪元的开启
  • 人工智能100问☞第30问:什么是损失函数?
  • Express 框架
  • YOLOv12 目标检测算法深度解析
  • 热点│衰老过程中的表观遗传调控
  • 机器学习数学基础