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 ...
随机推荐
- RS:关于协同过滤,矩阵分解,LFM隐语义模型三者的区别
项亮老师在其所著的<推荐系统实战>中写道: 第2章 利用用户行为数据 2.2.2 用户活跃度和物品流行度的关系 [仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法.学术界对协同过滤算 ...
- MATLAB 的 cell 大法(单元格数组)
MATLAB 的 cell,称单元格数组 or 元胞数组:使用频率特别高,甚至比 struct 结构体还高. MATLAB文档给出的 cell 官方定义: A cell array is a coll ...
- atime,mtime,ctime 的理解
Linux之atime,mtime,ctime from:http://blog.sina.com.cn/s/blog_5980699f0100zkgz.html 首先可以使用stat 命令来查询文件 ...
- 定制jQuery File Upload为微博式单文件上传
日志未经声明,均为AlloVince原创.版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可. jQuery File Upload是一个非常优秀的上传组件,主要使用了XHR作为上传方 ...
- Oracle - 层次查询
如果表中含有层次数据,可以通过使用层次查询有序地查看层次数据. 语法: condition:指一个或多个表达式和逻辑(布尔)运算符的组合,并返回TRUE.FALSE或UNKNOWNstart with ...
- SharePoint 2013 Backup Farm Automatically With a Powershell and Windows Task Schedule
In this post,I will show you SharePoint 2013 How to Backup Farm Automatically with a PowerShell and ...
- MySQL 两个死锁样例
[引子] 从事MySQL-DBA这一行也有些年头了,想对新人说,在分析死锁问题时应该还要考虑到有一个叫请求队列的“概念”.之所以 在这里提这个不是因为新手不知道,而是有时候会自然而然的想不到. 不信的 ...
- JavaScript 循环:如何处理 async/await
如何串行或者并行运行异步循环? 在使用循环处理异步的魔法之前,我们先来看下我们是怎么处理同步循环的. 同步循环 很久以前我写的循环是这样的: for (var i = 0; i < array. ...
- activiti排他网关
/*启动流程实例*可以在启动流程时把所有流程变量设置好*/@Test public void startProcessInstance(){ //流程定义key String processDefin ...
- jQuery学习笔记(DOM操作)
DOM操作的分类 一般来说,DOM操作分为3个方面,即DOM Core.HTML-DOM和CSS-DOM. 1. DOM Core DOM Core并不专属于JavaScript,任何一种支持DOM的 ...