学工管理系统
小明:最近我在绵阳的一所高校实习,发现他们还在用手工记录学生工作信息,效率很低。我打算开发一个学生工作管理系统来优化这个流程。
小李:听起来不错!你打算用什么技术来实现呢?
小明:我想用Python来开发,因为它有丰富的库支持,而且语法简洁,适合快速开发。
小李:那数据库呢?你们学校的数据结构是怎样的?
小明:目前数据主要是学生的基本信息、工作内容、时间安排和负责人。我打算用MySQL来存储这些数据。
小李:那你得先设计数据库表结构。比如,学生表、工作表、任务表等。
小明:对,我先建了一个学生表,包括学号、姓名、年级、专业等字段;然后是工作表,包含工作ID、名称、类型、时间、负责人等。
小李:那前端呢?你是打算用Web界面还是桌面应用?
小明:我觉得Web界面更方便,用户可以通过浏览器访问,不需要安装额外软件。所以我决定用Flask框架来做后端,配合HTML/CSS/JavaScript做前端。
小李:那你可以用Flask的模板引擎来渲染页面,比如Jinja2。
小明:没错,我还加了登录功能,防止未经授权的访问。
小李:安全方面需要注意什么呢?比如密码存储。
小明:我会用bcrypt对密码进行哈希处理,避免明文存储。
小李:那数据展示部分呢?有没有考虑用表格或者图表来呈现数据?
小明:是的,我用了Bootstrap来美化界面,同时用JavaScript动态加载数据,让用户可以按条件筛选。
小李:听起来挺全面的。那你能给我看看代码吗?
小明:当然可以!这是我写的数据库模型部分。
from flask_sqlalchemy import SQLAlchemy

from flask_login import UserMixin
db = SQLAlchemy()
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
student_id = db.Column(db.String(10), unique=True, nullable=False)
name = db.Column(db.String(50), nullable=False)
grade = db.Column(db.String(10))
major = db.Column(db.String(50))
class Work(db.Model):
id = db.Column(db.Integer, primary_key=True)
work_name = db.Column(db.String(100), nullable=False)
work_type = db.Column(db.String(50))
time = db.Column(db.DateTime)
supervisor = db.Column(db.String(50))
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(120), nullable=False)
小李:这段代码看起来没问题,但要注意SQL注入的问题。
小明:对,我已经用Flask-SQLAlchemy的查询方法来防止这个问题。
小李:那登录功能是怎么实现的?
小明:我用了Flask-Login来管理用户会话,登录时验证用户名和密码是否匹配数据库中的记录。
from flask_login import login_user, logout_user, login_required, current_user
from werkzeug.security import check_password_hash
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user and check_password_hash(user.password, password):
login_user(user)
return redirect(url_for('dashboard'))
else:
return '登录失败'
小李:这部分代码很清晰,但需要处理异常情况,比如用户不存在或密码错误。
小明:是的,我已经加上了错误提示,并且返回适当的HTTP状态码。
小李:那前端页面呢?你是怎么设计的?
小明:我用的是Bootstrap框架,页面布局简单明了,有导航栏、侧边栏和主内容区。
欢迎,{{ current_user.username }}
| 工作名称 | 类型 | 时间 | 负责人 |
|---|---|---|---|
| {{ work.work_name }} | {{ work.work_type }} | {{ work.time }} | {{ work.supervisor }} |
小李:这个页面设计得很好,用户操作起来也很方便。
小明:谢谢!我还加入了搜索功能,用户可以根据工作类型或时间来筛选数据。
@app.route('/search', methods=['GET'])
def search():
work_type = request.args.get('type')
start_date = request.args.get('start')
end_date = request.args.get('end')
query = Work.query
if work_type:
query = query.filter(Work.work_type == work_type)
if start_date and end_date:
query = query.filter(Work.time.between(start_date, end_date))
works = query.all()
return render_template('search_results.html', works=works)
小李:这个搜索功能很实用,特别是对于大量数据的时候。
小明:是的,我还考虑到了分页功能,避免一次性加载太多数据。
小李:那整个系统的部署有什么计划吗?
小明:我打算用Heroku或者阿里云来部署,这样用户可以通过互联网访问系统。
小李:那你需要配置好环境变量和数据库连接字符串。
小明:没错,我已经把数据库连接设置为从环境变量中读取,这样部署时不会暴露敏感信息。
app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL')
小李:这很好,提高了系统的安全性。
小明:是的,整个系统现在基本完成了,接下来就是测试和优化。
小李:希望你的系统能帮助绵阳地区的学校提高工作效率。
小明:谢谢!我也希望如此。
