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.rhkb.cn/news/383218.html

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

相关文章

Unity3d打包到Android

本文参考&#xff1a; Unity3D新手教程&#xff1a;如何打包发布到Android_哔哩哔哩_bilibili 一、Unity 打包Android的环境搭建 1、工具安装 Unity Hub已经集成了Android的环境搭建。 选择Add modules 然后安装Android Build Support下的所有工具。 如果各个工具都安装成功…

H3CNE(路由基础、直连路由与静态路由)

目录 6.1 直连路由 6.2 静态路由理解性实验 6.2.1 配置直连路由 6.2.2 配置静态路由 6.3 路由表的参数与比较 6.3.1 优先级的比较 6.3.2 开销的比较 6.4 路由器中的等价路由、浮动路由、默认路由 6.4.1 等价路由 6.4.2 浮动路由 6.4.3 默认路由(缺省路由) 6.1 直连路…

银河麒麟服务器V10 SP3 安装人大金仓V009R001C001B0030

原文链接&#xff1a;银河麒麟服务器V10 SP3 安装人大金仓V009R001C001B0030 Hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇关于在银河麒麟服务器V10 SP3上安装人大金仓V009R001C001B0030的文章。人大金仓是国内知名的数据库管理系统&#xff0c;它在高性能、高可靠…

【MySQL进阶之路 | 高级篇】范式概述与第一范式

1. 范式简介 在关系型数据库中&#xff0c;关于数据表的设计的基本原则&#xff0c;规则就称为范式。可以理解为&#xff0c;一张数据表的设计结果需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 范式的英文名是Normal …

C++树形结构(1 基础)

目录 一.基础&#xff1a; 1.概念&#xff1a; 2.定义&#xff1a; Ⅰ.树的相关基础术语&#xff1a; Ⅱ.树的层次&#xff1a; 3.树的性质&#xff1a; 二.存储思路&#xff1a; 1.结构体存储&#xff1a; 2.数组存储&#xff1a; 三.树的遍历模板&#xff1a; 四.信…

【SQL语句大全(MySQL)】

SQL语法 添加删除修改查询基本查询条件查询分组函数/聚合函数分组查询排序分页查询&#xff08;限制查询&#xff09;多表查询连接查询根据年代分类连接查询根据连接方式分类1、内连接2、左外连接3、右外连接 多张表连接的语法格式 嵌套查询 SQL语句书写顺序 添加 INSERT INTO…

深入浅出WebRTC—ULPFEC

FEC 通过在发送端添加额外的冗余信息&#xff0c;使接收端即使在部分数据包丢失的情况下也能恢复原始数据&#xff0c;从而减轻网络丢包的影响。在 WebRTC 中&#xff0c;FEC 主要有两种实现方式&#xff1a;ULPFEC 和 FlexFEC&#xff0c;FlexFEC 是 ULPFEC 的扩展和升级&…

贪心+背包

这道题比较坑的就是我们的对于相同截止时间的需要排个序&#xff0c;因为我们这个工作是有时间前后顺序的&#xff0c;我们如果不排序的话我们一些截止时间晚的工作就无法得到最优报酬 #include<bits/stdc.h> using namespace std;#define int long long int t; int n; c…

渗透测试——利用公网反弹shell到本地的两种方式,vmware虚拟机与主机的端口转发,本地ssh无法上线的问题解决

解决问题&#xff1a; 因长期使用本地模拟靶场&#xff0c;实战护网时并非模拟靶场&#xff0c;shell反弹需要利用公网测试。解决目标站无法反弹到本地的情况。解决本地是windows&#xff0c;虚拟机是kail、linux&#xff0c;无法相互转换流量的情况。 环境搭建 靶机 centOS7 …

线性代数|机器学习-P25线性规划和两人零和博弈

文章目录 0. 概述1. 线性规划问题1.1 定义1.2 举例 2. 线性规划中的对偶问题3. 最大流 - 最小割问题4. 两人零和博弈 MIT教授教学视频&#xff0c;讲得比较泛&#xff0c;需要另外学习很多知识补充 0. 概述 线性规划[LP]问题 线性规划是问题为线性求最值&#xff0c;约束也是求…

Spring Security认证授权介绍

一、目标 真正控制系统权限的&#xff0c;需要引入专门的安全框架才行&#xff0c;所以&#xff0c;我们今天重点来学习Spring家族中的一员Spring Security安全框架。最终呢&#xff0c;我们会使用Spring Security框架来控制养老项目的后台管理系统 能够熟悉常见的权限控制的方…

记录|C# winform布局学习

目录 前言一、自适应布局Step1. 添加AutoAdaptWindowsSize类Step2. Form中引用Step3. 创建SizeChanged事件函数Step4. 在Fram.Disiger中添加 更新时间 前言 参考视频&#xff1a; C#5分钟winform快速自适应布局 参考文章&#xff1a; 其他参考&#xff1a; 写这篇文章&#xff…

【C#】Visual Studio2022打包依赖第三方库的winForm程序为exe

0.简介 IDE&#xff1a;VS2022 平台&#xff1a;C# .NetFramework4.7.2 WinForm界面 有GDAL、EEplus第三方库的依赖&#xff0c;所以在其他未安装环境的电脑中功能无法使用。 1. 安装 1.1 运行文件输出 在VS扩展中选择管理扩展&#xff0c;安装&#xff1a;Microsoft Visua…

docker相关内容学习

一、docker的四部分 二、镜像相关命令 三、容器相关命令

【BUG】已解决:NameError: name ‘python‘ is not defined

NameError: name ‘python‘ is not defined 目录 NameError: name ‘python‘ is not defined 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于…

SVN文件夹没有图标(绿钩子和红感叹号)

3分钟教会你解决SVN文件夹没有绿勾和红色感叹号的问题_svn文件被改动过不显示红色-CSDN博客https://blog.csdn.net/weixin_43382915/article/details/124251563 关于SVN状态图标不显示的解决办法(史上最全) - 简书 (jianshu.com)https://www.jianshu.com/p/92e8e1f345c0

接入百度文心一言API教程

然后&#xff0c;编辑文章。点击AI识别摘要&#xff0c;然后保存即可 COREAIPOWER设置 暂时只支持经典编辑器.古腾堡编辑器等几个版本后支持.在比期间,你可以自己写点摘要 摘要内容 AL识别摘要 清空 若有收获&#xff0c;就点个赞吧 接入文心一言 现在百度文心一言&…

网站基本布局CSS

代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><title></title><style type"text/css">body {margi…

性能调优 17. GraalVM云原生时代的Java虚拟机

1. GraalVM诞生的背景 1.1. Java在微服务/云原生时代的困境及解决方案 ‌‌‌  事实 ‌‌‌  Java总体上是面向大规模、长时间的服务端应用而设计的。 ‌‌‌  即时编译器(JIT)、性能优化、垃圾回收等有代表性的特征需要一段时间来达到最佳性能。 ‌‌‌  矛盾 ‌…

4、Python+MySQL+Flask的文件管理系统【附源码,运行简单】

4、PythonMySQLFlask的文件管理系统【附源码&#xff0c;运行简单】 总览 1、《文件管理系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 注册2.3 个人中心界面2.4 文件上传界面2.5 其他功能贴图 3、下载 总览 自己做的项目&#xff0c;禁止转载&#xff0c…