Django Admin定制:模型表单提交,密码加密与电话号码验证
74 浏览量
更新于2024-08-28
收藏 67KB PDF 举报
在Django框架中,自定义admin模型表单提交功能是一项常见的需求,特别是在处理用户数据时需要额外的安全性和格式验证。本文将介绍如何在Django的admin.py文件中实现对密码加密和电话号码验证的定制功能,以及参考admin模块的源码理解其工作原理。
首先,从admin.py文件开始,我们需要创建一个自定义的ModelAdmin类,继承自`django.contrib.admin.ModelAdmin`。这一步是核心部分,因为它提供了基本的管理界面和行为。例如:
```python
from django.contrib import admin
from .models import Course # 假设有一个名为Course的模型
class CustomCourseAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
# 对密码字段进行加密处理
if not change:
obj.password = encrypt_password(obj.password) # 使用自定义函数加密密码
super().save_model(request, obj, form, change)
def clean_phone_number(self, attrs):
phone_number = attrs.get('phone_number')
if not phone_number.isdigit():
raise forms.ValidationError("电话号码必须全为数字")
return phone_number
fieldsets = [
('基本信息', {'fields': ['title', 'password', 'phone_number']}),
... # 其他fieldsets
]
formfield_overrides = {
models.CharField: {'widget': NumberInput}, # 验证电话号码输入为数字
}
```
在上面的代码中,`save_model`方法被重写,以便在对象保存前加密密码。`clean_phone_number`方法则用于验证电话号码字段只包含数字。`fieldsets`属性定义了表单字段的布局,`formfield_overrides`用于指定特定字段的输入验证规则。
接着,查看`django.contrib.admin.options`模块,尤其是`ModelAdmin`类,它包含了管理视图(如添加、编辑等)的URL映射和视图的包装。`get_urls`方法中,`wrap`函数用于将视图函数封装为具有管理员站点上下文的视图,便于权限管理和URL命名:
```python
def get_urls(self):
urlpatterns = super().get_urls()
info = self.model._meta.app_label, self.model._meta.model_name
urlpatterns += [
url(r'^$', wrap(self.changelist_view), name='%s_%s_changelist' % info),
... # 添加其他URL模式
]
return urlpatterns
```
通过这种方式,你可以自定义表单验证逻辑,确保在admin提交过程中密码安全且电话号码有效。这不仅增强了数据管理的安全性,也提高了用户体验。
总结来说,本文介绍了如何在Django的admin中定制表单提交,包括密码加密和电话号码验证,以及理解`ModelAdmin`类和相关URL配置的基本原理。在实际项目中,可以根据具体需求扩展或调整这些功能。
2020-12-20 上传
2020-09-20 上传
2021-01-21 上传
点击了解资源详情
点击了解资源详情
2020-12-24 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38500664
- 粉丝: 2
- 资源: 889
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常