纯Python构建Web应用:Remi 与 Flask 结合打造更强大的 Web 应用实战
off999 2025-05-08 20:45 24 浏览 0 评论
引言
大家好,我是ICodeWR。在前几篇文章中,我们记录了 Remi 的基础功能、多页面应用和动态更新。
今天将深入探讨如何将 Remi 与 Flask 框架结合,从而打造更强大的 Web 应用。
Flask 是一个轻量级的 Python Web 框架,适合构建 RESTful API 和后端服务。通过将 Remi 与 Flask 结合,我们可以实现前后端分离,扩展 Web 应用的功能。
Remi 与 Flask 结合的优势
- 前后端分离:Remi 负责前端界面,Flask 负责后端逻辑和数据接口。
 - 功能扩展:利用 Flask 的路由、模板引擎和扩展库,可以轻松实现复杂的功能。
 - 灵活性:Remi 和 Flask 都是轻量级框架,组合使用非常灵活。
 
案例:创建一个任务管理系统
接下来我们通过一个任务管理系统的案例,学习如何将 Remi 与 Flask 结合。最终效果如下:
前端(Remi):
- 显示任务列表。
 - 提供添加任务的表单。
 
后端(Flask):
- 提供任务数据的增删改查接口。
 - 使用内存存储任务数据。
 
代码实现
1. Flask 后端代码
保存为 flask_server.py:
from flask import Flask, jsonify, request
app = Flask(__name__)
# 内存中存储任务数据
tasks = []
@app.route('/tasks', methods=['GET'])
def get_tasks():
    return jsonify(tasks)
@app.route('/tasks', methods=['POST'])
def add_task():
    task = request.json
    tasks.append(task)
    return jsonify(task), 201
@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
    if task_id < len(tasks):
        tasks.pop(task_id)
        return jsonify({'message': '任务已删除'}), 200
    return jsonify({'message': '任务不存在'}), 404
if __name__ == '__main__':
    app.run(port=5000)
2. Remi 前端代码
保存为 remi_client.py:
from remi import start, App, gui
import requests
class TaskManagerApp(App):
    def __init__(self, *args):
        super(TaskManagerApp, self).__init__(*args)
    def main(self):
        # 创建一个垂直布局容器作为根容器
        root_container = gui.VBox(width=400, style={'margin': 'auto', 'padding': '20px', 'border': '1px solid #ccc'})
        # 创建标题标签
        title = gui.Label("任务管理系统", style={'font-size': '24px', 'text-align': 'center', 'margin-bottom': '20px'})
        # 创建任务列表容器
        self.task_list = gui.VBox(width='100%', style={'margin-bottom': '20px'})
        # 创建添加任务表单
        form_container = gui.VBox(width='100%', style={'margin-bottom': '20px'})
        self.task_input = gui.TextInput(width='100%', height=30, style={'margin-bottom': '10px'})
        add_button = gui.Button("添加任务", width=100, height=30)
        add_button.onclick.do(self.on_add_task_clicked)
        # 将表单组件添加到容器中
        form_container.append(self.task_input)
        form_container.append(add_button)
        # 将所有组件添加到根容器中
        root_container.append(title)
        root_container.append(self.task_list)
        root_container.append(form_container)
        # 加载初始任务列表
        self.load_tasks()
        # 返回根容器
        return root_container
    def load_tasks(self):
        # 清空任务列表
        self.task_list.empty()
        # 从 Flask 后端获取任务数据
        response = requests.get('http://127.0.0.1:5000/tasks')
        if response.status_code == 200:
            tasks = response.json()
            for i, task in enumerate(tasks):
                task_item = gui.HBox(width='100%', style={'margin-bottom': '10px'})
                task_label = gui.Label(task['text'], width='80%', style={'font-size': '16px'})
                delete_button = gui.Button("删除", width=60, height=30)
                delete_button.onclick.do(self.on_delete_task_clicked, i)
                task_item.append(task_label)
                task_item.append(delete_button)
                self.task_list.append(task_item)
    def on_add_task_clicked(self, widget):
        # 获取用户输入的任务内容
        task_text = self.task_input.get_value()
        if task_text:
            # 发送 POST 请求添加任务
            response = requests.post('http://127.0.0.1:5000/tasks', json={'text': task_text})
            if response.status_code == 201:
                self.task_input.set_value('')  # 清空输入框
                self.load_tasks()  # 重新加载任务列表
    def on_delete_task_clicked(self, widget, task_id):
        # 发送 DELETE 请求删除任务
        response = requests.delete(f'http://127.0.0.1:5000/tasks/{task_id}')
        if response.status_code == 200:
            self.load_tasks()  # 重新加载任务列表
# 启动 Remi 应用
if __name__ == "__main__":
    start(TaskManagerApp, address='0.0.0.0', port=8080)
运行步骤
- 在RemiEg项目中添加 flask 和 requests 库
 
