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. 查看linux设备文件系统类型的方法

    网络上找来找去没有找到简单的,最后翻了鸟哥的书就找到了,鸟哥的书还是真的有用心写的. /proc/filesystems 当前被内核支持的文件系统类型列表文件 /etc/filesystems 系统已 ...

  2. java 高性能读模式(译)

    原文地址:http://tutorials.jenkov.com/java-performance/read-patterns.html 好久没翻译了,逛知乎,无意间发现的一个链接,写的太好了,而且内 ...

  3. EasyUI DataGrid Checkbox 多选 获取选中行中的内容

    <table id='grid' class='easyui-datagrid' style='width:950px;height:405px' url='Ajax-index.php?mod ...

  4. Set up development environment for apps for SharePoint 2013

    SharePoint 2013 support app development pattern.An app for SharePoint is small and isolate applicati ...

  5. SharePoint自动化部署,利用SPSD工具包

    目录 怎样使用SPSD 配置Environment XML文件 PowerShell激活Feature  上篇博客讲了利用PowerShell导出.导入AD中的Users.这篇介绍简单介绍一下SPSD ...

  6. [转]Intellij IDEA快捷键与使用小技巧

    Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ ...

  7. 如何在Android Studio中添加注释模板信息?

    如何在Android Studio中添加注释模板信息? 在开发程序的时候,我们一般都会给文件自动添加上一些关于文件的注释信息,比如开发者的名字,开发的时间,开发者的联系方式等等.那么在android ...

  8. MySQL 自带工具使用介绍

    MySQL 数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具程序,如mysql,mysqladmin,mysqldump 等等,都是大家所熟悉的.虽然有些人对这些工具的功能都已经 ...

  9. JSP中四种传递参数中文乱码问题

    查看来源:http://blog.csdn.net/hackerain/article/details/6776083

  10. 优化基于FPGA的深度卷积神经网络的加速器设计

    英文论文链接:http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf 翻译:卜居 转载请注明出处:http://blog.csdn.net/k ...