参考官网的例子,做了简单修改。
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
<code>from</code> <code>django.db </code><code>import</code> <code>models</code>
<code>from</code> <code>django.contrib.auth.models </code><code>import</code> <code>(</code>
<code> </code><code>BaseUserManager, AbstractBaseUser</code>
<code>)</code>
<code>class</code> <code>MyUserManager(BaseUserManager):</code>
<code> </code><code>def</code> <code>create_user(</code><code>self</code><code>,name,email, password</code><code>=</code><code>None</code><code>):</code>
<code> </code><code>"""</code>
<code> </code><code>Creates and saves a User with the given email, date of</code>
<code> </code><code>birth and password.</code>
<code> </code><code># if not name:</code>
<code> </code><code># raise ValueError('Users must have an user')</code>
<code> </code><code>user </code><code>=</code> <code>self</code><code>.model(</code>
<code> </code><code>name</code><code>=</code><code>name,</code>
<code> </code><code>email</code><code>=</code><code>self</code><code>.normalize_email(email),</code>
<code> </code><code># date_of_birth=date_of_birth,</code>
<code> </code><code>)</code>
<code> </code><code>user.set_password(password)</code>
<code> </code><code>user.save(using</code><code>=</code><code>self</code><code>._db)</code>
<code> </code><code>return</code> <code>user</code>
<code> </code><code>def</code> <code>create_superuser(</code><code>self</code><code>, name,email, password):</code>
<code> </code><code>Creates and saves a superuser with the given email, date of</code>
<code> </code><code>user </code><code>=</code> <code>self</code><code>.create_user(</code>
<code> </code><code>name,</code>
<code> </code><code>email,</code>
<code> </code><code>password</code><code>=</code><code>password,</code>
<code> </code>
<code> </code><code>user.is_admin </code><code>=</code> <code>True</code>
<code>class</code> <code>UserProfile(AbstractBaseUser):</code>
<code> </code><code>name </code><code>=</code> <code>models.CharField(</code>
<code> </code><code>verbose_name</code><code>=</code><code>'用户名'</code><code>,</code>
<code> </code><code>max_length</code><code>=</code><code>255</code><code>,</code>
<code> </code><code>unique</code><code>=</code><code>True</code><code>,</code>
<code> </code><code>)</code>
<code> </code><code>email </code><code>=</code> <code>models.EmailField(</code>
<code> </code><code>verbose_name</code><code>=</code><code>'邮箱'</code><code>,</code>
<code> </code><code># date_of_birth = models.DateField()</code>
<code> </code><code>is_active </code><code>=</code> <code>models.BooleanField(default</code><code>=</code><code>True</code><code>)</code>
<code> </code><code>is_admin </code><code>=</code> <code>models.BooleanField(default</code><code>=</code><code>False</code><code>)</code>
<code> </code><code>objects </code><code>=</code> <code>MyUserManager()</code>
<code> </code><code>USERNAME_FIELD </code><code>=</code> <code>'name'</code>
<code> </code><code>REQUIRED_FIELDS </code><code>=</code> <code>[</code><code>'email'</code><code>]</code>
<code> </code><code>def</code> <code>get_full_name(</code><code>self</code><code>):</code>
<code> </code><code># The user is identified by their email address</code>
<code> </code><code>return</code> <code>self</code><code>.name</code>
<code> </code><code>def</code> <code>get_short_name(</code><code>self</code><code>):</code>
<code> </code><code>def</code> <code>__str__(</code><code>self</code><code>): </code><code># __unicode__ on Python 2</code>
<code> </code><code>def</code> <code>has_perm(</code><code>self</code><code>, perm, obj</code><code>=</code><code>None</code><code>):</code>
<code> </code><code>"Does the user have a specific permission?"</code>
<code> </code><code># Simplest possible answer: Yes, always</code>
<code> </code><code>return</code> <code>True</code>
<code> </code><code>def</code> <code>has_module_perms(</code><code>self</code><code>, app_label):</code>
<code> </code><code>"Does the user have permissions to view the app `app_label`?"</code>
<code> </code><code>@</code><code>property</code>
<code> </code><code>def</code> <code>is_staff(</code><code>self</code><code>):</code>
<code> </code><code>"Is the user a member of staff?"</code>
<code> </code><code># Simplest possible answer: All admins are staff</code>
<code> </code><code>return</code> <code>self</code><code>.is_admin</code>
<code> </code>
<code> </code><code>class</code> <code>Meta:</code>
<code> </code><code>db_table </code><code>=</code> <code>"UserProfile"</code>
<code> </code><code>verbose_name </code><code>=</code> <code>"用户"</code>
<code> </code><code>verbose_name_plural </code><code>=</code> <code>verbose_name</code>
index/admin.py
<code>from</code> <code>django.contrib </code><code>import</code> <code>admin</code>
<code>from</code> <code>django </code><code>import</code> <code>forms</code>
<code>from</code> <code>django.contrib.auth.models </code><code>import</code> <code>Group</code>
<code>from</code> <code>django.contrib.auth.admin </code><code>import</code> <code>UserAdmin as BaseUserAdmin</code>
<code>from</code> <code>django.contrib.auth.forms </code><code>import</code> <code>ReadOnlyPasswordHashField</code>
<code>from</code> <code>index.models </code><code>import</code> <code>UserProfile</code>
<code>class</code> <code>UserCreationForm(forms.ModelForm):</code>
<code> </code><code>"""A form for creating new users. Includes all the required</code>
<code> </code><code>fields, plus a repeated password."""</code>
<code> </code><code>password1 </code><code>=</code> <code>forms.CharField(label</code><code>=</code><code>'Password'</code><code>, widget</code><code>=</code><code>forms.PasswordInput)</code>
<code> </code><code>password2 </code><code>=</code> <code>forms.CharField(label</code><code>=</code><code>'Password confirmation'</code><code>, widget</code><code>=</code><code>forms.PasswordInput)</code>
<code> </code><code>model </code><code>=</code> <code>UserProfile</code>
<code> </code><code>fields </code><code>=</code> <code>(</code><code>'name'</code><code>,</code><code>'is_active'</code><code>,</code><code>'is_admin'</code><code>)</code>
<code> </code><code>def</code> <code>clean_password2(</code><code>self</code><code>):</code>
<code> </code><code># Check that the two password entries match</code>
<code> </code><code>password1 </code><code>=</code> <code>self</code><code>.cleaned_data.get(</code><code>"password1"</code><code>)</code>
<code> </code><code>password2 </code><code>=</code> <code>self</code><code>.cleaned_data.get(</code><code>"password2"</code><code>)</code>
<code> </code><code>if</code> <code>password1 </code><code>and</code> <code>password2 </code><code>and</code> <code>password1 !</code><code>=</code> <code>password2:</code>
<code> </code><code>raise</code> <code>forms.ValidationError(</code><code>"Passwords don't match"</code><code>)</code>
<code> </code><code>return</code> <code>password2</code>
<code> </code><code>def</code> <code>save(</code><code>self</code><code>, commit</code><code>=</code><code>True</code><code>):</code>
<code> </code><code># Save the provided password in hashed format</code>
<code> </code><code>user </code><code>=</code> <code>super</code><code>(UserCreationForm, </code><code>self</code><code>).save(commit</code><code>=</code><code>False</code><code>)</code>
<code> </code><code>user.set_password(</code><code>self</code><code>.cleaned_data[</code><code>"password1"</code><code>])</code>
<code> </code><code>if</code> <code>commit:</code>
<code> </code><code>user.save()</code>
<code>class</code> <code>UserChangeForm(forms.ModelForm):</code>
<code> </code><code>"""A form for updating users. Includes all the fields on</code>
<code> </code><code>the user, but replaces the password field with admin's</code>
<code> </code><code>password hash display field.</code>
<code> </code><code>"""</code>
<code> </code><code>password </code><code>=</code> <code>ReadOnlyPasswordHashField()</code>
<code> </code><code>fields </code><code>=</code> <code>(</code><code>'name'</code><code>, </code><code>'password'</code><code>, </code><code>'is_active'</code><code>, </code><code>'is_admin'</code><code>)</code>
<code> </code><code>def</code> <code>clean_password(</code><code>self</code><code>):</code>
<code> </code><code># Regardless of what the user provides, return the initial value.</code>
<code> </code><code># This is done here, rather than on the field, because the</code>
<code> </code><code># field does not have access to the initial value</code>
<code> </code><code>return</code> <code>self</code><code>.initial[</code><code>"password"</code><code>]</code>
<code>class</code> <code>UserAdmin(BaseUserAdmin):</code>
<code> </code><code># The forms to add and change user instances</code>
<code> </code><code>form </code><code>=</code> <code>UserChangeForm</code>
<code> </code><code>add_form </code><code>=</code> <code>UserCreationForm</code>
<code> </code><code># The fields to be used in displaying the User model.</code>
<code> </code><code># These override the definitions on the base UserAdmin</code>
<code> </code><code># that reference specific fields on auth.User.</code>
<code> </code><code>list_display </code><code>=</code> <code>(</code><code>'name'</code><code>,</code><code>'email'</code><code>, </code><code>'is_admin'</code><code>)</code>
<code> </code><code>list_filter </code><code>=</code> <code>(</code><code>'is_admin'</code><code>,)</code>
<code> </code><code>fieldsets </code><code>=</code> <code>(</code>
<code> </code><code>(</code><code>None</code><code>, {</code><code>'fields'</code><code>: (</code><code>'name'</code><code>, </code><code>'password'</code><code>)}),</code>
<code> </code><code>(</code><code>'Personal info'</code><code>, {</code><code>'fields'</code><code>: (</code><code>'email'</code><code>,)}),</code>
<code> </code><code>(</code><code>'Permissions'</code><code>, {</code><code>'fields'</code><code>: (</code><code>'is_admin'</code><code>,)}),</code>
<code> </code><code># add_fieldsets is not a standard ModelAdmin attribute. UserAdmin</code>
<code> </code><code># overrides get_fieldsets to use this attribute when creating a user.</code>
<code> </code><code>add_fieldsets </code><code>=</code> <code>(</code>
<code> </code><code>(</code><code>None</code><code>, {</code>
<code> </code><code>'classes'</code><code>: (</code><code>'wide'</code><code>,),</code>
<code> </code><code>'fields'</code><code>: (</code><code>'name'</code><code>, </code><code>'password1'</code><code>, </code><code>'password2'</code><code>)}</code>
<code> </code><code>),</code>
<code> </code><code>search_fields </code><code>=</code> <code>(</code><code>'name'</code><code>,)</code>
<code> </code><code>ordering </code><code>=</code> <code>(</code><code>'name'</code><code>,)</code>
<code> </code><code>filter_horizontal </code><code>=</code> <code>()</code>
<code># Now register the new UserAdmin...</code>
<code>admin.site.register(UserProfile,UserAdmin)</code>
<code># ... and, since we're not using Django's built-in permissions,</code>
<code># unregister the Group model from admin.</code>
<code>admin.site.unregister(Group)</code>
settings.py
<code>AUTH_USER_MODEL </code><code>=</code> <code>'index.UserProfile'</code>
需要删除数据库,重写建立。
本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1955038,如需转载请自行联系原作者