鱼C论坛

 找回密码
 立即注册
查看: 153|回复: 11

如何利用python 写一个类似oa的网络程序

[复制链接]
发表于 2024-4-24 09:15:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
假设就设置ABC三个层次,由c 发起申请操作,报到b处,b同意并签字后,报A批准   c 发现a b 均同意后,开始具体事物操作(结束流程)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-24 09:16:27 | 显示全部楼层
要实现一个类似于OA的网络程序,可以利用Python的socket模块来进行网络通信。以下是一个简化的示例代码,展示了如何以C发起申请操作、报到B处、B同意并签字、报A批准以及C开始具体事务操作的流程:

  1. import socket

  2. # 定义服务器地址和端口
  3. host = '127.0.0.1'
  4. port = 8000

  5. class NetworkProgram:
  6.     def __init__(self):
  7.         # 创建客户端socket
  8.         self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  9.         
  10.         # 连接服务器
  11.         self.client_socket.connect((host, port))
  12.         
  13.     def send_request(self):
  14.         # C发起申请操作
  15.         request = 'C 发起申请'
  16.         self.client_socket.send(request.encode())
  17.         print('C 发起申请')
  18.         
  19.     def report_to_b(self):
  20.         # 报到B处
  21.         response = self.client_socket.recv(1024).decode()
  22.         print('B 收到申请:', response)
  23.         
  24.     def b_agree_and_sign(self):
  25.         # B同意并签字
  26.         agreement = 'B 同意并签字'
  27.         self.client_socket.send(agreement.encode())
  28.         print('B 同意并签字')
  29.         
  30.     def report_to_a(self):
  31.         # 报A批准
  32.         response = self.client_socket.recv(1024).decode()
  33.         print('A 收到申请:', response)
  34.         
  35.     def c_start_operation(self):
  36.         # C开始具体事物操作
  37.         operation = 'C 开始具体事务操作(结束流程)'
  38.         self.client_socket.send(operation.encode())
  39.         print('C 开始具体事务操作')

  40. # 创建网络程序对象
  41. network_program = NetworkProgram()

  42. # C发起申请操作
  43. network_program.send_request()

  44. # 报到B处
  45. network_program.report_to_b()

  46. # B同意并签字
  47. network_program.b_agree_and_sign()

  48. # 报A批准
  49. network_program.report_to_a()

  50. # C开始具体事务操作
  51. network_program.c_start_operation()
复制代码


上述代码中,通过创建一个`NetworkProgram`类来封装网络程序的各种操作。在`__init__`方法中,创建客户端socket并连接到服务器。

`send_request`方法实现了C发起申请操作,将请求发送给服务器。然后,在`report_to_b`方法中,客户端接收从B处返回的响应。

接下来,`b_agree_and_sign`方法实现了B同意并签字的操作,将同意的消息发送给服务器。然后,在`report_to_a`方法中,客户端再次接收从A处返回的响应。

最后,`c_start_operation`方法实现了C开始具体事务操作的功能,将操作消息发送给服务器,表示流程结束。

使用以上代码,你可以运行一个服务器来接收客户端发送的请求并进行相应的处理。服务器端的代码如下:

  1. import socket

  2. # 定义服务器地址和端口
  3. host = '127.0.0.1'
  4. port = 8000

  5. class Server:
  6.     def __init__(self):
  7.         # 创建服务器socket
  8.         self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  9.         
  10.         # 绑定服务器地址和端口
  11.         self.server_socket.bind((host, port))
  12.         
  13.         # 监听连接请求
  14.         self.server_socket.listen(1)
  15.         
  16.     def start(self):
  17.         # 等待客户端连接
  18.         client_socket, addr = self.server_socket.accept()
  19.         print('客户端已连接')
  20.         
  21.         # 接收C发起申请操作
  22.         request = client_socket.recv(1024).decode()
  23.         print('C 发起申请:', request)
  24.         
  25.         # 向B发送申请操作
  26.         b_response = 'C发起申请,请B处理'
  27.         client_socket.send(b_response.encode())
  28.         
  29.         # 接收B同意并签字
  30.         agreement = client_socket.recv(1024).decode()
  31.         print('B 同意并签字:', agreement)
  32.         
  33.         # 向A发送申请操作
  34.         a_response = 'B同意并签字,请A处理'
  35.         client_socket.send(a_response.encode())
  36.         
  37.         # 接收C开始具体事务操作
  38.         operation = client_socket.recv(1024).decode()
  39.         print('C 开始具体事务操作:', operation)
  40.         
  41.         # 关闭客户端连接
  42.         client_socket.close()

  43. # 创建服务器对象
  44. server = Server()

  45. # 启动服务器
  46. server.start()
