首页 > 其他分享 >关于Flask模块化开发方式

关于Flask模块化开发方式

时间:2024-10-18 09:21:25浏览次数:3  
标签:服务 请求 api2 Flask 模块化 代码 api 开发方式 前端

关于Flask模块化开发方式

可以使用两个后端代码来分别控制不同的模块。在 Flask 和 Waitress 这样的框架中,这通常通过以下几种方式来实现:

  1. 使用蓝图 (Blueprints): Flask 提供了蓝图功能,允许你将应用程序的不同部分拆分为多个模块。这些蓝图可以分别处理不同的逻辑或功能区域,最后将它们组合到主应用程序中。
  2. 启动多个 Waitress 实例: 你也可以启动多个 Waitress 实例,每个实例服务于一个不同的 Flask 应用。这样你可以通过不同的端口或者不同的 URL 路径来分别控制不同的模块。

我们现在来采用第二个方法,启动多个 Waitress 实例,每个实例服务于一个不同的 Flask 应用。

端口问题

在同一个端口(例如 5000)上运行多个后端服务是不可能的,因为一个端口在同一时间只能由一个应用程序占用。

  • 使用不同端口

如果没有特别的需求必须使用同一个端口,可以为不同的服务使用不同的端口来避免冲突。例如,你可以这样运行两个服务:

waitress-serve --port=5000 first_pythonfile:app
waitress-serve --port=5001 second_pythonfile:app

其中 :app 前面的是你的后端代码名称。

然后,通过 http://localhost:5000http://localhost:5001 分别访问不同的后端服务。

修改vue.config.js

如果你使用不同的端口来运行后端服务,那么你的 Vue 项目也需要调整配置,以便正确地与后端通信。通常,你需要在 vue.config.js 中设置代理 (proxy),这样 Vue 应用在开发环境下的请求可以正确地转发到不同的后端端口。

例如,假设你有两个后端服务,分别在端口 50005001 上运行。你可以在 vue.config.js 中配置代理来转发不同路径的请求到相应的后端服务。

接下来我们提供一种最简便的方式来进行修改。

如果你希望保留现有的 API 路径 (axios.get('/api/YOUR_query')),并且不希望修改前端的请求路径,你可以通过在 vue.config.js 的代理配置中进一步处理路径,避免手动更改前端代码。

你可以直接使用代理,将 /api 请求动态地转发到不同的后端服务,具体实现方式如下:

  • 修改vue.config.js

你可以配置代理,将 /api 路径分别转发到不同的后端服务,甚至可以根据请求路径的不同部分来决定将请求发送到哪个后端。

module.exports = {
  devServer: {
    publicPath: process.env.VUE_APP_PUBLIC_PATH || '/',
    proxy: {
      // 代理所有 /api 请求到主后端服务
      '/api': {
        target: 'http://localhost:5000',  // 主后端服务
        changeOrigin: true,
        pathRewrite: { '^/api': '' },  // 如果后端不处理 /api 前缀,则重写路径
      },
      // 代理 /api2 请求到第二个后端服务
      '/api2': {
        target: 'http://localhost:5001',  // 第二个后端服务
        changeOrigin: true,
        pathRewrite: { '^/api2': '/api' },  // 将 /api2 转换成 /api
      },
    },
    disableHostCheck: process.env.NODE_ENV === 'development',
  },
}


  • 这是一种不修改前端代码的解决方案:
  1. 保持前端代码不变: 你不需要在前端代码中修改路径,比如 axios.get('/api/YOUR_query')
  2. 动态代理配置:
    • /api 请求会自动转发到第一个后端(localhost:5000)。
    • 如果需要将某些请求转发到第二个后端(localhost:5001),你可以配置 /api2 代理,并通过 pathRewrite/api2 的路径重写为 /api

通过这种配置,假设你只想把某些 API 请求转发到不同的服务(如 api2 ),可以在 Vue 配置中做相应调整,而不需要改动前端的代码。

如果你的 axios 调用是 /api/EBAP_query,这个路径会根据 proxy 的配置,决定转发到哪一个后端服务。

  • 同样也不需要修改后端代码

通过在 vue.config.js 中使用代理配置,前端的请求会自动转发到不同的后端服务,而后端代码保持不变。

具体原因是:

  • 前端代码依然使用 axios.get('/api/YOUR_query') 发起请求,不需要进行任何改动。
  • vue.config.js 中,通过代理将 /api 路径根据你设置的规则转发到不同的后端服务(例如 localhost:5000localhost:5001)。
  • 后端的 URL 路径(如 /api/YOUR_query)也保持不变,不需要对其进行任何修改。

