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

初始Flask框架

一 Flask框架概述

Flask 作为一个微框架,强调简单性和灵活性。它依赖于两个重要的Python库来提供核心功能:

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

Flask的设计目的是让开发者能够快速开发应用,并提供了灵活的方式进行扩展。如果你不需要复的功能,Flask的核心本身已经足够满足需求。如果你需要更多高级特性,可以通过Flask的扩展库进行充。

1.1安装Flask

安装Flask非常简单,只需要使用python的包管理工具pip2即可1..1.1.1.

pip3 install flask

1.2 创建你的第一个Flask 应用

Flask的应用结构非常简单,只需创建一个Python文件,并通过Flask()类来实例化应用对象。以下是一个最简单的Flask应用示例:

from flask import Flaskapp = Flask( name@app.route('/')def hello_world():return 'Hello, World!'if__name__ =='__main__':app.run(debug=True)

代码解释

Flask(_name_):创建Flask应用实例,

_name_参数用于Flask了解当前模块的名称,通
常我们使用这个参数来帮助Flask在不同模块间进行配置

@app.route('/'):定义路由和视图函数的映射。‘/'是根路径,当用户访问根URL时,Flask
会调用hello_world()函数
return 'Hello,World!':视图函数返回一个简单的字符串响应,Flask会将其作为HTTP响应
返回给客户端。
app.run(debug=True):启动Flask开发服务器,debug=True表示启用调试模式,这样可以在
开发过程中自动重载应用,并在发生错误时显示详细信息

1.3 运行Flask应用

保存上述代码为app.py,然后在命令行中运行:

python app.py

这时 Flask 会启动一个开发服务器,默认会监听127.0.0.1:5000。打开浏览器,http://127.0.0.1:5000/,你会看到“Hello,World!”的页面。

2. Flask 路由与视图函数

Flask的核心之一就是路由系统,它将用户访问的URL与对应的视图函数相连接。Flask通过装饰@app.route()来定义路由,而视图函数则负责处理用户的请求并返回响应。

2.1 动态路由

Flask 支持动态路由参数,可以通过URL中的动态部分来获取数据。以下是一个示例:

@app.route('/greet/<name>')def greet(name):return f'Hello, {name}!'

代码解释

><name>:这是一个动态路由参数,Flask会提取URL中的name部分并将其传递给视图函数。
> 当用户访问/greet/John时,name的值将为John,返回的响应为Hello,John!。
 2.2支持多种 HTTP 请求方法

Flask 不仅支持GET请求,还支持其他常见的HTTP请求方法,如POST、PUT、DELETE等。你可通过methods 参数来指定允许的请求方法:

@app.route('/submit', methods=['POST'])def submit():return'Form submitted successfully!'

代码解释

methods=['POST']:只允许POST请求访问此路由。如果用户通过GET请求访问,Flask会返回405 Method Not Allowed 错误。

2.3使用jinjia2模块渲染HTML

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

假设我们有一个名为greet.html的模板文件,内容如下:

<head><meta charset="UTF-8"><title>Flask Example</title></head><body><h1>Hello, {{ name }} !< /h1></body></html>

在Flask应用中,我们可以通过render_template函数渲染模板并传递动态数据:

from flask import render_template@app.route('/greet/<name>')def greet(name):return render_template('greet.html', name=name)

代码解释

render_template('greet.html', name=name):Flask会加载greet.html模板,并将name的值传递给模板。模板中的{{name}}会被替换为传入的值。

2.4模板继承与块

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

基础模板 base.html:

<! DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>{% block title %}My Website{% endblock %}</title></head><body><header><h1>Welcome to My Website</h1></header><div>{% block content %}{% endblock %}</div>
<footer><p>&copy; 2025 My Website</p></footer></body></html>

子模板 index.html:

{% extends 'base.html' %}{% block title %}Home{% endblock %}
{% block content %}
<h2>Welcome to the homepage !< /h2>{% endblock %}

代码解释>

> {% extends 'base.html'%}:子模板继承了base.html模板。
> {% block title %}Home{% endblock %}:覆盖父模板中的title块。
> {% block content %}:定义页面的主要内容区域。

3.Flask表单处理与用户输入

Flask 可以通过表单来获取用户输入,常见的做法是结合Flask-WTF扩展来简化表单处理和验证。
Flask-WTF为Flask提供了一个表单类,你可以在表单类中定义字段和验证规则。

3.1 安装Flask-WTF

pip3 install flask-wtf

3.2创建一个简单的表单

from flask import Flask, render_template, requestfrom flask_wtf import FlaskFormfrom wtforms import StringFieldfrom wtforms.validators import DataRequiredapp = Flask(_nameapp.secret_key = 's3cr3t'class NameForm(FlaskForm):name = StringField('Name', validators=[DataRequired()])@app.route('/', methods=['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)

代码解释

> FlaskForm:继承自FlaskForm类,定义表单字段。
> StringField('Name', validators=[DataRequired()]):定义了一个文本输入字段,并且通
过DataRequired()验证器确保字段不能为空
>form.validate_on_submit():检查表单是否通过验证并被提交。

index.html 模板:

<! DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Flask Form</title></head><body><h1>Enter your name :< /h1><form method="POST">{{ form.csrf_token }}<label for="name">Name :< /label>{{ form.name() }}<br><br><button type="submit">Submit</button></form>
{% if form.name.data %}<h2>Hello, {{ form.name.data }}! </h2>{% endif %}/body>/html>

代码解释

>{{form.csrf_token }}:Flask-WTF会自动生成并验证CSRF token,以防止跨站请求伪造攻
击。
>{{form.name()}}:这是通过Jinja2模板渲染NameForm表单的字段。form.name()会生成
对应的HTML标签。
> {% if form.name.data %}:如果用户提交了表单并且name字段不为空,则显示欢迎信息。

3.3表单验证

Flask 表单处理的强大之处在于它的验证机制。通过wtforms,你可以非常方便地为表单字段添加种验证规则。比如,除了DataRequired(),你还可以使用:

>Length(min=2,max=50):验证输入的长度。
>Email():验证输入是否是有效的邮箱地址。
>EqualTo('password'):验证两个字段的值是否相等。

4.Flask的项目结构与部署

4.1 项目结构

随着应用的复杂度增加,Flask应用的结构通常会发生变化。一个典型的Flask项目结构如下:

>/templates:存放所有HTML模板文件
>/static:存放静态文件(如CSS、JS、图片等)。
>_init _· py:初始化Flask应用。
>routes.py:定义所有路由和视图函数。
> forms.py:定义表单类。

4.2 部署Flask应用

Flask 应用的开发环境通常使用Flask run启动,但在生产环境中,我们需要通过更强大的Web服务器进行部署,常见的有:

Gunicorn:一个Python WSGI HTTP服务器,常用于生产环境部署。
Nginx:作为反向代理,前端处理静态文件请求,转发动态请求到Flask应用。

部署时,可以通过以下命令启动Flask应用:

gunicorn -w 4 run:app

这将启动一个4工作线程的Gunicorn服务器,run是指向Flask应用实例的模块。

相关文章:

  • 力扣509题:斐波那契数列的解法与代码注释
  • leetcode hot100刷题日记——12.反转链表
  • 使用Python在PyCharm中进行交通工程数据分析的完整流程,包括数据清洗、挖掘、关联、可视化和应用整合等各个阶段
  • 视觉语言模型(Vision-Language Model, VLM)的简单介绍
  • 设计模式-结构型模式(详解)
  • 粗糙表面生成程序及模拟方法
  • docker部署并测试翻译模型-CSANMT连续语义增强机器翻译
  • 典型城市工况数据(Drive Cycle)用于车辆仿真
  • 用算法实现 用统计的方式实现 用自然语言处理的方法实现 用大模型实现 专利精益化统计分析
  • 网络学习-TCP协议(七)
  • 深度解析:SQLynx 如何筑牢数据库安全防线​
  • 敦煌网测评从环境搭建到风控应对,精细化运营打造安全测评体系
  • 使用 GPUStack 纳管摩尔线程 GPU 进行大语言模型和文生图模型的推理
  • 相同,对称,平衡,右视图(二叉树)
  • 全国青少年信息素养大赛-python编程—省赛真题—卡牌游戏
  • 国产高云FPGA实现MIPI视频解码+图像缩放,基于OV5647摄像头,提供Gowin工程源码和技术支持
  • LVS + Keepalived + Nginx 高可用负载均衡系统实验
  • 学习黑客 tcpdump
  • 如何在UI设计中更好地平衡美学与功能性?
  • IP-guard发布新版本4.87.2241.0
  • 怎样用java 做网站/百度推广排名怎么做的
  • wordpress8小时前/seo外链论坛
  • 营销型网站的建设/北京百度科技有限公司电话
  • 做网站公司汉狮团队/百度seo关键词优化电话
  • 邢台规划局网站建设/电脑培训机构哪个好
  • 做电影网站被抓/饥饿营销的十大案例