Django使用自己的用户系统(2)

class AbstractBaseUser(models.Model):
    password = models.CharField(_('password'), max_length=128)
    last_login = models.DateTimeField(_('last login'), default=timezone.now)

is_active = True

REQUIRED_FIELDS = []

class Meta:
        abstract = True

def get_username(self):
        "Return the identifying username for this User"
        return getattr(self, self.USERNAME_FIELD)

def __str__(self):
        return self.get_username()

def natural_key(self):
        return (self.get_username(),)

def is_anonymous(self):
        """
        Always returns False. This is a way of comparing User objects to
        anonymous users.
        """
        return False

def is_authenticated(self):
        """
        Always return True. This is a way to tell if the user has been
        authenticated in templates.
        """
        return True

def set_password(self, raw_password):
        self.password = make_password(raw_password)

def check_password(self, raw_password):
        """
        Returns a boolean of whether the raw_password was correct. Handles
        hashing formats behind the scenes.
        """
        def setter(raw_password):
            self.set_password(raw_password)
            self.save(update_fields=["password"])
        return check_password(raw_password, self.password, setter)

def set_unusable_password(self):
        # Sets a value that will never be a valid hash
        self.password = make_password(None)

def has_usable_password(self):
        return is_password_usable(self.password)

def get_full_name(self):
        raise NotImplementedError()

def get_short_name(self):
        raise NotImplementedError()

step-2 admin.py 注册到django的admin后台,并且修改一些field
admin注册user,参考文档 https://docs.djangoproject.com/en/dev/ref/contrib/admin/
代码如下,感觉没什么需要说明的。

myauth/admin.py

#coding: utf-8

from django import forms
from django.contrib import admin
from django.contrib.auth.models import Group as DjangoGroup
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import ReadOnlyPasswordHashField

from myauth.models import User

# 新增用户表单
class UserCreateForm(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 = User
        fields = ('name', 'email')

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(UserCreateForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        if commit:
            user.save()
        return user

# 修改用户表单
class UserChangeForm(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 = User

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a9e0518e8769cb5bcfe4a839a814e08e.html