参考官网的例子,做了简单修改。
index/models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
from
django.db
import
models
from
django.contrib.auth.models
import
(
BaseUserManager, AbstractBaseUser
)
class
MyUserManager(BaseUserManager):
def
create_user(
self
,name,email, password
=
None
):
"""
Creates and saves a User with the given email, date of
birth and password.
"""
# if not name:
# raise ValueError('Users must have an user')
user
=
self
.model(
name
=
name,
email
=
self
.normalize_email(email),
# date_of_birth=date_of_birth,
)
user.set_password(password)
user.save(using
=
self
._db)
return
user
def
create_superuser(
self
, name,email, password):
"""
Creates and saves a superuser with the given email, date of
birth and password.
"""
user
=
self
.create_user(
name,
email,
password
=
password,
)
user.is_admin
=
True
user.save(using
=
self
._db)
return
user
class
UserProfile(AbstractBaseUser):
name
=
models.CharField(
verbose_name
=
'用户名'
,
max_length
=
255
,
unique
=
True
,
)
email
=
models.EmailField(
verbose_name
=
'邮箱'
,
max_length
=
255
,
)
# date_of_birth = models.DateField()
is_active
=
models.BooleanField(default
=
True
)
is_admin
=
models.BooleanField(default
=
False
)
objects
=
MyUserManager()
USERNAME_FIELD
=
'name'
REQUIRED_FIELDS
=
[
'email'
]
def
get_full_name(
self
):
# The user is identified by their email address
return
self
.name
def
get_short_name(
self
):
# The user is identified by their email address
return
self
.name
def
__str__(
self
):
# __unicode__ on Python 2
return
self
.name
def
has_perm(
self
, perm, obj
=
None
):
"Does the user have a specific permission?"
# Simplest possible answer: Yes, always
return
True
def
has_module_perms(
self
, app_label):
"Does the user have permissions to view the app `app_label`?"
# Simplest possible answer: Yes, always
return
True
@
property
def
is_staff(
self
):
"Is the user a member of staff?"
# Simplest possible answer: All admins are staff
return
self
.is_admin
class
Meta:
db_table
=
"UserProfile"
verbose_name
=
"用户"
verbose_name_plural
=
verbose_name
|
index/admin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
from
django.contrib
import
admin
from
django
import
forms
from
django.contrib.auth.models
import
Group
from
django.contrib.auth.admin
import
UserAdmin as BaseUserAdmin
from
django.contrib.auth.forms
import
ReadOnlyPasswordHashField
from
index.models
import
UserProfile
class
UserCreationForm(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
=
UserProfile
fields
=
(
'name'
,
'is_active'
,
'is_admin'
)
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
(UserCreationForm,
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
=
UserProfile
fields
=
(
'name'
,
'password'
,
'is_active'
,
'is_admin'
)
def
clean_password(
self
):
# Regardless of what the user provides, return the initial value.
# This is done here, rather than on the field, because the
# field does not have access to the initial value
return
self
.initial[
"password"
]
class
UserAdmin(BaseUserAdmin):
# The forms to add and change user instances
form
=
UserChangeForm
add_form
=
UserCreationForm
# The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
list_display
=
(
'name'
,
'email'
,
'is_admin'
)
list_filter
=
(
'is_admin'
,)
fieldsets
=
(
(
None
, {
'fields'
: (
'name'
,
'password'
)}),
(
'Personal info'
, {
'fields'
: (
'email'
,)}),
(
'Permissions'
, {
'fields'
: (
'is_admin'
,)}),
)
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
# overrides get_fieldsets to use this attribute when creating a user.
add_fieldsets
=
(
(
None
, {
'classes'
: (
'wide'
,),
'fields'
: (
'name'
,
'password1'
,
'password2'
)}
),
)
search_fields
=
(
'name'
,)
ordering
=
(
'name'
,)
filter_horizontal
=
()
# Now register the new UserAdmin...
admin.site.register(UserProfile,UserAdmin)
# ... and, since we're not using Django's built-in permissions,
# unregister the Group model from admin.
admin.site.unregister(Group)
|
settings.py
1
|
AUTH_USER_MODEL
=
'index.UserProfile'
|
需要删除数据库,重写建立。
本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1955038,如需转载请自行联系原作者