Django用户继承AbstractUser后密码为明文

其实本不应该有这个问题,却花了我很久的时间,因为还是初学阶段。

造成这个原因是因为在admin注册的生活没有指定Admin

在app的admin.py里面

  1. from django.contrib.auth.admin import UserAdmin
  2. admin.site.register(UserProfile, UserAdmin)

下面是重点,UserProfileAdmin继承UserAdmin

model

  1. from django.db import models
  2. from django.contrib.auth.models import AbstractUser
  3.  
  4. # Create your models here.
  5.  
  6. # 继承原有user并且添加自定义user数据表
  7. class UserProfile(AbstractUser):
  8. ACCOUNT_TYPE = (
  9. ('advertiser', '广告主'),
  10. ('advertiser_agent', '广告主代理'),
  11. ('inside_staff', '公司内部员工')
  12. )
  13. ADVERTISEMENT_TYPE = (
  14. ('网赚类广告', '网赚类广告'),
  15. ('棋牌类广告', '棋牌类广告'),
  16. ('互动类广告', '互动类广告'),
  17. ('健康类广告', '健康类广告'),
  18. )
  19.  
  20. account_person = models.IntegerField(verbose_name='建账号人', null=True, blank=True)
  21. if_show_gift_account = models.BooleanField(verbose_name='是否显示赠送金额', default=False)
  22. advertisement_type = models.CharField(verbose_name='广告类型', max_length=20, choices=ADVERTISEMENT_TYPE, null=True,
  23. blank=True)
  24.  
  25. account_type = models.CharField(verbose_name='账号类型', max_length=20, choices=ACCOUNT_TYPE, default="advertiser")
  26. nick_name = models.CharField(max_length=50, verbose_name=u"昵称", null=True, blank=True)
  27. gender = models.CharField(verbose_name='性别', max_length=6, choices=(("male", u"男"), ("female", "女")),
  28. default="male")
  29. address = models.CharField(verbose_name='地址', max_length=100, null=True, blank=True)
  30. mobile = models.CharField(verbose_name='电话', max_length=11, null=True, blank=True)
  31. add_time = models.DateTimeField(auto_now=True)
  32.  
  33. class Meta:
  34. verbose_name = "广告主信息"
  35. verbose_name_plural = verbose_name
  36. permissions = (
  37. ('view_userprofile', 'view_userprofile'),
  38. )
  39.  
  40. def __str__(self):
  41. return self.username

Admin注册

  1. from django.contrib import admin
  2. from .models import UserProfile
  3. from django.contrib.auth.hashers import make_password
  4. from django.contrib.auth.models import User, Group,Permission
  5. from users.forms import UserProfileForm
  6. from rest_framework.response import Response
  7. from rest_framework import status
  8. from django.contrib.auth.admin import UserAdmin
  9.  
  10. class UserProfileAdmin(UserAdmin):
  11. # form = UserProfileForm
  12. # FIXME 非管理员自定义返回fieldsets
  13. zdy_fieldsets = [(None, {'classes': ('wide', 'extrapretty'),
  14. 'fields': ('username', 'password', 'if_show_gift_account', 'advertisement_type')})]
  15.  
  16. list_display = ('username', 'nick_name', 'account_type', 'if_show_gift_account', 'advertisement_type')
  17. list_filter = ('is_staff', 'is_superuser')
  18. #exclude = ('account_person','user_permissions',)
  19.  
  20. def get_queryset(self, request):
  21. """
  22. admin 根据不同用户显示表格内容
  23. :param request:
  24. :return:
  25. . """
  26.  
  27. user_id = request.user.id
  28. userporfile = UserProfile.objects.get(id=user_id)
  29. # print(userporfile.account_type)
  30. if userporfile.account_type == 'advertiser_agent':
  31. qs = super().get_queryset(request)
  32. return qs.filter(account_person=user_id)
  33. else:
  34. return UserProfile.objects.all()
  35.  
  36. def changelist_view(self, request, extra_context=None):
  37. """
  38. 根据不同用户 显示list_display
  39. :param request:
  40. :param extra_context:
  41. :return:
  42. """
  43. user_id = request.user.id
  44. userporfile = UserProfile.objects.get(id=user_id)
  45. # print(userporfile.account_type)
  46. if userporfile.account_type != 'advertiser_agent':
  47. self.list_display = ['username', 'nick_name','advertisement_type','if_show_gift_account']
  48. else:
  49. self.list_display = ['username', 'nick_name']
  50. return super(UserProfileAdmin, self).changelist_view(request, extra_context=None)
  51.  
  52. def get_readonly_fields(self, request, obj=None):
  53. """
  54. 设置只读字段
  55. :param request:
  56. :param obj:
  57. :return:
  58. """
  59. if not request.user.is_superuser and request.user.has_perm('users.view_userprofile'):
  60. return [f.name for f in self.model._meta.fields]
  61. return []
  62.  
  63. # FIXME 继承UserAdmin 重写get_fieldsets 方法指定显示哪些字段
  64. def get_fieldsets(self, request, obj=None):
  65. """
  66. 显示指定字段
  67. :param request:
  68. :param obj:
  69. :return:
  70. """
  71. if request.user.is_superuser:
  72.  
  73. return super(UserAdmin, self).get_fieldsets(request, obj)
  74. else:
  75. return self.zdy_fieldsets

