django中admin模块中修改密码的form
admin的自定义:
- 可以自定义一个admin,需要三个步骤,都是在项目的settings.py同级目录下操作:
第一步:自定义adminsite类:
- 在这个目录下建立myadmin.py,然后自定义一个类,让这个类继承admin.AdminSite,代码如下:
class MyAdminSite(admin.AdminSite):
password_change_template = 'admin/auth/user/change_password.html'
def admin_view(self, view, cacheable=False):
def inner(request, *args, **kwargs):
if not self.has_permission(request):
print(request.path)
if request.path == reverse('admin:logout', current_app=self.name):
index_path = reverse('admin:index', current_app=self.name)
print(index_path)
return HttpResponseRedirect(index_path)
return redirect_to_login( request.get_full_path(),'/user/login.html')
return view(request, *args, **kwargs)
if not cacheable:
inner = never_cache(inner)
if not getattr(view, 'csrf_exempt', False):
inner = csrf_protect(inner)
return update_wrapper(inner, view)
- 这个类中还能定义其他 的模板,我这里只定义了修改密码的模板,还可以进行如下模板的自定义:
``` python
login_form = None
index_template = None
app_index_template = None
login_template = None
logout_template = None
password_change_template = None
password_change_done_template = None
### 第二步:再创建一个myapps.py,内容如下:
```python
from django.contrib.admin.apps import AdminConfig
class MyAdminConfig(AdminConfig):
default_site = 'mBlog.myadmin.MyAdminSite'
# mBlog是项目名称,请注意,这里字符区分大小写
- 到这里就实现了自定义的admin类。但是一定注意去完成第三步
### 第三步:注册自定义的admin:
- 找到settings.py,找到 INSTALL_APPS,按照如下修改:
```python
INSTALLED_APPS = [
# 'django.contrib.admin',
'mBlog.myapps.MyAdminConfig',
- 同样注意把系统的admin注释掉,然后添加自己的adminConfig,注意项目名称的大小写问题。
### 第四:看到系统自带的修改密码的form代码,展示一下供学习。
- 这个文件在E:\django5env\Lib\site-packages\django\contrib\auth\forms.py ,其中写了好几个关于form的,可以参考其验证、错误信息等方法
```python
class PasswordChangeForm(SetPasswordForm):
"""
A form that lets a user change their password by entering their old
password.
"""
error_messages = {
**SetPasswordForm.error_messages,
"password_incorrect": _(
"Your old password was entered incorrectly. Please enter it again."
),
}
old_password = forms.CharField(
label=_("Old password"),
strip=False,
widget=forms.PasswordInput(
attrs={"autocomplete": "current-password", "autofocus": True}
),
)
field_order = ["old_password", "new_password1", "new_password2"]
def clean_old_password(self):
"""
Validate that the old_password field is correct.
"""
old_password = self.cleaned_data["old_password"]
if not self.user.check_password(old_password):
raise ValidationError(
self.error_messages["password_incorrect"],
code="password_incorrect",
)
return old_password
分类:
python杂项小代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2022-11-28 浏览器的F12控制台手工拔下来作业提交的清单