小生博客:http://xsboke.blog.51cto.com
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、網頁空間、營銷軟件、網站建設、恩平網站維護、網站推廣。 -------謝謝您的參考,如有疑問,歡迎交流
Django解決當擴展用戶表時,用戶繼承AbstractUser后,后臺Admin會顯示密碼為明文的問題
先看項目列表
1、今天在寫一個擴展Django默認的用戶表功能時,遇到了一個問題.
先給大家看一下我寫的,擴展用戶表的models[apps.users.models]
,我是通過繼承AbstractUser進行擴展的(還有一種方式是引入User表,通過外鍵的形式進行擴展).
注意:
請在setting配置文件中,添加如下配置,從而修改用戶表為自定義model(我app的名字為users).
AUTH_USER_MODEL = 'users.UserProfile'
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserProfile(AbstractUser):
user = models.CharField(max_length=30, null=True, blank=True, verbose_name="用戶")
birthday = models.DateField(null=True, blank=True, verbose_name="出生年月")
gender = models.CharField(max_length=8, choices=(("male", u"男"), ("female", "女"),("unknown", u"未知")), default="unknown",verbose_name="性別")
mobile = models.CharField(max_length=11,null=True, blank=True, verbose_name="電話")
class Meta:
verbose_name = '用戶'
verbose_name_plural = verbose_name
def __str__(self):
return self.username
2、這時候你Admin后臺就沒有之前那張用戶表了,就變成下面那個樣子了
然后你就需要在你的users app中配置admin[apps.users.admin],就像為其他表配置admin一樣,我做了如下配置
from django.contrib import admin
from django.utils.translation import gettext_lazy
from apps.users.models import UserProfile
# Register your models here.
class UserProfileAdmin(admin.ModelAdmin):
list_display = ('username','last_login','is_superuser','is_staff','is_active','date_joined')
fieldsets = (
(None,{'fields':('username','password','first_name','last_name','email')}),
(gettext_lazy('User Information'),{'fields':('user','birthday','gender','mobile')}),
(gettext_lazy('Permissions'), {'fields': ('is_superuser','is_staff','is_active',
'groups', 'user_permissions')}),
(gettext_lazy('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
admin.site.register(UserProfile,UserProfileAdmin)
3、然后在后臺admin中就可以看到這張表了
但是當你新建用戶或者打開用戶表后發現,密碼竟然是明文的,我試過啦,直接寫密碼是不可以的,如下圖
4、那么密碼字段應該是什么樣的呢,我給大家放出還未擴展用戶表時,django默認的用戶表的圖片
現在我們也需要實現這種效果怎么辦,我在查閱資料之后,網上有個用戶提供了這么個方法
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from apps.users.models import UserProfile
# Register your models here.
admin.site.register(UserProfile, UserAdmin)
5、我嘗試了一下,這樣可以,但是有個問題,我自定義的字段沒有在后臺顯示,如下圖:
然后我看了一下UserAdmin的源碼(在pychram中按住Ctrl鍵,然后用鼠標左鍵點擊UserAdmin,就可以看到源碼)
我們可以這樣解決,如下,通過繼承UserAdmin,然后覆蓋你想要修改的字段。
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy
from apps.users.models import UserProfile
# Register your models here.
class UserProfileAdmin(UserAdmin):
list_display = ('username','last_login','is_superuser','is_staff','is_active','date_joined')
fieldsets = (
(None,{'fields':('username','password','first_name','last_name','email')}),
(gettext_lazy('User Information'),{'fields':('user','birthday','gender','mobile')}),
(gettext_lazy('Permissions'), {'fields': ('is_superuser','is_staff','is_active',
'groups', 'user_permissions')}),
(gettext_lazy('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
admin.site.register(UserProfile,UserProfileAdmin)
這時候后臺就可以顯示到我們擴展的字段了
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網站標題:Django解決擴展用戶表時,后臺Admin顯示密碼為明文的問題-創新互聯
網頁網址:http://vcdvsql.cn/article48/cseiep.html
成都網站建設公司_創新互聯,為您提供手機網站建設、關鍵詞優化、網站營銷、網站維護、移動網站建設、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