注册信息

  1. admin.site.register(UserProfile, UserProfileAdmin)
  1.  

Django admin 继承user表后密码为明文,继承UserAdmin,重写其方法的更多相关文章

  1. Django用户继承AbstractUser后密码为明文

    Django用户继承AbstractUser后密码为明文 其实本不应该有这个问题,却花了我很久的时间,因为还是初学阶段. 造成这个原因是因为在admin注册的生活没有指定Admin 在app的admi ...

  2. django admin扩展user表password验证及set_password

    一般如果扩展了django user内置表,在admin后台创建新用户的时候密码将会变成明文,故而导致登录不成功.所以我们在admin.py可以通过form自定义进行对password进行操作,可以双 ...

  3. Django | mysql修改个别表后save()报错

    报错内容: elasticsearch.exceptions.ConnectionError: ConnectionError(<urllib3.connection.HTTPConnectio ...

  4. Django的认证系统和Django admin的简单使用

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...

  5. 01: 重写Django admin

    目录: 1.1 重写Django admin项目各文件作用# 1.2 重写Django admin用户认证 1.3 将要显示的表注册到我们自己的kind_admin.py中 1.4 项目首页:显示注册 ...

  6. 06: Django Admin

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  7. drop表后仍占表空间解决办法

    练习oracle时create了很多表,drop表后select * from tab; 网上找了好些方法,但是好多都适用... SQL>purge recyclebin; 回收站已清空.

  8. Oracle 执行报错表空间或临时表空间不足,降低水位线方法

    Oracle 执行语句插入临时表报表空间不足,在增加表空间到最大后依然报错,经分析应该为创建的临时表水位线未清除导致,查询降低水位线方法如下: 原文地址:http://blog.itpub.net/2 ...

  9. 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题

    配置Django Admin,关于如何启用请参考Django官方文档<Activate the admin site>.但是我在配置过程中登录http://example.com/admi ...

随机推荐

  1. Zabbix Trigger表达式实例

    Zabbix提供强大的触发器(Trigger)函数以方便进行更为灵活的报警及后续动作,具体触发器函数可以访问https://www.zabbix.com/documentation/2.0/manua ...

  2. Python学习笔记(十一)—— 函数式编程

    一.函数式编程理念 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用.而允许使用变 ...

  3. Redis 集群_主从配置_哨兵模式

    首先:slaveof 可以在[从]服务器启动一个service服务,直接将[从]服务器定义为[从Redis] redis-server --slaveof <master-ip> < ...

  4. MVC2 扩展Models和自定义验证(学习笔记)

    当我们利用Visual Studio生成实体类以后,难免会用到验证功能(例如,用户登录时验证用户名是否为空,并加以显示). Visual Studio实体类:实体类 如果直接去编辑Visual Stu ...

  5. 【MySQL】mysql中any,in,some,all的区别

    子查询就是指在一个select语句中嵌套另一个select语句. any,in,some,all分别是子查询关键词之一, any 可以与=.>.>=.<.<=.<> ...

  6. 在Linux上yum安装运行Redis,只能安装2.4.10(主从)

    Installing Redis on CentOS 6.4 First, install the epel repo sudo rpm -Uvh http://download.fedoraproj ...

  7. Red Hat忘记root密码了怎么办?

    方法很简单: 在出现grub画面时,用上下键选中平时启动linux的那一项,然后按a键,可以进行append模式 在出来的命令行等方面加上 空格 single , 这样可以进入单用户模式,再 pass ...

  8. 你应该知道的JAVA面试题

    你应该知道的JAVA面试题 经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问.答案会在后面的文章中逐渐发布出来. 基础题目 Java线程的状态 进程和线 ...

  9. SharePoint 2013 启用 查看PDF功能

    SharePoint 2013 默认不能直接Online (注:此Online非OWA概念,而是可以实现直接调用客户端软件实现对文档的编辑,保存之后同步上传)打开PDF(SharePoint 2013 ...

  10. 视图不能由多个 ListView 共享 (View can't be shared by more than one ListView) 的一个解决方法

    1.问题的起因 在WPF中遇到一异常,如题. 因此做一个Demo代码来复现问题,代码如下: <Window x:Class="WpfAppThread.MainWindow" ...