Python Flask入门到精通:详细教程和实战案例

前言

Flask是一个轻量级的Web框架,用于快速开发Web应用程序。它的设计理念是简洁、灵活和易于扩展,非常适合于从简单的单页应用到复杂的大型项目。通过Flask,可以创建各种Web应用程序,比如博客、电子商务网站、RESTful API等。

保姆级别 项目体验 Demo 地址:
https://github.com/couragesteak/flask_frame_demo

1 安裝

1.1 Flask

Flask==3.0.2
Flask-Cors==4.0.1

测试环境 Python3.10.9

1.2 MySQL 数据库

ubuntu

sudo apt-get install libmysqlclient-dev

centos

yum install -y mysql-devel gcc gcc-devel python-devel
pip install flask-mysqldb -i https://pypi.douban.com/simple

否则报错 没有包 MySqldb

2 基础案例 与 蓝图

原创:有勇气的牛排

https://www.couragesteak.com/article/457

2.1 蓝图

蓝图(Blueprint)是一个用于组织和管理应用程序的强大工具。它可以使程序拆分的更小、更模块化,从而提高代码的可扩展性。

  • 模块化开发
  • 提高代码复用
  • 简化路由管理,不至于过于庞大
  • 团队协作,不同人维护不同块

2.2 案例

main.py

from flask import Flask
from flask import render_template
from flask import request
from flask_cors import CORS
import osapp = Flask(__name__,template_folder='template', # 定义html文件位置static_url_path='/',		# 定义静态资源路由路径static_folder='resource'    # 定义静态资源文件夹
)# app.config['SECRET_KEY'] = os.urandom(24)  # 生成随机数种子,用于产生SessionID
app.secret_key = os.urandom(24)  # 用于加密会话数据# 允许跨域请求
CORS(app, supports_credentials=True)# 导入蓝图
from src.main.controller.index import index
app.register_blueprint(index)# 定义全局拦截器,实现自动登录
@app.before_request
def before():url = request.pathprint(url)# 路由 白名单pass_list = ['/', '/login', '/logout', '/vcode', '/ecode', '/register']if url in pass_list or url.endswith('.js')passelse:print('路由不在白名单 需要登录')username = request.cookies.get('username')password = request.cookies.get('password')print(username, password)if __name__ == '__main__':app.run(host='0.0.0.0', port=8081, debug=True)

蓝图 index.py

from flask import Blueprint, render_template
index = Blueprint('index', __name__)# http://127.0.0.1:8081
@index.route('/')
def home():res = dict(name="有勇氣的牛排")return render_template('index.html', result=res)

3 获取参数 GET、POST

# 参数测试
# http://127.0.0.1:8081/param_test
@m_test.route('/param_test', methods=['GET', 'POST'])
def param_test():# 获取当前请求的方法类型method = request.methoddata = dict(nickname="有勇氣的牛排",url="https://www.couragesteak.com/",)# 根据不同的请求方法获取参数if method == 'GET':# 从GET请求中获取参数id = request.args.get('id', None)data['id'] = idreturn render_template('test_param.html', data=data)elif method == 'POST':# 从POST请求中获取参数id = request.form.get('id', None)data['id'] = idelse:param = 'No valid method'return jsonify(data)

4 重定向

# 重定向 路由
# http://127.0.0.1:8081/redirect_with_param
@m_test.route('/redirect_with_param')
def redirect_with_param():result = dict(name="有勇氣的牛排")# return redirect(url_for('param_test'))return redirect('/')

5 模板

这里使用render_template,也可以使用其他模板,比如 Jinja2

py

# http://127.0.0.1:8081
@index.route('/')
def home():res = dict(name="有勇氣的牛排")return render_template('index.html', result=res)

html模板

<div><div><a href="/">首頁</a><a href="/login">登錄</a><a href="/param_test">參數測試</a><a href="/logout">退出登錄</a><a href="/js/jquery-3.4.1.min.js">打開靜態文件</a><a href="/redirect_with_param">重定向測試</a></div>首頁: {{ result.name }}
</div>

flask render_template模板

6 报错路由 404/500

# 定义404错误页面
@app.errorhandler(404)
def not_found(e):return render_template('error_404.html')# 定义500错误页面
@app.errorhandler(500)
def internal_error():return render_template('error_500.html')

详细文档:

https://dormousehole.readthedocs.io/en/latest/quickstart.html

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

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

相关文章

紫霞仙子和至尊宝的对白

背景介绍 至尊宝和紫霞仙子是电影《大话西游》中的人物。该电影讲述了至尊宝放弃戴上金箍成为盖世英雄&#xff0c;选择当一个凡人&#xff0c;与‌紫霞仙子长相厮守的故事。这部电影通过奇幻、冒险、喜剧和悲剧的元素&#xff0c;展现了一段跨越时空的爱情故事&#xff0c;充…

ODBC+FreeTDS从Linux访问Windows SqlServer数据库

提示 \color{red}{提示} 提示&#xff1a; 《Linux系统上编译安装FreeTDS库文件》中讲述了如何编译FreeTDS源码&#xff0c;并安装。 本文部分内容会在上述文章的基础上深入。 本文内容所使用的环境 Windows系统&#xff1a;Windows 10 企业版 64位操作系统&#xff1b;IP&a…

WordPress主题追格企业官网主题免费开源版V1.1.6

追格企业官网主题免费开源版由追格开发的一款开源wordpress主题&#xff0c;专为企业建站和追格企业官网小程序&#xff08;开源版&#xff09;PC配套而设计&#xff0c;功能集新闻动态、留言反馈、产品与服务、公司简介、联系我们等模块。

如何通过集成软件授权管理系统推动企业业务增长?

