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. Swift Protobuf 初探 —— 继 XML 后,JSON 也要被淘汰了吗

    Protocol Buffers 是什么? Protocol buffers are Google’s language-neutral, platform-neutral, extensible m ...

  2. linux c学习笔记----线程创建与终止

    进程原语 线程原语 描述 fork pthread_create 创建新的控制流 exit pthread_exit 从现有的控制流中退出 waitpid pthread_join 从控制流中得到退出 ...

  3. 【转】windows平台多线程同步之Mutex的应用

    线程组成:  线程的内核对象,操作系统用来管理该线程的数据结构. 线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量.   操作系统为每一个运行线程安排一定的CPU时间 —— 时间片.系统通 ...

  4. React(0.13) 组件的组合使用

    <html> <head> <title>组件的组合调用</title> <script src="build_0.13/react.m ...

  5. Redis踩过的坑

    现象:在使用redis云提供的redis服务后,经常出现connect timeout: redis.clients.jedis.exceptions.JedisConnectionException ...

  6. CListCtrl选中某行

    原文链接: http://blog.csdn.net/wxq1987525/article/details/7461461 1.设置CListCtrl选中行 m_list.SetItemState( ...

  7. mysql 5.5数据库主从配置步骤详解

    上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5. ...

  8. git clone 问题 fatal: unable to access

    git clone 遇到问题 Cloning into 'warp-ctc'...fatal: unable to access 'https://github.com/SeanNaren/warp- ...

  9. 翻译Java虚拟机的结构

    英文原版:  https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html 直接谷歌翻译: Java SE规范 > Java虚拟机 ...

  10. mysql 8.0 java连接报错:Unknown system variable 'query_cache_size'

    java连接mysql 8.0.11报错 java.sql.SQLException: Unknown system variable 'query_cache_size' at com.mysql. ...