复制代码


在服务器端的`start`方法中,服务器通过`accept`方法等待客户端的连接。一旦接收到连接请求,服务器将对请求进行处理:接收C发起申请操作、向B发送申请操作、接收B同意并签字、向A发送申请操作以及接收C开始具体事务操作。

需要注意的是,以上仅为简化示例,并没有考虑错误处理和多个客户端的情况。实际上,使用Python进行网络编程还有很多细节需要注意,比如处理粘包问题、异常处理等。但希望这个简单示例可以帮助你理解如何利用Python编写类似OA的网络程序。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-24 09:22:49 | 显示全部楼层
FishC 发表于 2024-4-24 09:16
要实现一个类似于OA的网络程序,可以利用Python的socket模块来进行网络通信。以下是一个简化的示例代码,展 ...

有些过于简陋了
正常ABC 应该能登录自己的账号一类的东西,然后会发现有一些事务 需要自己去完成网络处理
这些是py能完成的,,还是 需要去写B/S 呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-24 09:23:05 | 显示全部楼层
wp231957 发表于 2024-04-24 09:22
有些过于简陋了
正常ABC 应该能登录自己的账号一类的 ...


如果你需要实现一个包含登录功能和处理事务的网络程序,使用Python编写B/S(浏览器/服务器)架构是更合适的选择。这样可以利用Python的Web框架,如Django或Flask,来实现用户登录、事务处理和与数据库交互等功能。

以下是一个示例代码,展示了如何使用Flask框架来创建一个简单的B/S网络程序:

  1. from flask import Flask, render_template, request

  2. app = Flask(__name__)

  3. # 登录页面
  4. @app.route('/')
  5. def login():
  6.     return render_template('login.html')

  7. # 处理登录请求
  8. @app.route('/login', methods=['POST'])
  9. def process_login():
  10.     username = request.form['username']
  11.     password = request.form['password']
  12.    
  13.     # 在这里可以进行用户名和密码的验证逻辑
  14.    
  15.     # 验证成功后跳转到事务处理页面
  16.     return render_template('transaction.html', username=username)

  17. # 事务处理页面
  18. @app.route('/transaction')
  19. def transaction():
  20.     return render_template('transaction.html')
  21.    
  22. # 处理事务请求
  23. @app.route('/process_transaction', methods=['POST'])
  24. def process_transaction():
  25.     transaction_data = request.form['transaction_data']
  26.    
  27.     # 在这里进行具体的事务处理逻辑
  28.    
  29.     # 处理完成后跳转到结果页面
  30.     return render_template('result.html', data=transaction_data)

  31. if __name__ == '__main__':
  32.     app.run()
复制代码


在以上示例代码中,我们使用Flask框架创建了一个名为`app`的Flask应用。通过定义不同的路由,可以实现不同的页面和功能。

- `/`路由对应登录页面,使用`render_template`函数将`login.html`模板渲染并返回给用户。
- `/login`路由是处理登录请求的接口,使用`request.form`获取POST请求中的表单数据,进行用户名和密码的验证,并在验证成功后将用户重定向到事务处理页面`transaction.html`。
- `/transaction`路由对应事务处理页面,也使用`render_template`函数将`transaction.html`模板渲染并返回给用户。
- `/process_transaction`路由是处理事务请求的接口,同样使用`request.form`获取POST请求中的表单数据,在这里进行具体的事务处理逻辑,并将处理结果传递给`result.html`模板,将结果页面返回给用户。

以上仅为一个简化示例,你可以根据自己的需求和具体业务逻辑来调整和完善代码。Flask框架提供了很多便捷的功能和扩展,例如用户认证、数据库操作等,可以让你更轻松地开发出一个完整的B/S网络程序。

