2017-03-03 25 views
0

這是某種連接到我的最後一個問題(django user with email as pk - hack possible?),但我嘗試另一種方法:django好風格:將內置目錄複製到本地項目中?

是不好的做法,複製整個django.contrib.auth到我的項目,並有修改的文件?我想使用自定義用戶模型,除了CustomUserManager和CustomUser之外,偶然發現許多需要更改的權限,組等。此外,我不想在一個應用程序中使用組,在另一個應用程序中使用MyUser。此外,集成userena需要對用戶進行一些更改...

除了無法升級到下一個django版本之外,這會引發問題嗎?

對不起,問這樣一個經常問到的問題,但不知何故,手冊和論壇帖子過於多樣化和矛盾選擇從...

+0

鑑於'django.contrib.auth'充滿了安全相關的功能 - 是的,複製模塊並錯過重要的更新是一個可怕的想法。 – knbk

回答

2

我認爲有一些是有可能複製中出現的問題完整django.contrib.auth目錄到您的應用程序源代碼 - 即關於構建。

爲什麼不通過使用延伸AbstractBaseUser的自定義模型擴展用戶模型?

喜歡的東西:

from __future__ import unicode_literals 

from django.db import models 
from django.core.mail import send_mail 
from django.contrib.auth.models import PermissionsMixin 
from django.contrib.auth.base_user import AbstractBaseUser 
from django.utils.translation import ugettext_lazy as _ 

from .managers import UserManager 


class User(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(_('email address'), unique=True) 
    first_name = models.CharField(_('first name'), max_length=30, blank=True) 
    last_name = models.CharField(_('last name'), max_length=30, blank=True) 
    date_joined = models.DateTimeField(_('date joined'), auto_now_add=True) 
    is_active = models.BooleanField(_('active'), default=True) 
    avatar = models.ImageField(upload_to='avatars/', null=True, blank=True) 

    objects = UserManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = [] 

    class Meta: 
     verbose_name = _('user') 
     verbose_name_plural = _('users') 

    def get_full_name(self): 
     ''' 
     Returns the first_name plus the last_name, with a space in between. 
     ''' 
     full_name = '%s %s' % (self.first_name, self.last_name) 
     return full_name.strip() 

    def get_short_name(self): 
     ''' 
     Returns the short name for the user. 
     ''' 
     return self.first_name 

    def email_user(self, subject, message, from_email=None, **kwargs): 
     ''' 
     Sends an email to this User. 
     ''' 
     send_mail(subject, message, from_email, [self.email], **kwargs) 

有許多其他的選擇。 Check this out如果您想查看還有哪些其他選項可用。

+0

謝謝你的回答和代碼。我已經嘗試了一段時間了,但有些事情是不正確的。你的'auth'仍然在INSTALLED_APPS中,對吧?因此,你的數據庫中的auth.User和myapp.User?如果我評論''auth',它沒有找到權限等 – Ilja

+0

在數據庫中有一個用戶表有什麼問題? –

+0

好吧,不知怎麼,有兩張表,一個用於我的新用戶,另一個用於原始auth/User,似乎不對。此外,權限和組連接到舊用戶,不是嗎? – Ilja

相關問題