Flask学习笔记 - 项目结构 + 路由

前言

待业家中继续学习。

Flask 项目结构

my_flask_app/
│
├── app/
│   ├── __init__.py
│   ├── routes/ -- 将不同功能模块的路由分开管理
│   │   ├── __init__.py
│   │   ├── main.py -- 主模块的路由
│   │   └── auth.py -- 认证相关的路由
│   ├── models/ -- 管理数据模型,通常与数据操作相关
│   │   ├── __init__.py 
│   │   └── user.py -- 用户模型
│   ├── templates/ -- 存放 HTML 模板文件
│   │   ├── layout.html -- 布局相关
│   │   └── home.html
│   └── static/ -- 存放静态文件,如CSS和JavaScript
│       ├── css/
│       └── js/
│
├── config.py -- 配置文件,包含应用的配置信息
├── requirements.txt -- 列出项目的依赖库
├── migrations/
│   └── ...
└── run.py -- 用于启动Flask应用

如何在Trae IDE中配置Python解释器

看到app.py 报错,因为没有导入flask库,但我的设备已经安装了,所以应该是需要配置下。在设置中找半天没有找到,后来搜索才知道原来是在Editor中,搜索python,然后将 Python: Default Interpreter Path的路径设置为设备安装的路径。

藏的有点深,可能从产品的角度上看是不想局限在某种语言,可以在Editor设置的说明文案部分增加编译器,解释器。

Snip20250401_2.png

Snip20250401_3.png

路由

Flask 路由是Flask应用的核心部分,用于处理不同URL的请求,并将请求的处理委托给相应的视图函数

路由的相关说明

  1. 定义路由: 使用 @app.route(‘/path’) 装饰器定义URL和视图函数的映射。
  2. 路由参数: 通过动态部分在URL中传递参数的类型
  3. 路由规则: 使用类型转换器指定URL参数的类型
  4. 请求方法: 指定允许的HTTP请求方法。(GET,POST,DELETE,PUT)
  5. 路由函数返回: 视图函数可以返回不同类型的响应
  6. 静态文件和模板: 管理静态文件和动态渲染 HTML 模板
  7. 路由优先级: 确保路由顺序正确,以避免意外的匹配结果

定义路由

from flask import Flaskapp = Flask(__name__)@app.route('/') # 装饰器,用于定义路由。/ 表示根 URL
def home(): return 'Welcome to the Home Page!'if __name__ == '__main__':app.run(debug=True)

在这里插入图片描述

路由参数

...
@app.route('/greet/<name>') # 动态路由,<name> 是一个变量
def greet(name):return f'Hello, {name}!'if __name__ == '__main__':app.run(debug=True)

路由规则

路由规则支持不同

  • 字符串(默认): 匹配任意字符串
  • 整数(int:name): 匹配整数值
  • 浮点数float:value): 匹配浮点数值
  • path(path:name): 匹配任意字符,包括斜杆/
# 访问/user/1 能正常输出User ID:1
@app.route('/user/<int:user_id>')
def user_profile(user_id):return f'User ID: {user_id}'# 访问/user/1 能正常输出User ID:1
@app.route('/user/<user_id>')
def user_profile(user_id):return f'User ID: {user_id}'# 访问/user/1 int和user_id同时存在时走int
@app.route('/user/<user_id>')
def user_profile2(user_id):return f'User ID2: {user_id}'# 换成float,访问/user/1
# Not Found
# The requested URL was not found on the server. If you entered the URL # manually please check your spelling and try again.
@app.route('/user/<float:user_id>')
def user_profile(user_id):return f'User ID: {user_id}'

请求方法

Flask 路由支持不同的 HTTP 请求方法,如 GET、POST、PUT、DELETE 等。可以通过 methods 参数指定允许的请求方法。

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

此时设置了是POST请求,如果用Trae自带的浏览器访问,因为实际是GET请求,会报405错误码不允许

2025-04-02 10.58.36.png

使用postman发送post请求验证能获得正常的返回

2025-04-02 11.45.25.png

路由函数返回

  • 字符串: 返回纯文本响应
  • HTML: 返回HTML页面
  • JSON: 返回JSON数据
  • Response对象: 自定义响应