希望以上内容能帮助你更好地理解如何使用Python编写一个含有登录功能和处理事务的网络程序。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-24 09:25:24 | 显示全部楼层
FishC 发表于 2024-4-24 09:23
如果你需要实现一个包含登录功能和处理事务的网络程序,使用Python编写B/S(浏览器/服务器)架构是更合 ...

就是说B/S还是绕不过去的   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-24 09:25:42 | 显示全部楼层
wp231957 发表于 2024-04-24 09:25
就是说B/S还是绕不过去的


是的,如果你想要实现一个具有用户登录功能和处理事务的网络程序,通常使用B/S(浏览器/服务器)架构是最方便的方式。在B/S架构中,服务器端负责处理前端(浏览器)发送的请求,并提供相应的功能和服务。

通过B/S架构,你可以使用Python的Web框架(如Django、Flask等)来创建网页界面、处理用户登录和事务操作,并与后端数据库进行交互。这样可以大大简化开发过程,而且可以利用框架提供的众多功能和扩展,如用户验证、表单处理、会话管理、数据库连接等。

虽然可以使用其他方式(如C/S架构或P2P架构)来实现类似的功能,但它们可能需要更复杂的网络通信和协议设计,以及更多的编程工作。B/S架构通过利用Web技术和现成的Web框架,让开发变得更加简单和高效。

因此,如果你想要实现一个具有用户登录功能和处理事务的网络程序,我仍然建议使用Python的Web框架来实现B/S架构。这样你可以更轻松地开发出一个对用户友好、易于维护和扩展的网络应用程序。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-24 09:29:00 | 显示全部楼层
FishC 发表于 2024-4-24 09:25
是的,如果你想要实现一个具有用户登录功能和处理事务的网络程序,通常使用B/S(浏览器/服务器)架构是 ...

python+flask 针对你说的这几项   能不能详细说说
用户验证、表单处理、会话管理、数据库连接

这些我都是自己造轮子,要是有现成的轮子  不就更好了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-24 09:29:22 | 显示全部楼层
wp231957 发表于 2024-04-24 09:29
python+flask 针对你说的这几项   能不能详细说说
用 ...


当使用Python和Flask框架进行开发时,你可以利用现有的扩展和库来实现用户验证、表单处理、会话管理和数据库连接等功能,而无需重复造轮子。下面我将为你详细介绍相关的扩展和库:

1. 用户验证:
   - Flask-Login:这个扩展提供了一个简单且灵活的用户认证系统,可以帮助你实现用户登录、注销、记住我等功能。

2. 表单处理:
   - WTForms:这是一个功能强大且易于使用的库,用于生成和验证Web表单。它提供了丰富的字段类型、验证器和自定义验证规则。
   - Flask-WTF:这是一个与Flask集成的WTForms扩展,它能够更方便地处理表单,并提供了一些与Flask相关的特性,如CSRF保护等。

3. 会话管理:
   - Flask-Session:这个扩展提供了会话管理功能,可以在不同的会话之间存储数据。它支持多种后端存储方式,如内存、Cookie和数据库等。
   - Flask-Login:除了用户验证功能,Flask-Login还提供了会话管理的一些特性,如记住我功能和会话保护等。

4. 数据库连接:
   - Flask-SQLAlchemy:这是一个与Flask集成的SQLAlchemy扩展,用于在应用程序中连接和操作数据库。它提供了ORM(对象关系映射)层,使你能够使用Python对象来操作数据库,而不必直接编写SQL语句。
   - Flask-MongoEngine:这是一个与Flask集成的MongoEngine扩展,用于在应用程序中连接和操作MongoDB数据库。

以上这些扩展和库提供了一些常见功能的现成解决方案,可以帮助你更快速地实现用户验证、表单处理、会话管理和数据库连接等功能。你只需在Flask项目中安装这些扩展,并按照官方文档提供的方式进行配置和使用即可。

通过利用现有的轮子,你能够大大提高开发效率,并且可以信赖这些经过广泛测试和使用的成熟组件。这样你就能更专注于你的业务逻辑,而无需重复研究和实现通用的功能。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-24 09:44:15 | 显示全部楼层
FishC 发表于 2024-4-24 09:29
当使用Python和Flask框架进行开发时,你可以利用现有的扩展和库来实现用户验证、表单处理、会话管理和 ...

