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 ...
随机推荐
- >/dev/null 2>&1的含义
转帖:http://www.cnblogs.com/dkblog/archive/2009/07/31/1980722.html os.system("/etc/init.d/winbind ...
- mac 终端添加颜色
1.打开终端,然后找到终端偏好设置,选择自己喜欢的颜色 2.然后切换到当前用户的家目录: cd ~ 3.打开文件,开始编辑".bash_profile", 添加下面两句 expor ...
- webpack window dev-server配置
1.安装webpack dev-server npm install --save-dev webpack webpack-dev-server 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- MySQL Cluster
MySQL Cluster MySQL集群一个非共享(shared nothing).分布式.分区系统,使用同步复制机制提供高可用和高性能. MySQL集群使用的是NDB引擎.NDB存储引擎会在节点间 ...
- Android自己定义view之measure、layout、draw三大流程
自己定义view之measure.layout.draw三大流程 一个view要显示出来.须要经过測量.布局和绘制这三个过程,本章就这三个流程具体探讨一下.View的三大流程具体分析起来比較复杂,本文 ...
- [转]gdb调试多进程和多线程命令
1. 默认设置下,在调试多进程程序时GDB只会调试主进程.但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序.只需要设置follow-fork-mode( ...
- word中公式居中编号在最右端
1 显示标尺 2 设置居中制表符 3 在对应位置做标记 首先让公式居中 使用居中制表符在标尺的灰色地带标记位置,1)标记公式位置,鼠标左击 2)标记右边标号位置,注意和右边留有一定边距 4 公式左对齐 ...
- C# Split() 去除 \r\n 分组
str为读入的文本string[] ReadText = str.Replace("\r\n", "@").Split('@'); 转自 http://zhid ...
- rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
今天在同步数据的时候提示rsync: failed to set times on “xxxx”: Operation not permitted,一般来说要不是服务器时间不对或者权限没有设置好,下面 ...
- kafka 集群的部署安装
这里我们罗列一下我们的环境 10.19.18.88 zk1 10.19.16.84 zk2 10.19.11.44 zk3 这里公司需要接入kafka用于zipkin来定位调用链 kafka 的地址是 ...