from flask import jsonify, Response@app.route('/json')
def json_response():data = {'key': 'value'}return jsonify(data)@app.route('/custom')
def custom_response():response = Response('Custom response with headers', status=200)response.headers['X-Custom-Header'] = 'Value'return response

返回json

2025-04-02 11.52.26.png

返回自定义响应

2025-04-02 11.52.56.png

静态文件和模板

静态文件(如 CSS、JavaScript、图片)可以通过 static 路由访问。模板文件则通过 templates 文件夹组织,用于渲染 HTML 页面。

styles.css

<link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
p {color: #940f0f;
}

这个格式默认是在找工程下的static目录下的styles.css

app.py

@app.route('/tutorial02/<name>')
def hello(name):return render_template('02.html', name=name)

02.html

<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}"><title>02</title>
</head>
<body><h1>02</h1><p>{{ name }}</p>
</body>
</html>

Snip20250402_9.png

路由优先级

Flask 按照定义的顺序匹配路由,第一个匹配成功的路由将被处理。确保更具体的路由放在更一般的路由之前。

@app.route('/user/<int:user_id>')
def user_profile(user_id):return f'User ID: {user_id}'@app.route('/user')
def user_list():return 'User List'

/user/123 将匹配到 /user/<int:user_id>,而 /user 将匹配到 user_list

参考

  1. Flask项目结构
  2. Flask路由

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

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

相关文章

SQL 转 PHP Eloquent、Doctrine ORM, 支持多数据库

SQL 转 PHP 说明 在 PHP 开发中&#xff0c;常使用 ORM&#xff08;如 Eloquent、Doctrine&#xff09;操作数据库。手写 ORM 模型繁琐&#xff0c;gotool.top 提供 SQL 转 PHP 工具&#xff0c;可自动生成 PHP 代码&#xff0c;提高开发效率。 特色 支持 Laravel Eloquent …

【Python】Python 环境 + Pycharm 编译器 官网免费下载安装(图文教程,新手安装,Windows 10 系统)

目录 Python 环境的下载安装第一步 进入官网第二步 找到匹配 windows 系统的 python 下载页面第三步 根据电脑 cpu 架构选择 python 版本第四步 安装 python 环境第五步 验证 python 环境变量 Pycharm 的下载安装第一步 进入官网第二步 安装 Pycharm Community Edition第三步 第…

基于javaweb的SpringBoot图片管理系统图片相册系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

局域网:电脑或移动设备作为主机实现局域网访问

电脑作为主机 1. 启用电脑的网络发现、SMB功能 2. 将访问设备开启WIFI或热点&#xff0c;用此电脑连接&#xff1b;或多台设备连接到同一WIFI 3. 此电脑打开命令行窗口&#xff0c;查看电脑本地的IP地址 Win系统&#xff1a;输入"ipconfig"&#xff0c;回车后如图 4.…

use_tempaddr 笔记250405

use_tempaddr 笔记250405 use_tempaddr 是 Linux 系统中用于控制 IPv6 临时隐私地址生成策略 的关键参数。以下是其详细说明&#xff1a; &#x1f4dc; 参数定义 路径&#xff1a; /proc/sys/net/ipv6/conf/<接口>/use_tempaddr默认值&#xff1a; 1&#xff08;大多数…

NO.66十六届蓝桥杯备战|基础算法-贪心-区间问题|凌乱的yyy|Rader Installation|Sunscreen|牛栏预定(C++)

区间问题是另⼀种⽐较经典的贪⼼问题。题⽬⾯对的对象是⼀个⼀个的区间&#xff0c;让我们在每个区间上做出取舍。 这种题⽬的解决⽅式⼀般就是按照区间的左端点或者是右端点排序&#xff0c;然后在排序之后的区间上&#xff0c;根据题⽬要求&#xff0c;制定出相应的贪⼼策略&…

用C语言控制键盘上的方向键

各位同学&#xff0c;大家好&#xff01;相信大家在学习C语言的过程中&#xff0c;都和我一样&#xff0c;经常使用scanf函数来接受字符&#xff0c;数字&#xff0c;这些标准输入信息&#xff0c;来实现自己设计的程序效果。 而我突然有一天&#xff08;对就是今天&#xff09…

特殊的质数肋骨--dfs+isp

