发布于2020-02-10 17:28 阅读(535) 评论(0) 点赞(20) 收藏(0)
上次我们搭建了环境,这次,我们创建用户表和超级管理员。
django-admin startapp <appname>
,一定要注意,打这个命令的时候有两个条件,**一个是在apps这个文件目录下,另一个就是用的专用的虚拟环境,**不然都创建不了app。注意,user app里面的urls必须是这样的格式:
from django.urls import path from user import views app_name = 'user' urlpatterns = [ ]
- 1
- 2
- 3
- 4
- 5
- 6
不然就会报错。
from django.urls import path,include
urlpatterns = [
# path('admin/', admin.site.urls),
path('',include('user.urls')),
# path('user/', include('user_m.urls')),
# path('', include('verifications.urls')),
]
我们在models文件里面创建我们要的用户模型。
用户模型我设计成两个,一个是普通用户,一个是超级用户。
django自带用户模型,但是根据我们中国人的习惯,通常用手机号注册为主,邮箱是可有可无的,所以,我要改一下django的代码结构,变成我们想要的。
先导入两个类
from django.contrib.auth.models import AbstractUser,UserManager as _UserManager
from django.db import models
def create_superuser(self, username, email, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(username, email, password, **extra_fields)
在源码中,有一个create_superuser属性,这个是创建超级管理员,我们要将里面传参的email改成email=None
使它默认为空,这样就可以了。同时,我们要初始化父类的方法,在models里面修改的代码如下:
class UserManager(_UserManager):
"""
define user manager for modifing 'no need email'
when 'python manager.py createsuperuser '
"""
def create_superuser(self, username, password, email=None, **extra_fields):#用原来的类去传递自身定义的参数
super().create_superuser(username=username,password=password, email=email, **extra_fields)#继承了super的方法,创建
源码:
class AbstractUser(AbstractBaseUser, PermissionsMixin):
"""
An abstract base class implementing a fully featured User model with
admin-compliant permissions.
Username and password are required. Other fields are optional.
"""
username_validator = UnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=150, blank=True)
email = models.EmailField(_('email address'), blank=True)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
objects = UserManager()
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email'] #这个要设置成你想要默认必须输入的参数。
我们分析一下源码,这个源码里面包含了username并且它是唯一的,还有first_name,last_name,但是他们默认空白是可以的,就是那个blank=True参数。我们看最下面,有一个REQUIRED_FIELDS,这个就是我们要改的内容,我们先在代码中添加mobile字段,再把它在我们的代码中改成mobile,其它不动。
代码如下:
class User(AbstractUser):
objects = UserManager()#创建一个代理管理器
REQUIRED_FIELDS = ['mobile']#这个是必须要加上去的,不然会默认指定
mobile = models.CharField(max_length=11,unique=True,verbose_name='手机号',help_text='手机号',error_messages={'unique':'此手机号已经注册'})
email_ac = models.BooleanField(default=False,verbose_name='邮箱状态')
class Meta:
db_table = 'tb_users'
verbose_name = '用户'
def __str__(self):
return self.username
这个是帮助性文字,用来提示用户。
是指定的报错信息,为之后注册的时候打下铺垫。给js用的。
这是一个抽象类,用来补充该类的参数,在生成模型的时候不会被实例化成对象。、
这个是给数据库中的模型取个别名,方便查看和管理,不然django会根据驼峰命名规则给你自动生成一个。
给Model去一个方便阅读的名字,这个是方便后台管理取得名字。
当所有都做好之后,我们不能直接迁移,还需要最最最关键的一步,这一步没弄好,前面的都是瞎搞,这一步就是在settings文件里面,指定替换的用户模型类,在settings里面最好在最后,添加:
AUTH_USER_MODEL = 'user.User' # 指定替换的用户模型类,这个User就是我们的类名!!!
然后在项目目录下在cmd中执行操作:
# 先
python manage.py makemigrations
# 后
python manage.py migrate
第二种,直接在pycharm中Tools这一栏,点击 Run manage.py Task,然后直接先输入makemigrations,然后再输入migrate。最后查看数据库,会发现,多了很多的表,这些表是正常的,是django自带的用户系统,我们只需要查看我们的tb_users在不在里面就行。
最后的最后,在刚刚开启的命令端输入,createsuperuser,创建我们第一个管理员吧。
作者:sdhjsdh
链接:https://www.pythonheidong.com/blog/article/231018/859dde5577c22058411c/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!