Flask简单入门

news2024/11/26 17:35:08

Flask 是一个使用 Python 编写的轻量级 Web 应用框架。它使用 Werkzeug 作为底层 WSGI 实现,而 Jinja2 则是其默认模板引擎。Flask 的设计简单易用,灵活性高,可以快速构建出完整功能的 Web 应用。
在这里插入图片描述

本文将从 Flask 的基础知识介绍、开发环境配置、路由系统、请求处理、模板引擎、数据库操作、错误处理以及部署等方面来全面探讨 Flask 框架的使用。

Flask 基础知识介绍

Flask 的核心思想是“微”,它的目标是保持简洁明了的代码和易于扩展。Flask 默认情况下并不包含数据库抽象层、表单验证或者其他第三方库,因此可以根据需要使用不同的扩展。

Flask 的主要特点:

  • 轻量级:Flask 不依赖外部库,代码量少。
  • 易用性:Flask 易于使用,学习曲线平缓。
  • 扩展性:Flask 拥有丰富的扩展,可适应各种需求。
  • 灵活性:Flask 可以与 Django、Tornado 等框架相结合。

开发环境配置

使用 Flask 需要先安装好 Python 和 Flask。在安装过程中,建议使用虚拟环境来创建独立的开发环境。

以下是在 Windows 系统下使用 Anaconda 创建虚拟环境并安装 Flask 的示例:

conda create -n myenv python=3.7
conda activate myenv
pip install flask

路由系统

Flask 应用通过定义路由函数响应不同的 URL 请求。路由函数可以通过装饰器 @app.route() 来进行注册。@app.route() 接收一个 URL 规则字符串作为参数,例如 / 或 /index 。URL 中的参数也可以通过 <variable_name> 的方式传入路由函数中。

以下是一个简单的路由函数示例:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello, World!'

上述代码定义了一个名为 home 的路由函数,它将处理网站的主页请求。当访问网站根目录时,home 函数将返回字符串 “Hello, World!” 。

请求处理

Flask 支持 GET、POST、PUT、DELETE 等多种 HTTP 方法,可以通过 request.method 来获取当前请求的方法类型,以便进行相应的处理。

以下是一个根据请求类型返回不同响应的示例:

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'GET':
        return 'This is a GET request.'
    elif request.method == 'POST':
        return 'This is a POST request.'

模板引擎

Flask 默认使用 Jinja2 作为模板引擎。Jinja2 可以使用变量、控制流、过滤器等语法来生成动态 HTML 页面。模板文件一般存放在应用程序的 templates 目录中。

以下是一个简单的 Jinja2 模板示例:

<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ heading }}</h1>
    <p>{{ content }}</p>
</body>
</html>

上述代码定义了一个基本的 HTML 模板,其中 {{ }} 中的表达式将根据传入的参数进行替换。

可以通过 render_template() 函数将模板与数据结合,生成最终的 HTML 页面。例如:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html',title='Flask Tutorial', heading='Welcome to Flask Tutorial', content='This is a simple Flask tutorial.

上述代码将使用 index.html 模板,将参数 title、heading 和 content 插入到 HTML 页面中,并返回最终的页面。

数据库操作

Flask 可以与许多数据库进行交互,包括 MySQL、PostgreSQL 和 SQLite 等。一般来说,可以通过 SQLAlchemy 这个 ORM 框架来与数据库进行交互。SQLAlchemy 提供了面向对象的方式来处理数据库,使得操作更加简单易用。

以下是一个使用 SQLAlchemy 操作 SQLite 数据库的示例:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __repr__(self):
        return '<User %r>' % self.name

上述代码定义了一个名为 User 的模型类,它表示了一个具有 id、name 和 email 字段的用户。当然,在实际应用中,可以根据需要定义不同的模型类。

可以通过执行 db.create_all() 来创建表格,或者直接运行相关的 SQL 语句来创建相应的表格。

错误处理
在开发 Web 应用时,不可避免地会出现各种错误。Flask 提供了默认的错误处理程序,可以处理常见的错误类型。

以下是一个处理 404 错误的示例:

from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(404)
def page_not_found(error):
    return render_template('page_not_found.html'), 404

上述代码定义了一个 errorhandler 装饰器,它将处理 HTTP 404 错误。当应用程序收到 404 请求时,将返回相应的模板页面和状态码 404。