你可以继续使用两个独立的 Flask 后端服务(一个在 5000 端口,另一个在 5001 端口),它们接收从 Vue 应用传递来的相同 API 请求路径,比如 /api/YOUR_query,并分别处理。

完整的操作流程:
  1. 前端代码保持不变:

    axios.get('/api/YOUR_query').then(response => {
      console.log(response.data);
    });
    
  2. vue.config.js 中配置代理:

    module.exports = {
      devServer: {
        publicPath: process.env.VUE_APP_PUBLIC_PATH || '/',
        proxy: {
          // 代理所有 /api 请求到主后端服务
          '/api': {
            target: 'http://localhost:5000',  // 主后端服务
            changeOrigin: true,
            pathRewrite: { '^/api': '' },  // 如果后端不处理 /api 前缀,则重写路径
          },
          // 代理 /api2 请求到第二个后端服务
          '/api2': {
            target: 'http://localhost:5001',  // 第二个后端服务
            changeOrigin: true,
            pathRewrite: { '^/api2': '/api' },  // 将 /api2 转换成 /api
          },
        },
        disableHostCheck: process.env.NODE_ENV === 'development',
      },
    }
    
    
  3. 后端服务依然监听相同的 URL 路径:

    • Flask 后端 1(运行在端口 5000 继续处理 /api/YOUR_query
    • Flask 后端 2(运行在端口 5001 也处理 /api/YOUR_query(通过代理 /api2 转发过来的请求)。

这样,你不仅不需要修改前端代码,还能够在后端保持现有的 API 设计,同时实现对不同后端服务的请求分配。

你现在可以写两个后端代码了,分别处理不同的请求路径。

具体操作步骤:

  1. 后端 1:继续使用当前的后端代码,并运行 waitress-serve --port=5000 first_pythonfile:app 来启动。
  2. 后端 2:编写新的后端代码,并通过 waitress-serve --port=5001 second_pythonfile:app 来启动新后端服务。
  3. 前端请求
    • 对于现有后端的请求,仍然使用 axios.get('/api/YOUR_query'),它将会被代理到第一个后端服务。
    • 对于新的后端请求,使用 axios.get('/api2/YOUR_query'),这会通过代理转发到第二个后端服务。

通过这种方式,你的前后端代码能够很好地配合,无需在前端大规模调整,并且能够同时运行多个 Flask 应用。

在这种架构下,路径的区别 仅在前端 处理,通过代理配置决定将不同的请求路径 (/api/api2) 转发到不同的后端服务。

具体解释:

  • 前端的区别
    • 前端使用 axios.get('/api/YOUR_query') 时,这个请求会被代理到第一个后端 (localhost:5000)。
    • 前端使用 axios.get('/api2/YOUR2_data') 时,这个请求会被代理到第二个后端 (localhost:5001)。
  • 后端的统一处理
    • 第一个后端处理的路由是 /api/YOUR_query,如平常那样。
    • 第二个后端虽然前端请求的路径是 /api2/YOUR2_data,但代理会把 /api2 前缀去掉并重写为 /api,所以你只需要在第二个后端处理 /api/YOUR2_data 路由。

优势:

  • 你不需要在后端显式处理 /api2 前缀,所有的路由定义保持一致,减少代码重复和复杂度。
  • 前端通过代理灵活地将请求转发到不同的后端,而后端专注于处理实际的业务逻辑,不需要知道具体的前端请求细节。

这样配置后,后端代码可以完全不关心请求来源,前端通过代理机制处理不同路径的转发。

这种设计确保了影响最小,能够顺利地引入新的后端服务而不破坏现有的代码结构。

具体影响:
  1. 后端代码
    • 你现有的后端代码不需要做任何改动,依然保持原来的路由和逻辑。
    • 新的后端代码只需定义新的路由,并保持一致的路径结构,使用 /api/YOUR2_data 等。
  2. 前端代码
    • 你现有的前端代码使用的 API 请求仍然可以正常工作,如 axios.get('/api/YOUR_query')
    • 新增的请求可以使用 axios.get('/api2/YOUR2_data'),通过代理转发到第二个后端服务。
整体架构:
  • 请求流向:
    • axios.get('/api/YOUR_query')localhost:5000/api/YOUR_query(第一个后端处理)
    • axios.get('/api2/YOUR2_data')localhost:5001/api/YOUR2_data(第二个后端处理)

优势:

  • 易于扩展:你可以继续添加更多的后端服务,而不需要在前端或现有后端中进行复杂的修改。
  • 维护简便:后端只需关注业务逻辑,而不必考虑请求是从哪个前端路径来的,保持了清晰的职责分离。

这样我每天在启动项目的时候就需要多打开一个终端,在终端写一行新代码,运行:

waitress-serve --port=5001 second_pythonfile:app

当然,你也可以自己写一个脚本来同时启动这些后端服务,这个问题就留给大家了。

你现在可以独立修改和测试第二个后端代码,且不会影响到第一个后端的运行和数据获取。这种架构带来了很多灵活性,具体来说:

优势:

  1. 独立开发
    • 你可以在 localhost:5001 上自由修改和测试第二个后端代码,确保功能正常,而不会对运行在 localhost:5000 的第一个后端服务产生任何干扰。
  2. 并行测试
    • 你可以同时进行两个服务的测试。例如,在一个终端上调用第一个后端的 API,确认数据是否正确,然后在另一个终端上测试第二个后端的 API,这种并行性大大提高了开发效率。
  3. 灵活性
    • 你可以根据需求不断地修改、重启第二个后端,而不需要担心打断到其他服务的正常运行。这让你在进行实验或调试时更加灵活。

注意事项:

  • 确保端口正确:
    • 启动和测试时,请确保你清楚每个服务运行的端口,以避免混淆。
  • API 版本管理:
    • 如果你打算将第二个后端服务部署到生产环境中,可以考虑对 API 进行版本管理,以便更好地管理不同版本的服务。

这种架构大大提高了代码的可维护性和可扩展性,使你能够在开发和测试阶段更轻松地管理不同的服务和功能。

标签:服务,请求,api2,Flask,模块化,代码,api,开发方式,前端
From: https://blog.csdn.net/WXR1747636339/article/details/143034043

相关文章

  • Flask连接前端和智谱清言API
    python代码:fromzhipuaiimportZhipuAIfromflask_corsimportCORSfromflaskimportFlask,request,jsonifyimportjsonapp=Flask(__name__)CORS(app)@app.route("/")defindex():return"WelcometomyFlaskapp!"@app.route(&......
  • flask 登录
    #!/usr/bin/envpython#encoding:utf-8#pipinstallflask-loginimportdatetimefromflaskimportFlask,Blueprint,session,redirect,url_for,render_template,requestfromflask_loginimportLoginManager,current_user,login_user,login_required,logout_......
  • python+flask框架的地震救灾小程序前台8(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景地震作为自然灾害之一,其突发性和破坏性给人类社会带来了巨大的生命和财产损失。当前,关于地震救灾的研究主要集中在地震预警技术、灾后救援......
  • python+flask框架的党建appapp8(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展,党建工作也逐渐向数字化、智能化方向转型。关于党建信息化的研究,现有研究主要以传统党建模式与信息技术的融合为主......
  • python+flask框架的代驾小程序设计与实现实现18(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着城市化进程的加速和交通安全意识的提升,代驾服务逐渐成为人们日常生活中不可或缺的一部分。特别是在饮酒后或长途驾驶疲劳时,代驾服务为......
  • python+flask框架的大学校园宿舍微信报修小程序小程序 38(开题+程序+论文) 计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展和智能手机的普及,微信作为国内最大的社交平台之一,其小程序功能已成为连接线上与线下的重要桥梁。在大学校园中,宿舍......
  • python+flask框架的大学生创新实验室设备资产管理系统小程序端8(开题+程序+论文) 计算
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当前高等教育环境中,大学生创新实验室作为培养学生实践能力和创新思维的重要平台,其设备资产管理的高效性和准确性显得尤为重要。然而,现有......
  • python+flask框架的传智健康医疗项目设计与实现(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展,健康医疗行业正经历着前所未有的变革。关于健康医疗信息化的研究,现有研究主要以电子病历系统、远程医疗服务以及医......
  • python+flask框架的传智健康医疗项目设计与实现(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展和人口老龄化的加剧,健康医疗行业正经历着前所未有的变革。当前,国内外关于健康医疗信息化的研究主要集中在医疗信息......
  • python+flask框架的城固一中学生信息管理系统的设计与实现(开题+程序+论文) 计算机毕
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当前信息化时代背景下,学校信息管理系统的建设已成为提升教育管理水平、优化资源配置、提高教学效率的重要手段。关于学生信息管理系统的......