Django admin 继承user表后密码为明文,继承UserAdmin,重写其方法
Django用户继承AbstractUser后密码为明文
其实本不应该有这个问题,却花了我很久的时间,因为还是初学阶段。
造成这个原因是因为在admin注册的生活没有指定Admin
在app的admin.py里面
- from django.contrib.auth.admin import UserAdmin
- admin.site.register(UserProfile, UserAdmin)
下面是重点,UserProfileAdmin继承UserAdmin
model
- from django.db import models
- from django.contrib.auth.models import AbstractUser
- # Create your models here.
- # 继承原有user并且添加自定义user数据表
- class UserProfile(AbstractUser):
- ACCOUNT_TYPE = (
- ('advertiser', '广告主'),
- ('advertiser_agent', '广告主代理'),
- ('inside_staff', '公司内部员工')
- )
- ADVERTISEMENT_TYPE = (
- ('网赚类广告', '网赚类广告'),
- ('棋牌类广告', '棋牌类广告'),
- ('互动类广告', '互动类广告'),
- ('健康类广告', '健康类广告'),
- )
- account_person = models.IntegerField(verbose_name='建账号人', null=True, blank=True)
- if_show_gift_account = models.BooleanField(verbose_name='是否显示赠送金额', default=False)
- advertisement_type = models.CharField(verbose_name='广告类型', max_length=20, choices=ADVERTISEMENT_TYPE, null=True,
- blank=True)
- account_type = models.CharField(verbose_name='账号类型', max_length=20, choices=ACCOUNT_TYPE, default="advertiser")
- nick_name = models.CharField(max_length=50, verbose_name=u"昵称", null=True, blank=True)
- gender = models.CharField(verbose_name='性别', max_length=6, choices=(("male", u"男"), ("female", "女")),
- default="male")
- address = models.CharField(verbose_name='地址', max_length=100, null=True, blank=True)
- mobile = models.CharField(verbose_name='电话', max_length=11, null=True, blank=True)
- add_time = models.DateTimeField(auto_now=True)
- class Meta:
- verbose_name = "广告主信息"
- verbose_name_plural = verbose_name
- permissions = (
- ('view_userprofile', 'view_userprofile'),
- )
- def __str__(self):
- return self.username
Admin注册
- from django.contrib import admin
- from .models import UserProfile
- from django.contrib.auth.hashers import make_password
- from django.contrib.auth.models import User, Group,Permission
- from users.forms import UserProfileForm
- from rest_framework.response import Response
- from rest_framework import status
- from django.contrib.auth.admin import UserAdmin
- class UserProfileAdmin(UserAdmin):
- # form = UserProfileForm
- # FIXME 非管理员自定义返回fieldsets
- zdy_fieldsets = [(None, {'classes': ('wide', 'extrapretty'),
- 'fields': ('username', 'password', 'if_show_gift_account', 'advertisement_type')})]
- list_display = ('username', 'nick_name', 'account_type', 'if_show_gift_account', 'advertisement_type')
- list_filter = ('is_staff', 'is_superuser')
- #exclude = ('account_person','user_permissions',)
- def get_queryset(self, request):
- """
- admin 根据不同用户显示表格内容
- :param request:
- :return:
- . """
- user_id = request.user.id
- userporfile = UserProfile.objects.get(id=user_id)
- # print(userporfile.account_type)
- if userporfile.account_type == 'advertiser_agent':
- qs = super().get_queryset(request)
- return qs.filter(account_person=user_id)
- else:
- return UserProfile.objects.all()
- def changelist_view(self, request, extra_context=None):
- """
- 根据不同用户 显示list_display
- :param request:
- :param extra_context:
- :return:
- """
- user_id = request.user.id
- userporfile = UserProfile.objects.get(id=user_id)
- # print(userporfile.account_type)
- if userporfile.account_type != 'advertiser_agent':
- self.list_display = ['username', 'nick_name','advertisement_type','if_show_gift_account']
- else:
- self.list_display = ['username', 'nick_name']
- return super(UserProfileAdmin, self).changelist_view(request, extra_context=None)
- def get_readonly_fields(self, request, obj=None):
- """
- 设置只读字段
- :param request:
- :param obj:
- :return:
- """
- if not request.user.is_superuser and request.user.has_perm('users.view_userprofile'):
- return [f.name for f in self.model._meta.fields]
- return []
- # FIXME 继承UserAdmin 重写get_fieldsets 方法指定显示哪些字段
- def get_fieldsets(self, request, obj=None):
- """
- 显示指定字段
- :param request:
- :param obj:
- :return:
- """
- if request.user.is_superuser:
- return super(UserAdmin, self).get_fieldsets(request, obj)
- else:
- return self.zdy_fieldsets
注册信息
- admin.site.register(UserProfile, UserProfileAdmin)
Django admin 继承user表后密码为明文,继承UserAdmin,重写其方法的更多相关文章
- Django用户继承AbstractUser后密码为明文
Django用户继承AbstractUser后密码为明文 其实本不应该有这个问题,却花了我很久的时间,因为还是初学阶段. 造成这个原因是因为在admin注册的生活没有指定Admin 在app的admi ...
- django admin扩展user表password验证及set_password
一般如果扩展了django user内置表,在admin后台创建新用户的时候密码将会变成明文,故而导致登录不成功.所以我们在admin.py可以通过form自定义进行对password进行操作,可以双 ...
- Django | mysql修改个别表后save()报错
报错内容: elasticsearch.exceptions.ConnectionError: ConnectionError(<urllib3.connection.HTTPConnectio ...
- Django的认证系统和Django admin的简单使用
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
- 01: 重写Django admin
目录: 1.1 重写Django admin项目各文件作用# 1.2 重写Django admin用户认证 1.3 将要显示的表注册到我们自己的kind_admin.py中 1.4 项目首页:显示注册 ...
- 06: Django Admin
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
- drop表后仍占表空间解决办法
练习oracle时create了很多表,drop表后select * from tab; 网上找了好些方法,但是好多都适用... SQL>purge recyclebin; 回收站已清空.
- Oracle 执行报错表空间或临时表空间不足,降低水位线方法
Oracle 执行语句插入临时表报表空间不足,在增加表空间到最大后依然报错,经分析应该为创建的临时表水位线未清除导致,查询降低水位线方法如下: 原文地址:http://blog.itpub.net/2 ...
- 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题
配置Django Admin,关于如何启用请参考Django官方文档<Activate the admin site>.但是我在配置过程中登录http://example.com/admi ...
随机推荐
- Zabbix Trigger表达式实例
Zabbix提供强大的触发器(Trigger)函数以方便进行更为灵活的报警及后续动作,具体触发器函数可以访问https://www.zabbix.com/documentation/2.0/manua ...
- Python学习笔记(十一)—— 函数式编程
一.函数式编程理念 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用.而允许使用变 ...
- Redis 集群_主从配置_哨兵模式
首先:slaveof 可以在[从]服务器启动一个service服务,直接将[从]服务器定义为[从Redis] redis-server --slaveof <master-ip> < ...
- MVC2 扩展Models和自定义验证(学习笔记)
当我们利用Visual Studio生成实体类以后,难免会用到验证功能(例如,用户登录时验证用户名是否为空,并加以显示). Visual Studio实体类:实体类 如果直接去编辑Visual Stu ...
- 【MySQL】mysql中any,in,some,all的区别
子查询就是指在一个select语句中嵌套另一个select语句. any,in,some,all分别是子查询关键词之一, any 可以与=.>.>=.<.<=.<> ...
- 在Linux上yum安装运行Redis,只能安装2.4.10(主从)
Installing Redis on CentOS 6.4 First, install the epel repo sudo rpm -Uvh http://download.fedoraproj ...
- Red Hat忘记root密码了怎么办?
方法很简单: 在出现grub画面时,用上下键选中平时启动linux的那一项,然后按a键,可以进行append模式 在出来的命令行等方面加上 空格 single , 这样可以进入单用户模式,再 pass ...
- 你应该知道的JAVA面试题
你应该知道的JAVA面试题 经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问.答案会在后面的文章中逐渐发布出来. 基础题目 Java线程的状态 进程和线 ...
- SharePoint 2013 启用 查看PDF功能
SharePoint 2013 默认不能直接Online (注:此Online非OWA概念,而是可以实现直接调用客户端软件实现对文档的编辑,保存之后同步上传)打开PDF(SharePoint 2013 ...
- 视图不能由多个 ListView 共享 (View can't be shared by more than one ListView) 的一个解决方法
1.问题的起因 在WPF中遇到一异常,如题. 因此做一个Demo代码来复现问题,代码如下: <Window x:Class="WpfAppThread.MainWindow" ...