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,重写其方法的更多相关文章

  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. RS:关于协同过滤,矩阵分解,LFM隐语义模型三者的区别

    项亮老师在其所著的<推荐系统实战>中写道: 第2章 利用用户行为数据 2.2.2 用户活跃度和物品流行度的关系 [仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法.学术界对协同过滤算 ...

  2. MATLAB 的 cell 大法(单元格数组)

    MATLAB 的 cell,称单元格数组 or 元胞数组:使用频率特别高,甚至比 struct 结构体还高. MATLAB文档给出的 cell 官方定义: A cell array is a coll ...

  3. atime,mtime,ctime 的理解

    Linux之atime,mtime,ctime from:http://blog.sina.com.cn/s/blog_5980699f0100zkgz.html 首先可以使用stat 命令来查询文件 ...

  4. 定制jQuery File Upload为微博式单文件上传

    日志未经声明,均为AlloVince原创.版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可. jQuery File Upload是一个非常优秀的上传组件,主要使用了XHR作为上传方 ...

  5. Oracle - 层次查询

    如果表中含有层次数据,可以通过使用层次查询有序地查看层次数据. 语法: condition:指一个或多个表达式和逻辑(布尔)运算符的组合,并返回TRUE.FALSE或UNKNOWNstart with ...

  6. 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 ...

  7. MySQL 两个死锁样例

    [引子] 从事MySQL-DBA这一行也有些年头了,想对新人说,在分析死锁问题时应该还要考虑到有一个叫请求队列的“概念”.之所以 在这里提这个不是因为新手不知道,而是有时候会自然而然的想不到. 不信的 ...

  8. JavaScript 循环:如何处理 async/await

    如何串行或者并行运行异步循环? 在使用循环处理异步的魔法之前,我们先来看下我们是怎么处理同步循环的. 同步循环 很久以前我写的循环是这样的: for (var i = 0; i < array. ...

  9. activiti排他网关

    /*启动流程实例*可以在启动流程时把所有流程变量设置好*/@Test public void startProcessInstance(){ //流程定义key String processDefin ...

  10. jQuery学习笔记(DOM操作)

    DOM操作的分类 一般来说,DOM操作分为3个方面,即DOM Core.HTML-DOM和CSS-DOM. 1. DOM Core DOM Core并不专属于JavaScript,任何一种支持DOM的 ...