- 注册登录
- 显示题目
- 提供编程文本框,后端可以接收rust程序
- 后端用docker运行自动判题,并返回json格式信息
- 已建立好数据库,测试了基本的数据库交互功能
- 无需注册也会显示登录成功 程序运行成功无报错
- 提示按钮按设计应该变成绿色,但是仍旧显示灰色,不同状态,结果的圆形按钮都会对应不同的颜色并显示提示词)
大家添加功能尽量单独的功能模块写成一个代码文件,不要交叉到别的模块。
在项目中,sqlx 是一个用于与 MySQL 数据库交互的异步库。它的主要作用是执行 SQL 查询和管理数据库操作。以下是 sqlx 在项目中的具体用途:
sqlx通过rocket_db_pools提供的连接池与 MySQL 数据库建立连接。- 在代码中,
Db是一个通过rocket_db_pools定义的数据库连接池:#[derive(Database)] #[database("mysql_database")] struct Db(sqlx::MySqlPool);
- 这个连接池会在 Rocket 启动时初始化,并在路由中通过
Connection<Db>注入。
sqlx提供了多种方法来执行 SQL 查询,例如:sqlx::query:用于动态查询。sqlx::query!:用于编译时验证的查询(需要offline功能)。
- 在项目中,
sqlx被用来执行以下操作:-
创建表:
sqlx::query( r#" CREATE TABLE IF NOT EXISTS run_logs ( id INT AUTO_INCREMENT PRIMARY KEY, code TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) "# ) .execute(&**db) .await .expect("Failed to create table");
- 这段代码会在数据库中创建一个
run_logs表(如果不存在),用于存储用户提交的代码。
- 这段代码会在数据库中创建一个
-
插入数据:
sqlx::query( r#" INSERT INTO run_logs (code) VALUES (?) "# ) .bind(&input.code) // 手动绑定参数 .execute(&**db) .await .expect("Failed to insert code into database");
- 这段代码会将用户提交的代码插入到
run_logs表中。
- 这段代码会将用户提交的代码插入到
-
sqlx是一个异步库,支持高效的非阻塞数据库操作。- 在项目中,所有数据库操作(如
execute和bind)都是异步的,使用.await来等待操作完成。
- 如果启用了
sqlx的offline功能(如 Cargo.toml 中所示),sqlx::query!宏可以在编译时验证 SQL 查询的正确性。 - 这需要运行
cargo sqlx prepare生成查询验证数据。
在项目中,sqlx 的主要功能包括:
- 管理数据库连接:通过
rocket_db_pools提供的连接池与 MySQL 数据库交互。 - 执行 SQL 查询:
- 创建表(
CREATE TABLE)。 - 插入数据(
INSERT INTO)。
- 创建表(
- 支持异步操作:提高数据库操作的性能。
- 编译时查询验证(如果启用
offline功能)。
如果需要扩展数据库功能,可以使用 sqlx 实现以下功能:
- 查询记录:
- 查询
run_logs表中的所有记录。
let logs = sqlx::query!("SELECT * FROM run_logs") .fetch_all(&**db) .await .expect("Failed to fetch logs");
- 查询
- 删除记录:
- 删除指定的记录。
sqlx::query!("DELETE FROM run_logs WHERE id = ?", id) .execute(&**db) .await .expect("Failed to delete log");
- 分页查询:
- 实现分页功能以支持大规模数据的高效访问。
sqlx 是项目中用于与 MySQL 数据库交互的核心库,主要用于:
- 创建和管理数据库表。
- 存储用户提交的代码。
- 提供高效的异步数据库操作。
将用户注册、登录、题目管理和判题功能拆分到单独的文件中实现,以便更好地组织代码和模块化管理。
src/
├── main.rs # 主入口文件,负责启动服务
├── routes/ # 路由模块
│ ├── auth.rs # 用户注册和登录功能
│ ├── problems.rs # 题目管理功能
│ ├── judge.rs # 判题功能
├── models/ # 数据模型模块
│ ├── user.rs # 用户相关数据模型
│ ├── problem.rs # 题目相关数据模型
│ ├── test_case.rs # 测试用例相关数据模型
├── db.rs # 数据库连接和初始化
main.rs 文件负责启动服务并挂载路由。
负责初始化数据库连接。
实现用户注册和登录功能。
实现题目管理功能。
实现代码提交和判题功能。
-
模块化实现:
- 用户功能在
src/routes/auth.rs。 - 题目管理在
src/routes/problems.rs。 - 判题功能在
src/routes/judge.rs。
- 用户功能在
-
主入口文件:
main.rs负责挂载路由和启动服务。
-
数据库模块:
db.rs负责初始化数据库连接。