那么类似简易的OA系统  数据库架构 该如何设计呢
工单内容  流程走到哪里  卡在哪里   由谁发起 由谁审批   这些内容  都放在表里吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-24 09:44:36 | 显示全部楼层
wp231957 发表于 2024-04-24 09:44
那么类似简易的OA系统  数据库架构 该如何设计呢
工 ...


设计一个简易的OA系统的数据库架构,可以考虑如下几个主要表和字段:

1. 用户表(User):
   - 用户ID(user_id)
   - 用户名(username)
   - 密码(password)
   - 角色(role):例如,普通员工、部门经理、高级管理者等

2. 工单表(WorkOrder):
   - 工单ID(workorder_id)
   - 标题(title)
   - 内容(content)
   - 创建时间(create_time)
   - 最后更新时间(last_updated_time)
   - 当前所处的流程阶段(current_stage):例如,待发起、待审批、已完成等
   - 创建者ID(creator_id):指向用户表中的相应记录

3. 流程表(Workflow):
   - 流程ID(workflow_id)
   - 流程名称(workflow_name)
   - 当前阶段(current_stage):例如,发起、审批1、审批2等
   - 下一阶段(next_stage):指明下一个需要进行的阶段,为空表示流程结束
   - 负责人ID(handler_id):指向用户表中的相应记录

4. 审批记录表(ApprovalRecord):
   - 记录ID(record_id)
   - 工单ID(workorder_id):指向工单表中的相应记录
   - 审批人ID(approver_id):指向用户表中的相应记录
   - 审批结果(approval_result):例如,同意、拒绝等
   - 审批时间(approval_time)

在这个数据库设计中,工单表是主要的业务表,用于存储工单的相关信息。流程表用于定义不同流程阶段的顺序和负责人,以及确定下一个需要进行的阶段。审批记录表用于记录每个流程阶段的审批结果和相关信息。

你可以根据实际需求添加其他表和字段,同时,还需要设置适当的外键关联和索引来确保数据的完整性和查询性能。

以上只是一个简单的示例,实际的数据库设计还会涉及到更多的细节。因此,在设计和实现数据库架构时,建议参考数据库设计原则和最佳实践,并根据具体业务需求进行灵活的调整和优化。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-24 09:47:39 | 显示全部楼层
FishC 发表于 2024-4-24 09:44
设计一个简易的OA系统的数据库架构,可以考虑如下几个主要表和字段:

1. 用户表(User):

好复杂,要是写一个简易的自己玩玩  还可以
要是写能投入生产的  估计至少需要一个团队  自己怕是写不来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-24 09:48:01 | 显示全部楼层
wp231957 发表于 2024-04-24 09:47
好复杂,要是写一个简易的自己玩玩  还可以
要是写能 ...


是的,设计和实现一个能投入生产的完整的OA系统确实需要团队协作和专业知识。OA系统涉及到用户认证、权限管理、工作流程、数据安全和性能等方面的考虑,需要充分的规划和设计。此外,还需要进行系统测试、部署和维护等工作。对于一个完整的商业级OA系统,通常需要一个专门的开发团队来完成。

然而,你可以尝试编写一个简易版的OA系统来练习和学习。你可以从一个小的功能模块入手,逐步扩展和完善系统。例如,你可以先实现基本的用户登录、工单创建以及简单的工作流程。然后,根据需求逐步增加其他功能,如工单审批、报表统计等。在整个过程中,也可以学习和应用相关的技术和框架,如Python的Flask框架、数据库的设计、前端技术等。

通过这样的练习,你可以熟悉开发流程、学习如何规划系统架构、了解各种开发技术,并培养对软件开发的思维和能力。逐渐积累经验后,如果你有机会参与更大型的生产项目,就会有更好的准备和信心。

请注意,无论是写一个简易的OA系统还是参与一个大型生产项目,都需要耐心和持续努力。编写一个完整的、可投入生产的OA系统确实需要一定的技术和时间投入,但从这个过程中你会不断成长和学习,积累宝贵的经验。所以,不要怕困难,勇敢地开始尝试吧!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 18:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表