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
posted @   saromman  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2022-11-28 浏览器的F12控制台手工拔下来作业提交的清单
点击右上角即可分享
微信分享提示