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

Python Flask框架学习总结(一)

简介

Flask是一个微框架,这意味着它核心简单但可扩展。它不包括数据库抽象层、表单验证或其他组件,这些功能可以通过扩展来添加。因此要什么就装什么扩展,非常的方便

安装及导入

# 终端输入
pip install flask
# 创建一个app.py的文件,导入
from flask import Flask

自此就可以正式开始使用Flask框架了

路由

# 第一步
# 使用flask,先导入对应的包
from flask import Flask# 第二步
# 创建对应的实例,这里的__name__对应的就是app
app = Flask(__name__)# 第三步
# 创建路由,此时我们可以在url后面拼接/hello来访问这个接口,会发现页面中显示的是hello
@app.route('/hello', methods=['GET'])
def hello():return "hello"# 启动应用
if __name__ == '__main__':app.run(debug=True)

上述是一个简单的Flask路由通过访问/hello看到页面显示的hello,接下来我们介绍一下route()里面的参数
除了最基本的作为url路径,在有的业务场景中也需要携带参数传递,在路径中携带的参数会作为关键字参数传递给视图函数,这样的话我们就可以创建动态的url,用以满足不同的请求

  • Flask使用@app.route()装饰器将URL绑定到视图函数。可以定义静态路径和动态参数。
  • 路由可以指定接受的HTTP方法,如GET、POST、PUT、DELETE等。默认只接受GET请求。
  • Flask允许在路由URL中定义变量部分,使用尖括号<variable_name>语法。
  • Flask支持多种参数类型转换器:string(默认)、int、float、path和uuid

基础路由语法

直接上代码演示

# 导入Flask类
from flask import Flask# 创建Flask应用实例
app = Flask(__name__)# 静态路由
@app.route('/')
def index():return '首页'# 带参数的路由
@app.route('/user/<username>')
def show_user(username):return f'用户: {username}'# 指定HTTP方法
@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':return do_login()else:return show_login_form()# 多路由规则指向同一视图
@app.route('/users/')
@app.route('/users/<page>')
def show_users(page=1):return f'显示用户列表,第 {page} 页'# 启动应用
if __name__ == '__main__':app.run(debug=True)

上述都是基本的路由示例,我们可以通过自由的组合,例如:指定用POST方法并且携带参数的路由

参数路由语法

# 字符串参数(默认)
@app.route('/user/<username>')
def profile(username):return f'用户 {username}'# 整数参数
@app.route('/post/<int:post_id>')
def show_post(post_id):return f'文章 #{post_id}'# 浮点数参数
@app.route('/temperature/<float:temp>')
def show_temp(temp):return f'当前温度: {temp}°C'# 路径参数(可包含斜杠)
@app.route('/files/<path:filepath>')
def show_file(filepath):return f'文件路径: {filepath}'# UUID参数
@app.route('/object/<uuid:obj_id>')
def get_object(obj_id):return f'对象UUID: {obj_id}'# 任何类型(从列表中匹配)
@app.route('/<any(blog, article, news):category_name>/')
def show_category(category_name):return f'{category_name} 类别'

上述是路由可以携带的参数类型,这里同样的可以多样化组合同时携带多个参数。
例如:/user/string:username/post/int:userid或者
/booklist/<any(math,english,chinese):category>/bookid/int:bookid

HTTP方法

既然是满足多种场景的使用需求,那么自然的对于不同的请求方法都有与之相对应的

# 导入request对象
from flask import Flask, requestapp = Flask(__name__)# 默认只接受GET请求
@app.route('/get-only')
def get_only():return '只响应GET请求'# 接受GET和POST请求
@app.route('/both', methods=['GET', 'POST'])
def both_methods():if request.method == 'POST':return '处理POST请求'else:return '处理GET请求'# RESTful API示例
@app.route('/api/users/<int:user_id>', methods=['GET', 'PUT', 'DELETE'])
def user_api(user_id):if request.method == 'GET':return f'获取用户 {user_id}'elif request.method == 'PUT':return f'更新用户 {user_id}'elif request.method == 'DELETE':return f'删除用户 {user_id}'# 使用@app.get和@app.post(Flask 2.0+)
@app.get('/users')
def get_users():return '获取用户列表'@app.post('/users')
def create_user():return '创建新用户'

高级路由参数

既然是以自由轻便为主,那么自然是可以使用到我们的正则表达式来自定义我们想要的路由,需要导入一个新的扩展(这里很能体现出想要啥加啥)
from werkzeug.routing import BaseConverter

from werkzeug.routing import BaseConverter# 创建自定义转换器
class RegexConverter(BaseConverter):def __init__(self, url_map, *items):super(RegexConverter, self).__init__(url_map)self.regex = items[0]# 注册自定义转换器
app.url_map.converters['regex'] = RegexConverter# 使用自定义正则表达式匹配路由参数
@app.route('/item/<regex("[a-z]{3}-\d{3}"):item_id>')
def show_item(item_id):return f'商品ID: {item_id}'# 默认值处理
@app.route('/books/')
@app.route('/books/<int:page>')
def show_books(page=1):return f'显示第 {page} 页的图书'# 可选参数(使用转换器)
@app.route('/optional/<string:name>/')
@app.route('/optional/<string:name>/<int:age>')
def optional_params(name, age=None):if age:return f'姓名: {name}, 年龄: {age}'else:return f'姓名: {name}, 年龄: 未提供'

个人感觉还是正则会用的多一点,不仅仅是在路由方面

总结

从基础路由,参数路由以及HTTP方法初步了解了Flask路由,还有它的高级用法。接下来就可以进行一些实际的功能构建,比如登录注册口,增删查改以及连接数据库等等

http://www.wxhsa.cn/company.asp?id=2259

相关文章:

  • 20250909
  • 9.11日总结
  • [充电管理] 充电管理基本概念 - 充电类型
  • Spring AI vs LangChain4j
  • P7913 [CSP-S 2021] 廊桥分配
  • 函数计算进化之路与 AI Sandbox 新基座
  • iPhone 17核心名单揭晓,92家中国公司占半壁江山!
  • 202009_风二西_蓝牙协议流量
  • AI Agent工作流实用手册:5种常见模式的实现与应用,助力生产环境稳定性
  • 2025权威榜单之公众号排版Top5(含效率对比与适用建议)
  • 4
  • 02020305 .NET Core核心基础组件05-开发自己的配置提供者(本课没听懂,后续再补)
  • linux 的 SSH 使用教程
  • 解题报告-洛谷P3157 [CQOI2011] 动态逆序对
  • DP 杂题
  • Java的变量和常量
  • 推荐7本书《MLIR编译器原理与实践》、《ONNX人工智能技术与开发实践》、《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》
  • 202009_风二西_USB鼠标流量
  • virtuoso默认设置
  • CF547D Mike and Fish
  • Tarjan vDCC 缩点
  • ABC_419_F - All Included
  • 软件工程第一次作业-自我介绍
  • DIFY 与 LangChain
  • VMware CentOS 7 `yum` 修复及 VMware Tools 安装问题复盘
  • 接口测试---Requests
  • LangChain大模型应用开发介绍
  • [豪の学习笔记] 软考中级备考 基础复习#8
  • lc1025-除数博弈
  • 漏洞解析--文件包含漏洞究竟怎么用?