部署应用
在完成开发后,需要将 Flask 应用部署到服务器上以供访问。Flask 可以通过 gunicorn、uwsgi 或者 Apache 等方式进行部署。

以下是使用 gunicorn 部署 Flask 应用的示例:

gunicorn app:app -w 4 -b 0.0.0.0:8000
上述命令将启动一个名为 app 的 Flask 应用,监听 8000 端口,并使用 4 个 worker 处理请求。

总结
本文介绍了 Flask 框架的基础知识、开发环境配置、路由系统、请求处理、模板引擎、数据库操作、错误处理及部署等方面内容。随着网站业务的愈发复杂,我们可以根据需求灵活地选择不同的扩展来完善 Flask 应用,以满足更多的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSD算法的电动车头盔检测【附代码】

本项目是基于SSD算法实现的电动车头盔检测。完整的项目是基于SSD的改进-->知识蒸馏-->自蒸馏-->剪枝-->trt推理。本想用来发论文的&#xff0c;但可能没那时间和精力了&#xff0c;这里仅选择项目中的一部分内容进行开源。 目录 开源说明 项目功能说明 项目代码…

尚硅谷微信小程序开发 仿网易云音乐App 小程序 后端接口服务器搭建

小程序学习 尚硅谷微信小程序开发 项目网易云小程序学习地址&#xff1a; 01-尚硅谷-小程序-课程介绍_哔哩哔哩_bilibili 视频相关的教程文档与笔记分享 链接&#xff1a;https://pan.baidu.com/s/1aq7ks8B3fJ1Wahge17YYUw?pwd7oqm 提取码&#xff1a;7oqm 配套服务器 老师…