# 添加 flask 库
uv add flask requests
# 激活虚拟环境
.\.venv\Scripts\activate
- 启动 Flask 后端:
 
python .\day07\flask_server.py
- 启动 Remi 前端:
 
python .\day07\remi_client.py
- 打开浏览器,访问 http://127.0.0.1:8080,你将看到任务管理系统。
 
添加任务:
添加一条任务:
代码解析
Flask 后端:
- 提供 /tasks 接口,支持获取任务列表(GET)和添加任务(POST)。
 - 提供 /tasks/<task_id> 接口,支持删除任务(DELETE)。
 
Remi 前端:
- 使用 requests 库与 Flask 后端通信。
 - 通过 load_tasks 方法加载任务列表。
 - 通过 on_add_task_clicked 和 on_delete_task_clicked 方法处理用户交互。
 
本篇案例用到的函数原型
1. requests.get 方法
功能:发送 HTTP GET 请求。
原型:
requests.get(url, params=None, **kwargs)
示例:
response = requests.get('http://127.0.0.1:5000/tasks')
2. requests.post 方法
功能:发送 HTTP POST 请求。
原型:
requests.post(url, data=None, json=None, **kwargs)
示例:
response = requests.post('http://127.0.0.1:5000/tasks', json={'text': '新任务'})
3. requests.delete 方法
功能:发送 HTTP DELETE 请求。
原型:
requests.delete(url, **kwargs)
示例:
response = requests.delete('http://127.0.0.1:5000/tasks/1')
总结
今天记录了如何将 Remi 与 Flask 结合,并通过一个任务管理系统的案例演示了前后端分离的开发模式。在接下来的文章中,我们将深入探讨 Remi 与其他 Python 库的集成。
欢迎交流
- 你在使用 Remi 与 Flask 结合时遇到过哪些问题?欢迎在评论区分享!
 - 你希望在本系列中看到哪些 Remi 的实际应用场景?欢迎留言告诉我们!
 
将陆续更新 Python 编程相关的学习资料!
作者:ICodeWR
标签:#编程# #在头条记录我的2025# #python# #春日生活打卡季#
相关推荐
- 阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?
 - 
        
TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...
 
- 高流量大并发Linux TCP性能调优_linux 高并发网络编程
 - 
        
其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...
 
- 性能测试100集(12)性能指标资源使用率
 - 
        
在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...
 
- Linux 服务器常见的性能调优_linux高性能服务端编程
 - 
        
一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...
 
- Nginx性能优化实战:手把手教你提升10倍性能!
 - 
        
关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...
 
- 高并发场景下,Spring Cloud Gateway如何抗住百万QPS?
 - 
        
关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...
 
- Kubernetes 高并发处理实战(可落地案例 + 源码)
 - 
        
目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...
 
- 高并发场景下,Nginx如何扛住千万级请求?
 - 
        
Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...
 
- Spring Boot+Vue全栈开发实战,中文版高清PDF资源
 - 
        
SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...
 
- Docker-基础操作_docker基础实战教程二
 - 
        
一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...
 
- 你有空吗?跟我一起搭个服务器好不好?
 - 
        
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...
 
- 部署你自己的 SaaS_saas如何部署
 - 
        
部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...
 
- Docker Compose_dockercompose安装
 - 
        
DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...
 
- 京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统
 - 
        
前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...
 
- Kubernetes (k8s) 入门学习指南_k8s kubeproxy
 - 
        
Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...
 
欢迎 你 发表评论:
- 一周热门
 - 
                    
- 
                            
                                                                
抖音上好看的小姐姐,Python给你都下载了
 - 
                            
                                                                
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
 - 
                            
                                                                
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
 - 
                            
                                                                
python入门到脱坑 输入与输出—str()函数
 - 
                            
                                                                
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
 - 
                            
                                                                
Python三目运算基础与进阶_python三目运算符判断三个变量
 - 
                            
                                                                
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
 - 
                            
                                                                
慕ke 前端工程师2024「完整」
 - 
                            
                                                                
失业程序员复习python笔记——条件与循环
 - 
                            
                                                                
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
 
 - 
                            
                                                                
 
- 最近发表
 
- 标签列表
 - 
- python计时 (73)
 - python安装路径 (56)
 - python类型转换 (93)
 - python进度条 (67)
 - python吧 (67)
 - python的for循环 (65)
 - python格式化字符串 (61)
 - python静态方法 (57)
 - python列表切片 (59)
 - python面向对象编程 (60)
 - python 代码加密 (65)
 - python串口编程 (77)
 - python封装 (57)
 - python写入txt (66)
 - python读取文件夹下所有文件 (59)
 - python操作mysql数据库 (66)
 - python获取列表的长度 (64)
 - python接口 (63)
 - python调用函数 (57)
 - python多态 (60)
 - python匿名函数 (59)
 - python打印九九乘法表 (65)
 - python赋值 (62)
 - python异常 (69)
 - python元祖 (57)
 
 
