Python作业提交与批改系统
随着Python编程语言在教育和商业领域的普及,建立一个高效的作业提交和批改系统变得尤为重要。本博客将介绍如何使用Python搭建一个简单但功能齐全的作业提交与批改系统。本文将详细介绍技术实现,包括代码编写及相关解释。
目录
- 项目介绍
- 技术选型
- 环境配置
- 系统实现
- 用户认证模块
- 作业提交模块
- 作业批改模块
- 部署与测试
- 总结
项目介绍
本项目旨在构建一个在线 Python 作业提交与批改系统,支持教师创建和管理作业,学生提交和查看作业,教师对作业进行批改和反馈。我们将使用 Flask 作为后端框架,以 SQLite 作为数据库,前端部分使用 HTML 和 Bootstrap 实现页面显示。
项目功能
- 用户注册与登录:支持教师和学生角色的注册与登录。
- 作业管理:教师可以创建、更新和删除作业。
- 作业提交:学生可以查看作业列表并提交作业。
- 作业批改:教师可以查看和批改学生提交的作业。
- 信息反馈:教师可以对学生的作业给出反馈和评分。
技术选型
为了实现上述功能,本项目将使用以下技术:
- 后端框架:Flask
- 前端技术:HTML、CSS、JavaScript、Bootstrap
- 数据库:SQLite
- Python 版本:3.9+
环境配置
在开始进行开发之前,我们需要配置开发环境。
安装 Python 及相关依赖
首先,确保系统上安装了 Python 3.9 或以上版本。可以通过以下命令检查:
python --version
然后,安装 Flask 和其他依赖包:
pip install flask flask_sqlalchemy flask_login
系统实现
项目结构
首先,规划项目的目录结构:
homework_system/
│
├── app/
│ ├── __init__.py
│ ├── models.py
│ ├── forms.py
│ ├── views.py
│ └── static/
│ └── style.css
│ └── templates/
│ ├── base.html
│ ├── home.html
│ ├── login.html
│ ├── register.html
│ ├── create_homework.html
│ ├── submit_homework.html
│ └── grade_homework.html
├── migrations/
├── config.py
├── manage.py
└── run.py
配置文件
首先,创建 config.py
文件,用于配置数据库及其他应用参数:
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'a_secret_key'
SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
应用初始化
在 app/__init__.py
文件中进行 Flask 应用的初始化:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from config import Config
db = SQLAlchemy()
login_manager = LoginManager()
login_manager.login_view = 'login'
login_manager.login_message_category = 'info'
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
login_manager.init_app(app)
with app.app_context():
from . import routes
db.create_all()
return app
app = create_app()
数据库模型
在 app/models.py
中创建数据库模型:
from app import db, login_manager
from flask_login import UserMixin
from datetime import datetime
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
role = db.Column(db.String(20), nullable=False) # 'student' or 'teacher'
homeworks = db.relationship('Homework', backref='author', lazy=True)
class Homework(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
due_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
teacher_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
submissions = db.relationship('Submission', backref='homework', lazy=True)
class Submission(db.Model):
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.Text, nullable=False)
submit_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
grade = db.Column(db.Integer, nullable=True)
feedback = db.Column(db.Text, nullable=True)
student_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
homework_id = db.Column(db.Integer, db.ForeignKey('homework.id'), nullable=False)
表单
在 app/forms.py
文件中定义表单:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, TextAreaField, IntegerField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
from app.models