1.dfs全排列组数&#xff0c;an记得还原 2.如果范围确定且只比较质数&#xff0c;isp比线性筛快&#xff0c;主要这个范围太大了 https://www.luogu.com.cn/problem/P1218 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typed…

定积分的应用(4.39-4.48)

battle cry 前言4.394.404.414.424.434.444.454.464.474.48 前言 题目确实比较多。slow down and take your time. 4.39 狂算了一遍&#xff0c;然后发现不是计算出问题了&#xff0c;是积分上下限写错了。还有把函数代进去也出了一点问题。 点火公式一家人我不记得&#x…

如何高效使用 Ubuntu 中文官方网站

Ubuntu 中文官方网站 一、快速导航与核心模块 首页焦点区 顶部菜单栏:快速访问「下载」「文档」「支持」「商店」等核心功能。轮播图区:展示最新版本(如 Ubuntu 24.04 LTS)和特色功能(如 Ubuntu Pro 订阅服务)。搜索框:支持中文关键词搜索(如 "边缘计算"),…

form实现pdf文件转换成jpg文件

说明&#xff1a; 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript&#xff0c;gs10050w64.exe 配置环境变量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路径&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 输出文件目录&#xff1a;C:\Users\wan…

Spring 核心技术解析【纯干货版】- XVIII:Spring 网络模块 Spring-WebSocket 模块精讲

在现代 Web 开发中&#xff0c;实时通信已成为提升用户体验的关键技术之一。传统的 HTTP 轮询方式存在较高的延迟和带宽开销&#xff0c;而 WebSocket 作为一种全双工通信协议&#xff0c;能够在客户端和服务器之间建立持久连接&#xff0c;实现高效的双向数据传输。 Spring 框…

VirtualBox安装FnOS

1.下载FnOS镜像 下载网址&#xff1a; https://www.fnnas.com/2.创建虚拟机 虚拟机配置如图所示&#xff08;注意操作系统类型和网卡配置&#xff09; &#xff08;注意启动顺序&#xff09; 3.启动虚拟机 网卡类型选择桥接的Virtual Adapter 如果没有IP地址或者IP地址无法…

java根据集合中对象的属性值大小生成排名

1&#xff1a;根据对象属性降序排列 public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {Linked…

grep命令: 过滤

[rootxxx ~]# grep root /etc/passwd [rootxxx ~]# grep -A 2 root /etc/passwd -A #匹配行后两行 [rootxxx ~]# grep -B 2 root /etc/passwd -B #匹配行前两行 [rootxxx ~]# grep -C 2 root /etc/passwd -C #前后2行 [rootxxx ~]# grep -n root /…

二十种中药果实识别分类系统,Python/resnet18/pytorch

二十种中药果实识别分类系统,Python/resnet18/pytorch 基于pytorch训练, resnet18网络&#xff0c;可用于训练其他分类问题&#xff0c;也可自己重新训练 20类中药材具体包括&#xff1a;(1) 补骨脂&#xff0c;(2) 草豆蔻&#xff0c;(3) 川楝子&#xff0c;(4) 地肤子&…

SpringBoot启动run方法分析

SpringBoot启动run方法分析 1.场景引入 在项目启动的时候&#xff0c;有时候我们需要在启动的时候&#xff0c;执行一些逻辑。 比如说&#xff0c;项目启动的时候&#xff0c;我想把一些热门商品的数据加载到缓存中去&#xff1b; 比如说&#xff0c;自定义了一个netty服务…

Linux信号——信号的处理(3)

信号是什么时候被处理&#xff1f; 进程从内核态&#xff0c;切换到用户态的时候&#xff0c;信号会被检测处理。 内核态&#xff1a;操作系统的状态&#xff0c;权限级别高 用户态&#xff1a;你自己的状态 内核态和用户态 进程地址空间第三次 所谓的系统调用本质其实是一堆…

MySQL篇(四)事务相关知识详解

MySQL篇(四&#xff09;事务相关知识详解 MySQL篇(四&#xff09;事务相关知识详解一、事务的特性&#xff08;ACID&#xff09;原子性&#xff08;Atomicity&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;…

SpringBoot定时任务深度优化指南

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 SpringBoot定时任务深度优化指南 引言 在分布式系统架构中&#xff0c;定时任务是实现业务逻辑自动化的重要组件。SpringBoot通过Scheduled注解提供了便捷的…