两网站定时数据exchange项目详解

功能说明

  • A网站:用户可以通过表单输入嫌疑人信息,这些信息会被存储在内存中,并通过API接口返回。
  • B网站:通过API接口接收从A网站同步过来的嫌疑人数据,并显示这些数据。
  • 主应用:使用APScheduler每隔1分钟从A网站获取嫌疑人数据,并更新到B网站。

技术原理
1. Flask 框架
Flask 是一个轻量级的Web应用框架,基于Python语言。它提供了简单的API和强大的扩展机制,适合快速开发小型到中型的Web应用。

路由:Flask使用装饰器(如@app.route)来定义URL路由和对应的处理函数。
模板渲染:使用Jinja2模板引擎来动态生成HTML页面。
请求处理:通过request对象获取HTTP请求的数据,通过jsonify函数返回JSON响应。
2. APScheduler
APScheduler(Advanced Python Scheduler)是一个Python的定时任务调度库,支持多种调度方式,如定时任务、间隔任务等。

BackgroundScheduler:在后台运行的调度器,不会阻塞主线程。
Job:定义具体的任务,可以设置触发器(如间隔、定时等)。
3. Requests 库
Requests 是一个用于发送HTTP请求的Python库,简单易用,支持多种HTTP方法(GET、POST等)。

GET 请求:用于从服务器获取数据。
POST 请求:用于向服务器发送数据。
4. HTML 和 Jinja2 模板
HTML 是标准的网页标记语言,用于构建网页结构。
Jinja2 是Flask默认的模板引擎,用于动态生成HTML页面。

模板变量:在HTML模板中使用{{ variable }}来插入变量值。
条件语句和循环:使用{% if %}和{% for %}等语法来控制模板的逻辑。
用到的工具
1. Python
Python 是一种高级编程语言,广泛用于Web开发、数据分析、人工智能等领域。项目中使用Python编写所有的后端逻辑和定时任务。

2. Flask
Flask 是一个轻量级的Web框架,用于构建A网站和B网站。

3. APScheduler
APScheduler 是一个定时任务调度库,用于管理从A网站获取数据并更新B网站的定时任务。

4. Requests
Requests 是一个HTTP请求库,用于从A网站获取数据和向B网站发送数据。

5. Jinja2
Jinja2 是Flask默认的模板引擎,用于动态生成HTML页面。

具体实现
1. A网站
Flask应用:使用Flask创建一个Web应用,提供用户输入嫌疑人信息的表单和显示当前嫌疑人列表的页面。
API接口:提供一个API接口(/api/suspects),返回当前的嫌疑人数据。
2. B网站
Flask应用:使用Flask创建一个Web应用,接收从A网站同步过来的嫌疑人数据并显示。
API接口:提供一个API接口(/api/suspects),接收从A网站发送的嫌疑人数据。
3. 定时任务
APScheduler:使用APScheduler创建一个定时任务,每隔1分钟从A网站获取嫌疑人数据并更新到B网站。
Requests:使用Requests库发送HTTP请求,从A网站获取数据并发送到B网站。

 

通过这种方式,用户可以在A网站输入嫌疑人信息,这些信息将通过定时任务同步到B网站并在B网站上显示。

创建一个完整的项目,其中包括A网站和B网站的简单实现,以及一个定时任务来从A网站获取数据并更新B网站。我们将使用Flask框架来构建这两个网站,并使用APScheduler来管理定时任务

使用Flask框架来构建这两个网站,并使用APScheduler来管理定时任务。

A网站和B网站都具有输入信息的文本框和接收文本信息的显示功能。这样用户可以在A网站输入嫌疑人信息,并通过定时任务将这些信息同步到B网站,B网站则显示这些信息。

项目的完整目录结构,包括A网站和B网站的HTML模板文件:

