django 基本user列子

简介:

参考官网的例子,做了简单修改。

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,如需转载请自行联系原作者
目录
相关文章
|
JavaScript Python 前端开发
Django1.11 扩展User属性增加头像上传功能
Django自带的User模型没有头像和电话这两项属性,因此需要通过扩展User达到我们想要的效果,根据官方的文档,扩展新字段到User只需要用one-to-one模型即可。
7432 0
|
数据安全/隐私保护 Python
|
Python 数据安全/隐私保护
解决Django Mail from must equal authorized user', 'webmaster@localhost' 问题
Django的密码发信人是'webmaster@localhost', 参见官方文档settings.py DEFAULT_FROM_EMAIL? Default: 'webmaster@localhost' Default email address t...
2097 0
|
Python
DJANGO中正规的建立与USER外键的方式
以前都是直接与user 最近看书,上说settings.AUTH_USER_MODEL,这样好些。。。是为记。 from django.db import models from django.
1039 0
|
7月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
471 45
|
9月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
312 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
7月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
250 2
|
7月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
117 1