软件货币化已经成为许多企业商业成功的关键&#xff0c;随着全球数字化进程不断深入&#xff0c;其重要性也在不断增加。将许可解决方案优化集成到现有系统中&#xff0c;已成为从接收到订单到交付和激活许可的任何高效流程的基本要素。 软件货币化无处不在 无论是传统的软件企…

Vulnhub系列:Kioptix Level 1

1.环境配置 ifconfig kali机&#xff1a;192.168.26.128&#xff08;不同kali机不同ip&#xff09; 靶机&#xff1a;桥接 特别说明&#xff1a;有的小伙伴在打开虚拟机后&#xff0c;无法获取到靶机IP地址 这里特别说明&#xff1a;修改“Kioptix Level 1.vmx”配置文件中…

自动驾驶-机器人-slam-定位面经和面试知识系列03之C++STL面试题(01)

这两天有点忙耽搁了&#xff0c;抱歉&#xff01;&#xff01;&#xff01; 这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。…

探索PyMuPDF:Python中的强大PDF处理库

探索PyMuPDF&#xff1a;Python中的强大PDF处理库 背景&#xff1a;为何选择PyMuPDF 在数字化时代&#xff0c;PDF文件因其跨平台的兼容性和对格式的严格保持而成为文档交换的通用格式。然而&#xff0c;处理PDF文件往往需要专门的工具或库。这就是PyMuPDF库的用武之地。PyMuP…

模方单体化功能联动3DMax能支持2018版本以上的3DMax吗?

答&#xff1a;目前还不支持&#xff0c;仅支持2018版本的 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能&#xff0c;支持一键自动提取房屋结构&#xff0c;平…

【Python selenium过极验滑块】用自动化selenium 操作GEETEST极验滑块,简单粗暴

文章日期&#xff1a;2024.07.24 使用工具&#xff1a;Python 文章类型&#xff1a;自动化过极验滑块 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&…

Python自动化测试之Selenium各浏览器驱动下载网址

在自动化测试领域&#xff0c;Selenium无疑是一个不可或缺的工具。它允许开发者编写脚本来模拟用户在浏览器中的操作&#xff0c;从而进行自动化测试。然而&#xff0c;为了使用Selenium控制不同的浏览器&#xff0c;我们需要安装相应的浏览器驱动&#xff08;WebDriver&#x…

企业利用AI智能名片S2B2C商城小程序参与社区团购的风险与机遇分析

摘要 在新零售浪潮的推动下&#xff0c;社区团购以其独特的商业模式迅速崛起&#xff0c;成为连接消费者与供应商的重要桥梁。企业纷纷探索如何有效利用这一新兴渠道&#xff0c;以扩大市场份额、提升品牌影响力。AI智能名片S2B2C商城小程序的引入&#xff0c;为企业参与社区团…

【Rust光年纪】从图形API到虚拟现实:Rust语言开发库全面解析

打造虚拟世界&#xff1a;Rust语言虚拟现实库全攻略 前言 随着虚拟现实技术的不断发展&#xff0c;越来越多的开发者开始关注使用Rust语言进行虚拟现实开发。本文将对几个用于Rust语言的虚拟现实开发库进行介绍和比较&#xff0c;帮助读者了解它们的核心功能、使用场景、安装…

什么是服务器带宽

什么是服务器带宽 服务器带宽是有线或无线网络通信链路在给定时间内通过计算机网络或互联网连接将最大数据量从一个点传输到另一个点的容量。简单来说&#xff0c;带宽指的是可以通过计算机网络或Internet连接一次发送的数据量。具体来说&#xff0c;带宽越大&#xff0c;服务器…

maven archetype

1.简介 maven脚手架是为了创建一个项目模板&#xff0c;以后新建项目都能够复用该模板 maven中模板引擎使用的是velocity,在文件中可以使用它的语法获取变量等操作 2.实现 单模块脚手架实现 pom.xml <?xml version"1.0" encoding"UTF-8"?> &…

windows下实现mongodb备份还原

添加环境变量 把mongodb安装目录下的bin路径添加到环境变量的path路径: 备份库 打开CMD&#xff0c;执行以下命令&#xff1a; mongodump -u test -p test -d test -o D://backup_mongodb//20220706 –gzip 参数说明&#xff1a; -u 用户名 -p 密码 -d 需要备份的库名称…

Spring踩坑:抽象类作为父类,使用子类@Autowired属性进行填充,属性值为null

Spring踩坑&#xff1a;抽象类作为父类&#xff0c;使用子类Autowired属性进行填充&#xff0c;属性值为null Spring Boot中抽象类和依赖注入的最佳实践引言在抽象类中使用Autowired注解protected vs private修饰符低版本Spring Boot的注意事项 构造器中的依赖注入陷阱为什么不…

MongoDB教程(二十一):MongoDB大文件存储GridFS

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、GridFS…

学习笔记(数据结构:链表 栈)3

fun为回调函数由主函数决定 栈: 栈是限定仅在表尾进行插入和删除操作的线性表。 先进后出、后进先出 栈顶:允许操作的一端 栈底:不允许操作的一端 入栈&#xff0c;出栈。 顺序栈 链式栈 1.创建 CreateSeqStack 2.销毁 DestroySeqStack 3.判断是否为空栈 IsEm…

AD7606采集控制

过采样&#xff1a;其效果就是在ADC之后增加数字滤波器的功能

观测云加入华为云「新加坡云联盟」,引领亚太创新潮流

7月19日&#xff0c;「新加坡云联盟」在华为云新加坡峰会2024上正式宣告成立。这一创新的联合不仅是新加坡乃至整个亚太地区云服务领域的重要里程碑&#xff0c;更是全球数字化转型进程中的关键一步。 观测云作为联盟的首批成员之一&#xff0c;在成立仪式上精彩亮相&#xff0…