my_project/
│
├── app.py          # 主应用文件
├── config.py       # 配置文件
├── tasks.py        # 定时任务脚本
├── site_a/         # A网站的目录
│   ├── __init__.py # 空文件,使site_a成为一个包
│   ├── app.py      # A网站的Flask应用
│   └── templates/  # A网站的HTML模板
│       └── index.html
├── site_b/         # B网站的目录
│   ├── __init__.py # 空文件,使site_b成为一个包
│   ├── app.py      # B网站的Flask应用
│   └── templates/  # B网站的HTML模板
│       └── index.html
└── requirements.txt# 依赖包列表

文件内容

config.py
# config.py
class Config:A_SITE_URL = 'http://localhost:5000/api/suspects'B_SITE_URL = 'http://localhost:5001/api/suspects'UPDATE_INTERVAL = 60 * 1  # 每1分钟更新一次
site_a/app.py
# site_a/app.py
from flask import Flask, render_template, request, jsonifyapp = Flask(__name__)suspects = []@app.route('/', methods=['GET', 'POST'])
def index():if request.method == 'POST':name = request.form['name']id_card = request.form['id_card']suspects.append({"name": name, "id_card": id_card})return render_template('index.html', suspects=suspects)@app.route('/api/suspects', methods=['GET'])
def get_suspects():return jsonify(suspects)if __name__ == '__main__':app.run(port=5000)
site_a/templates/index.html
<!-- site_a/templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>A Website</title>
</head>
<body><h1>Input Suspect Information</h1><form method="post"><label for="name">Name:</label><input type="text" id="name" name="name" required><br><br><label for="id_card">ID Card:</label><input type="text" id="id_card" name="id_card" required><br><br><button type="submit">Submit</button></form><h2>Suspect List</h2><ul>{% for suspect in suspects %}<li>Name: {{ suspect.name }}, ID Card: {{ suspect.id_card }}</li>{% endfor %}</ul>
</body>
</html>
site_b/app.py
# site_b/app.py
from flask import Flask, request, jsonify, render_templateapp = Flask(__name__)suspects = []@app.route('/api/suspects', methods=['POST'])
def post_suspects():global suspectsdata = request.jsonsuspects.extend(data)return jsonify({"status": "success", "message": "Suspects data received"})@app.route('/', methods=['GET'])
def index():return render_template('index.html', suspects=suspects)if __name__ == '__main__':app.run(port=5001)
site_b/templates/index.html
<!-- site_b/templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>B Website</title>
</head>
<body><h1>Suspect List</h1><ul>{% for suspect in suspects %}<li>Name: {{ suspect.name }}, ID Card: {{ suspect.id_card }}</li>{% endfor %}</ul>
</body>
</html>
tasks.py
# tasks.py
import requests
from config import Configdef fetch_suspects_from_a():response = requests.get(Config.A_SITE_URL)if response.status_code == 200:return response.json()else:raise Exception(f'Failed to fetch suspects from A site: {response.status_code}')def send_suspects_to_b(suspects):response = requests.post(Config.B_SITE_URL, json=suspects)if response.status_code != 200:raise Exception(f'Failed to send suspects to B site: {response.status_code}')def update_suspects():try:suspects = fetch_suspects_from_a()send_suspects_to_b(suspects)print("Suspects data updated successfully.")except Exception as e:print(f"Error updating suspects data: {e}")
app.py
# app.py
from flask import Flask
from apscheduler.schedulers.background import BackgroundScheduler
from config import Config
from tasks import update_suspectsapp = Flask(__name__)# 初始化调度器
scheduler = BackgroundScheduler()# 添加定时任务
scheduler.add_job(func=update_suspects, trigger="interval", seconds=Config.UPDATE_INTERVAL)@app.route('/')
def index():return "Hello, this is the data synchronization service."if __name__ == '__main__':# 启动调度器scheduler.start()try:app.run(debug=True, port=5002)except (KeyboardInterrupt, SystemExit):# 关闭调度器scheduler.shutdown()
requirements.txt
Flask==2.3.2
requests==2.31.0
apscheduler==3.9.1

运行你的应用

