如何在Django admin站点的已注册模型中添加自定义按钮
实现方案
1. 新增按钮UI代码
先定位到现有删除按钮的渲染逻辑,在同级位置插入通过、拒绝按钮,记得绑定对应用户的申请ID、邮箱等核心业务数据作为自定义属性,方便后续请求接口时传参:
<!-- 原有删除按钮 --> <button class="btn btn-danger delete-btn">删除</button> <!-- 新增自定义按钮 --> <button class="btn btn-success approve-btn" data-app-id="xxx" data-user-email="xxx@xx.com">通过</button> <button class="btn btn-warning reject-btn" data-app-id="xxx" data-user-email="xxx@xx.com">拒绝</button>
注:上述data-*属性的取值替换为你实际渲染的动态业务数据即可
2. 绑定按钮点击事件
给两个新增按钮绑定点击回调,触发时请求后端业务接口完成状态更新和邮件发送:
// 原生JS实现通过按钮逻辑 document.querySelector('.approve-btn').addEventListener('click', async function() { const reqParams = { app_id: this.dataset.appId, user_email: this.dataset.userEmail } const res = await fetch('/api/approve-app', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(reqParams) }) res.ok ? alert('审核通过,通知邮件已发送') : alert('操作失败,请重试') }) // 拒绝按钮逻辑仅需修改接口地址和提示文案即可 document.querySelector('.reject-btn').addEventListener('click', async function() { const reqParams = { app_id: this.dataset.appId, user_email: this.dataset.userEmail } const res = await fetch('/api/reject-app', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(reqParams) }) res.ok ? alert('申请已驳回,通知邮件已发送') : alert('操作失败,请重试') })
3. 后端接口实现(PHP示例)
编写对应接口处理业务逻辑,调用邮件服务发送通知:
// 审核通过接口示例 public function approveApp() { $appId = $_POST['app_id']; $userEmail = $_POST['user_email']; // 1. 更新业务表申请状态为通过 $updateStatus = $db->exec("UPDATE application SET status = 1 WHERE id = {$appId}"); if(!$updateStatus) return json_encode(['code'=>0,'msg'=>'状态更新失败']); // 2. 发送通知邮件 $mailStatus = mail( $userEmail, '申请审核结果通知', '您好,您提交的申请已审核通过', 'From: system@yourdomain.com' ); return json_encode(['code'=>$mailStatus?1:0,'msg'=>$mailStatus?'操作成功':'邮件发送失败']); } // 驳回接口仅需修改更新的状态值和邮件内容即可
如果你使用的是Laravel、SpringBoot、Node.js等框架,直接调用框架内置的邮件服务组件即可,不需要手动实现底层邮件发送逻辑。
如果需要支持富文本邮件模板、发送失败重试等需求,可以接入第三方邮件服务商的SDK完成开发。
内容的提问来源于stack exchange,提问作者JustinAlvarez
相关产品推荐
相关产品推荐

