Intelligent Online Examination System with AI Grading
Project description
FlashExam
English | 中文
FlashExam - Intelligent Online Examination System with AI Grading
A Flask-based intelligent online examination system with AI grading support, compatible with macOS, Linux, and Windows.
Features
- Multiple Question Types: Multiple choice, true/false, short answer, fill-in-the-blank, programming, code execution
- AI Intelligent Grading: Subjective question grading based on Qwen model
- Code Execution: Online execution support for Python, C, Java, Shell, JavaScript
- Reading Comprehension: TOEFL-style reading comprehension exams
- Real-time Monitoring: Tab switch detection and anti-cheating features
- Batch Import: Import questions and students via Excel/CSV
- Admin Panel: Teacher account management and system configuration
- Cross-platform: Supports macOS, Linux, Windows
- Dark/Light Theme: Elegant theme system with automatic system preference detection
- Port Conflict Handling: Automatic detection and resolution of port conflicts
Quick Start
Installation
# Install from PyPI
pip install flashexam
# Or install from source
git clone https://github.com/cycleuser/flashexam.git
cd flashexam
pip install -e .
Initialize Database
flashexam --init-db
Start Server
# Development mode (default)
flashexam
# Production mode
flashexam --mode prod
# High-performance mode
flashexam --mode high-perf --workers 8
# Custom port
flashexam --port 8080
# Force start (kill process using the port)
flashexam --force
Access the System
- Homepage: http://localhost:5000
- Teacher Portal: http://localhost:5000/teacher
- Student Portal: http://localhost:5000/student
- Admin Panel: http://localhost:5000/admin
First startup requires setting up an administrator account.
Command Line Arguments
flashexam [options]
Options:
--mode {dev,prod,high-perf} Run mode (default: dev)
--host HOST Bind address (default: 0.0.0.0)
--port PORT Port number (default: 5000)
--workers N Worker processes (default: 4)
--init-db Initialize database
--force Force start (kill process using port)
--version Show version information
Question Import
Supports importing questions from Excel (.xlsx) and CSV files.
CSV Format
Number,question_type,question_text,option_A,option_B,option_C,option_D,correct_answer,score,difficulty,subject
1,choice,What is Python?,A programming language,A snake,Both A and B,None of the above,A,5,2,Computer Science
2,judge,Python is a compiled language,true,false,,false,3,1,Computer Science
Excel Format
| Number | Material | question_type | question_text | option_A | option_B | correct_answer | score | subject |
|---|---|---|---|---|---|---|---|---|
| 1 | Reading passage text... | choice | Question text | Option A | Option B | A | 5 | English |
Project Structure
flashexam/
├── __init__.py # Application factory
├── cli.py # CLI entry point
├── database.py # Database operations
├── teacher.py # Teacher endpoints
├── student.py # Student endpoints
├── auth.py # Authentication module
├── admin.py # Admin module
├── api.py # API endpoints
├── code_executor.py # Code executor
├── smart_import_manager.py # Question import
├── models.py # Data models
├── utils.py # Utility functions
├── templates/ # HTML templates
├── static/ # Static resources
│ ├── css/
│ │ ├── themes.css # Dark/light theme
│ │ └── app.css # Custom styles
│ └── js/
└── storage/ # Data storage (not in repo)
Development
Install Development Dependencies
pip install -e ".[dev]"
Run Tests
# Run all tests
pytest
# Run with coverage
pytest --cov=flashexam
# Run import tests
python test_import.py
Code Style
ruff check .
ruff format .
Publish to PyPI
# Linux/macOS
./upload_pypi.sh
# Windows
upload_pypi.bat
Tech Stack
- Backend: Flask, SQLite, Flask-Login, Flask-Session
- Frontend: Bootstrap 5, jQuery, Bootstrap Icons
- AI: PyTorch, Transformers, Qwen (optional)
- Server: Waitress (production)
Security Notes
- Database files are excluded from version control
- Session files are excluded from version control
- No sensitive data is uploaded to GitHub or PyPI
- Secret keys should be set via environment variables in production
License
This project is licensed under the GNU General Public License v3.0.
Contributing
Issues and Pull Requests are welcome!
- Fork this repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Create a Pull Request
Author
FlashExam Contributors
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flashexam-2.0.11.tar.gz.
File metadata
- Download URL: flashexam-2.0.11.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9993a4ad735a595fe07c2eef37e3103b0d782a701b9010d75f3e7ea537b060b9
|
|
| MD5 |
4b5f63cbb302f26a4e549aa0c102154e
|
|
| BLAKE2b-256 |
0ddb3c4a82577dae5011ee797b7549aefd55e90a9ae163d67b5b5b8a7b28844d
|
File details
Details for the file flashexam-2.0.11-py3-none-any.whl.
File metadata
- Download URL: flashexam-2.0.11-py3-none-any.whl
- Upload date:
- Size: 1.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b9d594a56218da2528fbc68c942fda190b9e8691ff3fca0f921cf6bf8aae66c
|
|
| MD5 |
13efe809a83036003c6d6ab6f7baecbc
|
|
| BLAKE2b-256 |
7004a032e57a4dd901083a4e833465b7c31fc6cb0c9e1384b20292baeacfe96d
|