确保你的虚拟环境已激活,然后在命令行中分别启动A网站、B网站和主应用:

  1. 启动A网站:

    cd site_a
    python app.py
  2. 启动B网站:

    cd site_b
    python app.py
  3. 启动主应用:

    python app.py

现在,应用正在运行,并且每1分钟会自动执行一次从A网站获取嫌疑人数据并更新B网站的任务。用户可以在A网站输入嫌疑人信息,这些信息将通过定时任务同步到B网站并在B网站上显示。

弊端:会一直在传送,后续进行代码修改

网站数据自动交换,flask框架

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【云计算】腾讯云架构高级工程师认证TCP--考纲例题,知识点总结

【云计算】腾讯云架构高级工程师认证TCCP–知识点总结&#xff0c;排版整理 文章目录 1、云计算架构概论1.1 五大版块知识点&#xff08;架构设计&#xff0c;基础服务&#xff0c;高阶技术&#xff0c;安全&#xff0c;上云&#xff09;1.2 课程详细目录1.3 云基础架构设计1.4…

sql server查看当前正在执行的sql

#统计某类sql执行次数&#xff0c;并按总体cpu消耗时间降序排序 with a as ( select er.session_id,db_name(er.database_id) as DBNAME,sy.last_batch AS 最后执行时间, er.cpu_time ,er.total_elapsed_time/1000 as sum_elapsed_time_s, CAST(csql.text AS varchar(8000)) A…

【UE5】Slider控件样式

实现根据滑柄位置确定滑条样式的功能&#xff0c;效果如下。 效果 步骤 1. 添加Slider控件和文本控件&#xff0c;其中文本控件用于显示滑条的值 2. 文本控件绑定变量&#xff0c;这里变量为“Year” 3. 当滑条的值变更后&#xff0c;设置“Year”的值&#xff0c;然后调用函…

JVM性能分析工具JProfiler的使用

一、基本概念 JProfiler&#xff1a;即“Java Profiler”&#xff0c;即“Java分析器”或“Java性能分析工具”。它是一款用于Java应用程序的性能分析和调试工具&#xff0c;主要帮助开发人员识别和解决性能瓶颈问题。 JVM&#xff1a;即“Java Virtual Machine”&#xff0c…

TongRDS 可视化连接

说明&#xff1a;TongRDS 增加了 redis 兼容接口&#xff0c;所以 redis 能连接的可视化方式&#xff0c;TongRDS 也是可以的 Redis Insight Redis Insight DataGrip DataGrip

【WPF】Prism学习(八)

Prism Dependency Injection 1.处理解析错误 1.1. 处理解析错误&#xff1a; 这个特性是在Prism 8中引入的&#xff0c;如果你的应用目标是早期版本&#xff0c;则不适用。 1.2. 异常发生的原因&#xff1a; 开发者可能会遇到多种原因导致的异常&#xff0c;常见的错误包括…

游戏引擎学习第19天

介绍 这段内容描述了开发者在进行游戏开发时&#xff0c;对于音频同步和平台层的理解和调整的过程。以下是更详细的复述&#xff1a; 开发者表达了他希望今天继续进行的工作内容。他提到&#xff0c;昨天他讲解了一些关于音频的内容&#xff0c;今天他想稍微深入讲解一下他正…

蓝队技能-应急响应篇Rookit后门进程提取网络发现隐藏技术Linux杀毒OpenArk

知识点&#xff1a; 1、应急响应-Windows-Rootkit-分析&清除 2、应急响应-Linux-Rootkit-分析&查毒&清除 内存马和rookit都是属于权限维持技术&#xff0c; 内存马一般是用来控制网站&#xff0c;rookit一般是用来控制服务器&#xff08;隐藏常规C2后门&#xff…

MAC创建一个自动操作,启动系统【睡眠】功能,并将绑定快捷键

目的 通过 Automator 创建一个服务来启动系统【睡眠】这个功能&#xff0c;并绑定快捷键。 步骤一&#xff1a;创建 Automator 服务 打开 Automator&#xff1a; ○ 在 Spotlight 中搜索 Automator&#xff0c;然后打开。选择服务类型&#xff1a; ○ 在 Automator 的启动界…