还敢说你会接口测试吗?全覆盖接口测试扫描总结(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口的本质及其工…

搭建SpringBoot项目 详细教程

一、搭建SpringBoot项目 这个项目&#xff0c;可以作为种子项目&#xff0c;我打算把它放置Gitee上。包含大部分web开发的相关功能&#xff0c;后期所有的Spring Boot项目都可以用这个项目&#xff0c;简单修改一下配置&#xff0c;就可以快速开发了。 选择Spring initializr…

C51/C52--led流水灯、静态数码管

目录 一、led流水灯&#xff08;flowing water lamp&#xff09; 二、静态数码管 一、led流水灯&#xff08;flowing water lamp&#xff09; 我们在点亮一个led灯的基础上&#xff0c;对8个led灯按照某种特定的点亮规律进行操作&#xff0c;从而形成像水按顺序流动的效果。 …

缓存在高并发场景下的常见问题

缓存一致性问题 当数据时效性要求很高时&#xff0c;需要保证缓存中的数据与数据库中的保持一致&#xff0c;而且需要保证缓存节点和副本中的数据也保持一致&#xff0c;不能出现差异现象。这就比较依赖缓存的过期和更新策略。一般会在数据发生更改的时&#xff0c;主动更新缓…

JMeter性能测试---完整入门到白了少年头

目录 一、性能测试 二、负载/压力/可靠性 三、JMeter工具 四、负载脚本 五、Jmeter参数化 六、远程操作运行脚本 一、性能测试 测试目的&#xff1a; 1.客户有明确要求&#xff0c;如&#xff1a;系统要求同时满足5000个用户登录&#xff0c;平均每个用户登录时间不能超…

体积小纯净无打扰,新版微软电脑管家在教国内做杀软

早在去年初&#xff0c;微软电脑管家就开启了 V1.0 版本内测&#xff0c;咱们也在第一时间替大伙儿体验了一番。 微软电脑管家最初就是专为国内用户推出的&#xff0c;算是真正做到了精简省心&#xff0c;无任何流氓广告弹窗行为。 这与咱们国内各种流氓杀软环境形成了极为鲜明…

IIS 7中添加匿名访问FTP站点

1. 开启FTP和IIS服务&#xff1a; 2.打开IIS 管理器&#xff1a; 我电脑上是IIS 7.5 &#xff0c;所以选择第一个并点击打开哦。 如果你想知道自己IIS的版本&#xff0c;打开帮助菜单&#xff1a; 3. 新建FTP站点&#xff1a; 4. 填写站点基本信息&#xff1a; 5. 设置绑定和S…

Stable diffusion WebUI img2img使用教学

图生图 (img2img) 相较于文生图 (txt2img)&#xff0c;因存在参考图片的基础上创作&#xff0c;其可控性自然更强。下面从图生图的几个应用方向出发&#xff0c;详述其功能特性。 文章目录 推提示词img 重新绘制参考图Resize mode 缩放模式Denoising 重绘幅度 Sketch 绘图Inpai…

集成光子芯片量子器件研究重要进展

前言&#xff1a; 中国科学技术大学郭光灿院士团队在集成光子芯片量子器件的研究中取得重要进展。该团队邹长铃、李明研究组提出人工合成光学非线性过程的通用方法&#xff0c;在集成芯片微腔中实验观测到高效率的合成高阶非线性过程&#xff0c;并展示了其在跨波段量子纠缠光源…

亚马逊云科技中国峰会“创业者之日”,赋能不同领域创业者前行

IDC预测&#xff0c;到2025年全球数据规模将达到175 ZB&#xff0c;这为人工智能模型训练提供了海量数据资源&#xff0c;全球AI产业迅速发展为创业者们带来了巨大的机遇&#xff0c;但也提出了全新的挑战。新的市场、高效的工具和智能的资源&#xff0c;开辟了创新的领域和商业…

23年互联网Java后端面试最全攻略,只花一周时间逼自己快速通关面试

大家从 Boss 直聘上或者其他招聘网站上都可以看到 Java 岗位众多&#xff0c;Java 岗位的招聘薪酬天差地别&#xff0c;人才要求也是五花八门。而很多 Java 工程师求职过程中&#xff0c;也是冷暖自知。很多时候技术有&#xff0c;但是面试的时候就是过不了&#xff01; 为了帮…

JVM存储模型、值传递和引用传递

JVM存储模型、值传递和引用传递 一、首先根据下图理解一下JVM是什么&#xff1f; — Java程序和操作系统之间的桥梁 二、Java数据存储模型 因为栈区、本地方法栈、程序计数器是线程私有的&#xff0c;每一个线程在运行时会单独去创建这样一个内存&#xff0c;所以说有多少个线…

前端18K面试题总览,往这方面准备就对了

Vue面试题 生命周期函数面试题 1.什么是 vue 生命周期2.vue生命周期的作用是什么3.第一次页面加载会触发哪几个钩子4.简述每个周期具体适合哪些场景5.created和mounted的区别6.vue获取数据在哪个周期函数7.请详细说下你对vue生命周期的理解&#xff1f; vue路由面试题 1.mv…

Unity核心2——Sprite

顾名思义&#xff0c;Sprite Editor 就是精灵图片编辑器&#xff0c;它主要用于编辑 2D 游戏开发中使用的 Sprite 精灵图片 ​ 它可以用于编辑&#xff0c;图集中提取元素&#xff0c;设置精灵边框&#xff0c;设置九宫格&#xff0c;设置轴心&#xff08;中心&#xff09;点等…

以色列QM和荷兰QuantWare合作提供预集成控制系统和QPU解决方案

​ &#xff08;图片来源&#xff1a;网络&#xff09; 6月13日&#xff0c;以色列量子计算机操作系统初创公司Quantum Machines&#xff08;QM&#xff09;和荷兰超导量子处理器&#xff08;QPU&#xff09;的领先供应商QuantWare宣布合作&#xff0c;旨在大幅加速研究进展&a…

火爆全网,python自动化测试logging日志模块使用方法(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、日志级别 imp…

3D WEB轻量化引擎工具HOOPS Communicator与Three.js和自主DIY的对比分析

​基于Web的2D和3D可视化已经变得越来越流行&#xff0c;而且市场根据这些变化&#xff0c;为其提供了更丰富的实用性。如果处理得好&#xff0c;开发人员可以使用户以简单、用户友好的方式与其他客户、开发人员或其他任何人共享来自市场的设计。 当开发人员考虑第三方提供这项…

保险业服务模式“智能化”升级

近年来&#xff0c;随着数字时代的多元化发展&#xff0c;人工智能技术凭借其高度便利性&#xff0c;已被广泛拓展应用到各行各业。在AI的加持下&#xff0c;保险行业的发展正处于从“数字化”阶段迈向“智能化”阶段的过渡时期&#xff0c;销售渠道多样、业务量激增以及客户对…