视频介绍
部分源码如下
use crate::db::entities;
use crate::db::entities::prelude::AuthUser;
use actix_web::{HttpResponse, Responder, get, post, web};
use askama::Template;
use log::{info, warn};
use sea_orm::{ActiveModelTrait, ActiveValue, DatabaseConnection, EntityTrait};
#[derive(Template)]
#[template(path = "user/user_edit.html")]
struct UserEditTemplate {
user_id: i32,
username: Option<String>,
age: Option<u8>,
}
#[get("/user/edit/{id}")]
async fn user_edit_get(
conn: web::Data<DatabaseConnection>,
path: web::Path<i32>,
) -> impl Responder {
let user_id = path.into_inner();
if user_id == 0 {
// 新建用户,返回空表单
let template = UserEditTemplate {
user_id,
username: None,
age: None,
};
return match template.render() {
Ok(html) => HttpResponse::Ok().body(html),
Err(e) => {
warn!("Failed to render template: {}", e);
HttpResponse::InternalServerError().body("Failed to render template")
}
};
}
// 编辑现有用户,查询用户信息
match AuthUser::find_by_id(user_id).one(conn.get_ref()).await {
Ok(Some(user)) => {
let template = UserEditTemplate {
user_id,
username: Some(user.username),
age: Some(user.age as u8),
};
match template.render() {
Ok(html) => HttpResponse::Ok().body(html),
Err(e) => {
warn!("Failed to render template: {}", e);
HttpResponse::InternalServerError().body("Failed to render template")
}
}
}
Ok(None) => HttpResponse::NotFound().body("User not found"),
Err(e) => {
warn!("Database error: {}", e);
HttpResponse::InternalServerError().body("Database error")
}
}
}
#[derive(serde::Deserialize)]
struct UserEditForm {
username: String,
age: i32,
}
#[post("/user/edit/{id}")]
async fn user_edit(
conn: web::Data<DatabaseConnection>,
path: web::Path<i32>,
form: web::Form<UserEditForm>,
) -> impl Responder {
let user_id = path.into_inner();
let username = form.username.clone();
let age = form.age;
if user_id == 0 {
// 创建新用户
let new_user = entities::auth_user::ActiveModel {
username: ActiveValue::Set(username),
age: ActiveValue::Set(age),
..Default::default()
};
match new_user.insert(conn.get_ref()).await {
Ok(_) => {
info!("User created successfully");
// 创建成功后重定向到用户列表页
HttpResponse::Found()
.append_header(("Location", "/user/list"))
.finish()
}
Err(e) => {
warn!("Failed to create user: {}", e);
HttpResponse::InternalServerError().body("Failed to create user")
}
}
} else {
// 编辑现有用户
match AuthUser::find_by_id(user_id).one(conn.get_ref()).await {
Ok(Some(user)) => {
let mut active_user: entities::auth_user::ActiveModel = user.into();
active_user.username = ActiveValue::Set(username);
active_user.age = ActiveValue::Set(age);
match active_user.update(conn.get_ref()).await {
Ok(_) => {
info!("User updated successfully");
// 编辑成功后重定向到用户列表页
HttpResponse::Found()
.append_header(("Location", "/user/list"))
.finish()
}
Err(e) => {
warn!("Failed to update user: {}", e);
HttpResponse::InternalServerError().body("Failed to update user")
}
}
}
Ok(None) => HttpResponse::NotFound().body("User not found"),
Err(e) => {
warn!("Database error: {}", e);
HttpResponse::InternalServerError().body("Database error")
}
}
}
}