OpenLayers教程11_在OpenLayers中启用WebGL渲染

在 OpenLayers 中启用 WebGL 渲染&#xff1a;提高地图渲染性能的完整指南 目录 一、引言二、WebGL 渲染在 Web GIS 中的作用 WebGL 的优势WebGL 与 Canvas 渲染的区别 三、在 OpenLayers 中启用 WebGL 的方法四、代码实现步骤 1. 初始化地图和基本 WebGL 渲染2. 加载大规模点…

利用Matlab函数实现深度学习算法

深度学习是一种机器学习技术&#xff0c;其核心是构建多层神经网络&#xff0c;通过深入的学习来实现对数据的有效建模和分析。在深度学习的发展过程中&#xff0c;产生了许多算法和框架&#xff0c;Matlab是其中之一&#xff0c;提供了大量的深度学习函数&#xff0c;可以帮助…

每日OJ题_牛客_dd爱旋转_模拟_C++_Java

目录 牛客_dd爱旋转_模拟 题目解析 C代码 Java代码 牛客_dd爱旋转_模拟 dd爱旋转 输入描述&#xff1a; 第一行一个数n(1≤n≤1000)&#xff0c;表示矩阵大小 接下来n行&#xff0c;每行n个数&#xff0c;描述矩阵&#xff0c;其中数字范围为[1,2000] 一下来一行一个数q(1…

从零开始打造个人博客:我的网页设计之旅

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

【C语言】操作符2(含操作符的应用)

1、单目操作符 单目操作符有下面几种&#xff1a; &#xff01;、、--、&&#xff08;取地址&#xff09;、*&#xff08;指针&#xff09;、&#xff08;正号&#xff09;、-&#xff08;负号&#xff09;、~、sizeof、&#xff08;类型&#xff09; 其中就还有&和*操…

博客文章怎么设计分类与标签

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;博客文章怎么设计分类与标签 新网站基本上算是迁移完了&#xff0c;迁移之后在写文章的过程中&#xff0c;发现个人的文章分类和标签做的太混乱了&#xff0c;分类做的像标签&#xff0c;标签也不是特别的丰富&#x…

【计算机网络】物理层

&#x1f3af; 导读&#xff1a;本文档概述了计算机网络物理层的基础知识&#xff0c;包括物理层的作用、四大任务、传输媒体分类及其特性&#xff0c;深入讲解了调制技术和编码方法如曼彻斯特编码等&#xff0c;探讨了信道的极限容量&#xff0c;介绍了奈氏准则和香农公式&…

【AI赋能电商】数据分析和训练精准导向

AI赋能电商&#xff1a;重塑销售效率与用户体验的新篇章 一、AI驱动的购物推荐系统二、会员分类与精细化运营三、智能商品定价策略四、AI在供应链管理中的应用结语 在当今这个技术日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;已不再是一个遥不可及的概念&…

多组织对接方案案例

前言 不同组织间的数据共享和整合&#xff0c;以便实现库存、订单的实时同步。多组织的对接需求往往一个销售订单需要再不同的组织生成不一样的单据&#xff0c;并且完成内部结算&#xff0c;这个案例对接的是金蝶云星空&#xff0c;具备多组织的特性&#xff0c;所以在前期规…

基于YOLOv8深度学习的医学影像肝脏肿瘤病症检测与诊断系统(PyQt5界面+数据集+训练代码)

随着医学影像技术和计算机视觉技术的快速发展&#xff0c;医疗诊断中的自动化工具正逐渐成为临床应用中的研究热点。在肝脏肿瘤的早期检测与诊断中&#xff0c;传统的人工方法耗时较长&#xff0c;且容易受医生的主观经验影响&#xff0c;诊断结果的准确性和一致性难以保证。基…

table元素纯css无限滚动,流畅过度

<template><div class"monitor-table-container"><table class"monitor-table"><thead><th>标题</th><th>标题</th><th>标题</th><th>标题</th></thead><tbody ref&quo…