I create project with my authuser model where login via email, not through 
name

--------------------------------

Models.py
----------------------------


import imghdr
import string
import datetime

from django_countries.fields import CountryField

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, 
PermissionsMixin
from django.core.urlresolvers import reverse
from django.core.exceptions import ValidationError
from django.core.validators import MinLengthValidator
from django.conf import settings

from libs.validators import OnlyLowercaseAndDigits


ALLOWED_CHARS = string.ascii_lowercase + string.digits
MAX_LENGTH = 8


class AccountUserManager(BaseUserManager):
    """
    Manager for my user model
    """

    def create_user(self, email, name, password=None):
        """
        Creates and saves a user with the given email, name of account and 
password.
        """
        if not email:
            raise ValueError('User must have an email address')
        if not name:
            raise ValueError('User must have a name of account')
        user = self.model(email=self.normalize_email(email), name=name)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, name, password):
        """
        Creates and saves a superuser with the given email, name of account 
and password.
        """
        if not password:
            raise ValueError('Superuser must be have a password')
        user = self.create_user(email=self.normalize_email(email), 
name=name, password=password)
        user.is_superuser = True
        user.save()
        return user

    def make_random_password(self, length=10, allowed_chars=ALLOWED_CHARS):
        return super().make_random_password(length, allowed_chars)


class AccountUser(AbstractBaseUser, PermissionsMixin):
    """
    Model for users, registering by email and unique name of account
    """

    email = models.EmailField('Email of account', max_length=50, 
unique=True)
    name = models.CharField('Account of name', max_length=50, validators=[
        OnlyLowercaseAndDigits,
        MinLengthValidator(MAX_LENGTH, 'Field must be at least {0} 
chars'.format(MAX_LENGTH)),
    ])
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField('Date joined', auto_now_add=True)

    objects = AccountUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    class Meta:
        db_table = 'account_user'
        verbose_name = "AccountUser"
        verbose_name_plural = "AccountUsers"
        get_latest_by = 'date_joined'
        ordering = ['-date_joined']

    def __str__(self):
        return '{0.email}'.format(self)

    def save(self, *args, **kwargs):
        try:
            self.full_clean()
        except ValidationError as errors_message:
            print('Was happened next 
errors:\n-----------------------------')
            for error in errors_message:
                print(error)
        else:
            super().save(*args, **kwargs)
            account = AccountUser.objects.get(email=self.email)
            if not hasattr(account, 'accountuserinfo'):
                AccountUserInfo.objects.create(account=account)

    def get_absolute_url(self):
        return reverse('app_accounts:account_profile')

    def get_full_name(self):
        return '{0.name} ({0.email})'.format(self)

    def clean(self):
        if len(self.password) < MAX_LENGTH:
            raise ValidationError({
                'password': 'Length of password must be at least 
{0}'.format(MAX_LENGTH)
            })
        if all(i in string.digits for i in self.password):
            raise ValidationError({
                'password': 'Your password can\'t be entirely numeric'
            })

    def get_short_name(self):
        return '{0.email}'.format(self)

    @property
    def is_staff(self):
        return self.is_superuser

    def all_dictionaries_created_user(self):
        count_translators = self.translators.count()
        count_glossaries = self.glossaries.count()
        if any([count_translators, count_glossaries]):
            result = 'User have: translators - {0}; glossaries - 
{1}.'.format(count_translators, count_glossaries)
        else:
            result = 'User have not nothing!!!'
        return result

    def last_created_dictionaries(self, types_dictionaries=['translators', 
'glossaries']):
        result = list()
        for type_dictionary in types_dictionaries:
            if type_dictionary == 'translators':
                created_translators = self.translators.all()[:3]
                if created_translators:
                    result.append('User have next translators: 
{0}'.format(created_translators))
                else:
                    result.append('User have not translators')
            if type_dictionary == 'glossaries':
                created_glossaries = self.glossaries.all()[:3]
                if created_glossaries:
                    result.append('User have next glossaires: 
{0}'.format(created_glossaries))
                else:
                    result.append('User have not glossaires')
        return result

--------------------------------------------------------

Forms.py

--------------------

*# For admin interface*

*class FormAccountUserCreation(forms.ModelForm):*
*    """A form for creating new users. Includes all the required*
*    fields, plus a repeated password."""*

*    password1 = forms.CharField(label='Password', 
widget=forms.PasswordInput)*
*    password2 = forms.CharField(label='Password confirmation', 
widget=forms.PasswordInput)*

*    class Meta:*
*        model = AccountUser*
*        fields = ('email', 'password')*

*    def clean_password2(self):*
*        # Check that the two password entries match*
*        password1 = self.cleaned_data.get("password1")*
*        password2 = self.cleaned_data.get("password2")*
*        if password1 and password2 and password1 != password2:*
*            raise forms.ValidationError("Passwords don't match")*
*        return password2*

*    def save(self, commit=True):*
*        # Save the provided password in hashed format*
*        user = super(FormAccountUserCreation, self).save(commit=False)*
*        user.set_password(self.cleaned_data["password1"])*
*        if commit:*
*            user.save()*
*        return user*


*class FormAccountUserChange(forms.ModelForm):*
*    """*
*    A form for updating users. Includes all the fields on the user,*
*    but replaces the password field with admin's password hash display 
field.*
*    """*

*    password = ReadOnlyPasswordHashField()*

*    class Meta:*
*        model = AccountUser*
*        fields = ('email', 'name', 'password', 'is_active', 
'is_superuser')*

*    def clean_password(self):*
*        return self.initial.get('password')*

*----------------------------*

 Traceback: http://dpaste.com/3Z2TMJB 


And I do not know how change text in login page admin Django from "Forgotten 
your password or username? <http://127.0.0.1:8000/admin/password_reset/>" 
to "Forgotten your password or email? 
<http://127.0.0.1:8000/admin/password_reset/>"

<https://lh3.googleusercontent.com/-S59vC0Zkt9c/VuFuq-Ob-yI/AAAAAAAAAAs/1BC1SfrtIHA/s1600/Screenshot%2Bfrom%2B2016-03-10%2B14%253A54%253A12.png>



-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/53ff4b94-190a-4fe5-961c-677035d9823a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to