10 个版本
0.1.0 | 2021 年 1 月 25 日 |
---|---|
0.0.9 | 2020 年 8 月 5 日 |
0.0.1 | 2020 年 7 月 31 日 |
在 数据库接口 中排名 #1853
18KB
261 行
rdatatables
这是在 rust-lang 上对 datatables AJAX API 的 "后端" 实现。
按照以下说明使用
- 在您的 crate 中添加 rdatatables = "0.0.1";
- 使用 rdatatables::*; (您无论如何都需要所有内容);
- 首先,您需要一个用于您的 "ajax"-POST 的监听函数。例如
/* Your datat structers */
use crate::models::rdatatables::{
ClerksViewListing, ClerksViewListingClerkInfo, ClerksViewListingStatusClerk,
};
#[post("/list", data = "<query>")]
pub fn list(
_adminitrative: AdminUser,
query: LenientForm<DataTableQuery>,
) -> Json<
OutcomeData<(
ClerksViewListing,
ClerksViewListingStatusClerk,
ClerksViewListingClerkInfo,
)>,
> {
Json(datatables_query::<(
ClerksViewListing,
ClerksViewListingStatusClerk,
ClerksViewListingClerkInfo,
)>(
Tables {
origin: ("sysuser", "user_id"), /* From */
fields: vec![
"clerk_info.clerk_image",
"sysuser.user_name",
"sysuser.user_uni",
"sysuser.user_balance",
"status_clerk.is_available",
"sysuser.user_status",
"sysuser.user_id",
], /* Fields to seek for */
join_targets: Some(vec![ /* If you desire to not do a Join at all, just give a None here */
/* (join_type, (target, target_key), (origin, origin_key) */
("inner", ("clerk_info", "user_id"), ("sysuser", "user_id")),
(
"inner",
("status_clerk", "clerk_id"),
("sysuser", "user_id"),
),
]),
datatables_post_query: query.into_inner(), /* Incoming Query parses to the desired struct. */
query: None, /* Our builded query holder */
},
crate::establish_connection(),
))
}
- 然后您的结构体(必须是 QuerybleByName 且也必须是 Identifiable),如下所示
/* ClerksViewListing (Implements joins) */
#[derive(Debug, QueryableByName, Serialize, Clone)]
#[table_name = "sysuser"]
pub struct ClerksViewListing {
pub user_name: String,
pub user_uni: Option<String>,
pub user_balance: f64,
pub user_id: i32,
}
#[derive(Debug, QueryableByName, Serialize, Clone)]
#[table_name = "status_clerk"]
pub struct ClerksViewListingStatusClerk {
pub is_available: Option<i32>,
}
#[derive(Debug, QueryableByName, Serialize, Clone)]
#[table_name = "clerk_info"]
pub struct ClerksViewListingClerkInfo {
pub clerk_image: Option<String>,
}
- 您的前端与 datatable 的关联应如下所示,不要忘记 "post" 和 "columns",
$('#clientsTable').DataTable({
"serverSide": true,
"ordering": true,
"info": true,
"ajax":
{
url: "/admin/clerk/list",
type: "POST"
},
"columns": [
{ "data": "1.clerk_image" },
{ "data": "0.user_name" },
{ "data": "0.user_uni" },
{ "data": "0.user_balance" },
{ "data": "2.is_available" },
{ "data": "0.user_status" },
{ "data": "0.user_id" }, /* Stands for user_id */
]
});
祝您玩得开心。在推特上关注我:@luisvonmuller
我开放接受机会 ;) [email protected]
此 crate 可能会通过前端 datatables 的 "搜索" 字段受到 SQL 注入的影响。这将会尽快修复。 - 如果您能为我们修复它,请,做吧!
缺少什么?
- 正则表达式搜索
- 组合列搜索
- 修复迭代列解析器中的性能问题(目前库通过详尽的顺序 IF 语句解析列。必须修复。)
依赖
~13MB
~255K SLoC