用python3 写一个oa办公系统
时间: 2023-12-29 09:50:52 浏览: 149
办公oa系统
写一个完整的OA办公系统需要涉及到很多方面,包括数据库设计、前后端开发、权限管理等等。这里只提供一个简单的示例,帮助你了解如何使用Python3来实现一个基本的OA办公系统。
1. 数据库设计
首先,需要设计数据库。一个简单的OA系统大致可以包括用户、部门、职位、公告、请假申请、报销申请等模块,因此,我们可以设计如下表结构:
用户表:id、用户名、密码、所属部门、职位等字段
部门表:id、部门名称、上级部门等字段
职位表:id、职位名称等字段
公告表:id、标题、内容、发布时间等字段
请假申请表:id、请假人、请假类型、请假时间、请假理由等字段
报销申请表:id、报销人、报销类型、报销金额、报销时间、报销事由等字段
2. 前后端开发
使用Python3来开发前后端,可以选择以下工具:
后端框架:Flask、Django等
前端框架:Vue.js、React等
数据库:MySQL、PostgreSQL等
在这里,我们选择Flask作为后端框架,Vue.js作为前端框架,MySQL作为数据库。
3. 权限管理
一个完整的OA系统需要进行严格的权限管理,确保用户只能访问其具有权限的模块和功能。在这里,我们可以使用Flask-Login和Flask-Principal等扩展来实现权限管理。
4. 示例代码
下面是一个简单的OA系统示例代码,包括用户登录、公告发布和请假申请等功能。请注意,这只是一个示例,实际应用中还需要进行更多的开发和完善。
```
# -*- coding:utf-8 -*-
from flask import Flask, render_template, request, redirect, url_for
from flask_login import LoginManager, login_user, logout_user, login_required, UserMixin
from flask_principal import Principal, Identity, AnonymousIdentity, identity_changed, Permission, RoleNeed
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/oa_system'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.secret_key = 'your_secret_key'
app.config['SESSION_TYPE'] = 'filesystem'
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.session_protection = 'strong'
login_manager.login_view = 'login'
principals = Principal(app)
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
password = db.Column(db.String(120))
department_id = db.Column(db.Integer, db.ForeignKey('departments.id'))
position_id = db.Column(db.Integer, db.ForeignKey('positions.id'))
class Department(db.Model):
__tablename__ = 'departments'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True)
parent_id = db.Column(db.Integer, db.ForeignKey('departments.id'))
class Position(db.Model):
__tablename__ = 'positions'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True)
class Announcement(db.Model):
__tablename__ = 'announcements'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80))
content = db.Column(db.Text)
create_time = db.Column(db.DateTime)
class LeaveApplication(db.Model):
__tablename__ = 'leave_applications'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
leave_type = db.Column(db.String(80))
leave_time = db.Column(db.DateTime)
reason = db.Column(db.Text)
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
user = User.query.filter_by(username=username).first()
if user is not None and user.password == request.form['password']:
login_user(user)
identity_changed.send(app, identity=Identity(user.id))
return redirect(request.args.get('next') or url_for('index'))
flash('Invalid username or password.')
return render_template('login.html')
@app.route('/logout')
@login_required
def logout():
logout_user()
identity_changed.send(app, identity=AnonymousIdentity())
return redirect(url_for('login'))
@app.route('/')
@login_required
def index():
return render_template('index.html')
@app.route('/announcement', methods=['GET', 'POST'])
@login_required
def announcement():
if request.method == 'POST':
title = request.form['title']
content = request.form['content']
create_time = datetime.now()
announcement = Announcement(title=title, content=content, create_time=create_time)
db.session.add(announcement)
db.session.commit()
flash('Announcement created successfully.')
announcements = Announcement.query.all()
return render_template('announcement.html', announcements=announcements)
@app.route('/leave_application', methods=['GET', 'POST'])
@login_required
def leave_application():
if request.method == 'POST':
leave_type = request.form['leave_type']
leave_time = request.form['leave_time']
reason = request.form['reason']
leave_application = LeaveApplication(user_id=current_user.id, leave_type=leave_type, leave_time=leave_time, reason=reason)
db.session.add(leave_application)
db.session.commit()
flash('Leave application created successfully.')
return render_template('leave_application.html')
if __name__ == '__main__':
app.run()
```
以上代码仅供参考,实际开发中还需要进行更多的优化和完善。
阅读全文