爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      重构 Flask 服务端项目对于 SQL 的配置使用和延迟的请求回调巧妙设计运用

      首页 知识中心 服务器 文章详情页

      重构 Flask 服务端项目对于 SQL 的配置使用和延迟的请求回调巧妙设计运用

      2024-09-25 10:15:32 阅读次数:45

      flask,sqlalchemy

      一. Flask-SQLAlchemy

      SQLAlchemy的声明扩展是使用SQLAlchemy的最新方法,可以像Django一样在一个位置定义表和模型,然后在任何地方使用。

      from sqlalchemy import create_engine
      from sqlalchemy.orm import scoped_session, sessionmaker
      from sqlalchemy.ext.declarative import declarative_base
      
      engine = create_engine('sqlite:////tmp/test.db')
      db_session = scoped_session(sessionmaker(autocommit=False,
                                               autoflush=False,
                                               bind=engine))
      Base = declarative_base()
      Base.query = db_session.query_property()
      
      def init_db():
          import yourapplication.models
          Base.metadata.create_all(bind=engine)
      

      在这里导入定义模型所需要的所有模块,这样它们就会正确的注册在元数据上。否则你就必须在调用 init_db() 之前导入它们。

      要定义模型,只需继承上面创建的Base类。你可能会好奇,这里为什么不关心线程。(与SQLite3一样,使用G对象。)原因是SQLAlchemy已经用scoped_session为我们做了这样的事情。 要在应用程序中声明性地使用SQLAlchemy,只需将以下代码添加到应用程序模块中:Flask在请求结束或应用程序终止时自动删除数据库会话:

      from yourapplication.database import db_session
      
      @app.teardown_appcontext
      def shutdown_session(exception=None):
          db_session.remove()
      

      人工对象关系映射

      人工对象关系映射与上述声明方式相比有优点和缺点。主要区别在于手动对象关系映射分别定义和映射表和类。这种方法更灵活,但需要更多的代码。通常,这种方法的运行方式与声明相同,因此必须将应用程序划分到包中的多个模块中。

      from sqlalchemy import create_engine, MetaData
      from sqlalchemy.orm import scoped_session, sessionmaker
      
      engine = create_engine('sqlite:////tmp/test.db')
      metadata = MetaData()
      db_session = scoped_session(sessionmaker(autocommit=False,
                                               autoflush=False,
                                               bind=engine))
      def init_db():
          metadata.create_all(bind=engine)
      

      二. 延迟的请求回调

      Flask的设计思想之一是,在创建响应对象之后,它被传递给一系列回调函数,这些回调函数可以修改或替换响应对象。请求处理开始时,尚未创建响应对象。响应对象由视图函数或系统中的其他组件按需创建。 但是,当响应对象尚未创建时,我们如何修改它呢?例如,在request()回调函数中,我们需要根据响应对象设置一个cookie。

      from flask import request, after_this_request
      
      @app.before_request
      def detect_user_language():
          language = request.cookies.get('user_lang')
      
          if language is None:
              language = guess_language_from_request()
      
              # when the response exists, set a cookie with the language
              @after_this_request
              def remember_language(response):
                  response.set_cookie('user_lang', language)
                  return response
      
          g.language = language
      

      通常我们选择避免这种情况。例如,可以尝试将应用程序逻辑移动到after_Therequest()回调函数。然而,有时这种方法令人不快,或者使代码难看。 另一种方法是使用after_this_ request()回调函数,该函数仅在当前请求之后执行。这允许您在应用程序中的任何位置延迟回调函数的执行。 在请求中的任何时候,您都可以注册将在请求结束时调用的函数。例如,下面的示例显示在before_ request()回调函数会记住cookie中当前用户的语言:

      基于 Celery 的后台任务

      首先,需要有一个Celery实例,称为Celery应用程序。它的状态与Flask中的Flask相同。此实例用作所有与Celery相关的事务的条目,例如创建任务和管理工人,因此它必须由其他模块导入。 例如,可以将其放在任务模块中。通过这种方式,您可以使用任务的子类,添加对Flask应用程序场景的支持,并且无需重新配置即可挂接Flask配置。 酒窖可以在福尔斯克使用,只要:

      from celery import Celery
      
      def make_celery(app):
          celery = Celery(
              app.import_name,
              backend=app.config['CELERY_RESULT_BACKEND'],
              broker=app.config['CELERY_BROKER_URL']
          )
          celery.conf.update(app.config)
      
          class ContextTask(celery.Task):
              def __call__(self, *args, **kwargs):
                  with app.app_context():
                      return self.run(*args, **kwargs)
      
          celery.Task = ContextTask
          return celery
      

      此函数创建一个新的Celery对象,在应用程序配置中使用代理,并从Flask配置中更新剩余的Celey配置。然后创建任务子类,将任务执行打包到应用程序上下文中。

      挂接,扩展

      API文档可以在任何地方看到可用的重载、挂钩点和信号。您可以自定义自定义类,例如请求或响应对象。请深入研究您使用的API,以及哪些可定制部件可用于Flask分发。请研究哪些项目可以重构为工具集或Flask扩展。您可以在社区中找到许多扩展。如果你找不到满意的东西,就自己写一篇。

      继承 Flask

      from flask import Flask, Request
      from werkzeug.datastructures import ImmutableOrderedMultiDict
      class MyRequest(Request):
          """Request subclass to override request parameter storage"""
          parameter_storage_class = ImmutableOrderedMultiDict
      class MyFlask(Flask):
          """Flask subclass using the custom request class"""
          request_class = MyRequest
      

      以这种方式重载或者增强 Flask 的内部功能。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_15568258/5802009,作者:上进小菜猪,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:ssh 命令

      下一篇:Windows安全加固

      相关文章

      2025-01-06 08:43:06

      Flask ORM 学习笔记Part02:Flask-Migrate的使用,数据库创建与数据导入

      一般来说在Flask环境下,使用Flask-Migrate这个扩展,用于简化数据库模型的迁移管理。数据库迁移是在应用开发过程中对数据库模型进行更改的一种方式,以确保数据库结构与应用代码的演变保持同步。

      2025-01-06 08:43:06
      flask , Flask , model , 数据库 , 文件 , 迁移
      2024-11-22 08:11:22

      关于解决:ModuleNotFoundError: No module named ‘XXX‘的报错问题

      关于解决:ModuleNotFoundError: No module named ‘XXX‘的报错问题

      2024-11-22 08:11:22
      flask , 报错 , 模块 , 项目
      2024-09-25 10:15:32

      Python: flask-socketio使用Websocket协议进行通讯

      Python: flask-socketio使用Websocket协议进行通讯

      2024-09-25 10:15:32
      flask , github , 代码实例
      2024-09-25 10:14:21

      Python编程:Flask扩展Flask-Migrate迁移数据库

      Python编程:Flask扩展Flask-Migrate迁移数据库

      2024-09-25 10:14:21
      flask , python , sqlalchemy
      2024-06-18 09:44:15

      Python3.6报错:ModuleNotFoundError: No module named 'MySQLdb'

      Python3.6报错:ModuleNotFoundError: No module named 'MySQLdb'

      2024-06-18 09:44:15
      mysql , sqlalchemy
      2024-06-05 09:09:23

      GitlabCICD技术----卸载Linux虚拟机类型的gitlab-runner

      GitlabCICD技术----卸载Linux虚拟机类型的gitlab-runner

      2024-06-05 09:09:23
      flask , python
      2024-04-18 09:15:34

      当你开始学习 Python 时,这是一个简单的学习计划及当你初学 Python 时,这里有几个建议

      当你开始学习 Python 时,这是一个简单的学习计划及当你初学 Python 时,这里有几个建议

      2024-04-18 09:15:34
      flask , python , 开发语言
      2024-03-28 09:00:50

      Flask框架实现注册加密功能详解【Flask企业课学习】

      Flask框架实现注册加密功能详解【Flask企业课学习】

      2024-03-28 09:00:50
      flask
      2024-03-28 09:00:50

      在 Flask 作为服务端时手动推送情境的解决方案和拆解回调的使用方法详解

      在 Flask 作为服务端时手动推送情境的解决方案和拆解回调的使用方法详解

      2024-03-28 09:00:50
      flask , json , python
      2023-07-19 07:20:42

      flask_restful中的输出域(Resource、fields、marshal、marshal_with)

      flask_restful中的输出域(Resource、fields、marshal、marshal_with)

      2023-07-19 07:20:42
      flask , python
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5248381

      查看更多

      最新文章

      GitlabCICD技术----卸载Linux虚拟机类型的gitlab-runner

      2024-06-05 09:09:23

      前后端分离之上线MongoDB【宝塔+falsk+MongoDB】

      2023-06-19 07:07:02

      查看更多

      热门文章

      前后端分离之上线MongoDB【宝塔+falsk+MongoDB】

      2023-06-19 07:07:02

      GitlabCICD技术----卸载Linux虚拟机类型的gitlab-runner

      2024-06-05 09:09:23

      查看更多

      热门标签

      服务器 linux 虚拟机 Linux 数据库 运维 网络 日志 数据恢复 java python 配置 nginx centos mysql
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      前后端分离之上线MongoDB【宝塔+falsk+MongoDB】

      GitlabCICD技术----卸载Linux虚拟机类型的gitlab-runner

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号