大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程,从零开始,到最后成功部署上线的项目。这一节,我们来设计用户模型,即PeekpaUser。
Peekpa.com的官方地址:http://peekpa.com
上一节我们已经继承了AdminLTE的Dashboard和Login页面,那么这一节我们就来设计一下PeekpaUser这个模块。
PeekpaUser首先是为了登录系统而用,我们打算集成Django原生的User系统,再添加我们的一些修改,来实现我们自己的PeekpaUser。
那么,接下来我们就开始动工吧。
is_staff
首先,因为这个User对于Django来说,应该算是一个Application,所以,我们就先在apps文件夹下创建一个peekpauser的Python包:
然后在这个底下,创建一个叫migrations的Python包。结构如下:
接着我们需要在peekpauser文件目录下,创建一个models.py文件
在这个models.py文件里面,我们就需要编写我们的PeekpaUser的模型代码。
正常的Django自带的User系统,他的登录时需要username和password,咱们这里需要使用email和password登录。而且我们之前的Login页面也是通过email和password登录的。
所以我们这里的代码,设计的Model结构就应该是这样:
class User(AbstractBaseUser, PermissionsMixin):
uid = ShortUUIDField(primary_key=True)
telephone = models.CharField(max_length=11, unique=True)
email = models.EmailField(unique=True)
username = models.CharField(max_length=100)
nickname = models.CharField(max_length=100, default="")
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
access_part = models.CharField(max_length=200)
data_joined = models.DateTimeField(auto_now_add=True)
这里要说明一下,我们这里引入了ShortUUID作为我们数据库的主键,避开使用原来的自增长的主键,这样的作用是在外人眼中,针对用户信息的一种保护。因为外部的人不知道你的实际用户会有多少,如果是自增长的,可能会通过某个接口的调用,比如在id 大于1000之后调用就失败了,这么说明你的系统的用户也就1000个。
接下来我们要指定一下:
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
EMAIL_FIELD = 'email'
第一个说明系统是以email为主键;第二个则是要求在创建超级管理员时候需要输入的东西;第三个则是设置一下EMAIL_FIELD变量,日后发邮件方便。
这些弄完,我们还需要创建一个UserManager()来管理我们的对象。
class UserManager(BaseUserManager):
def _create_user(self, email, username, password, **kwargs):
if not email:
raise ValueError('请传邮箱')
if not username:
raise ValueError('请传入用户名')
if not password:
raise ValueError('请传入密码')
user = self.model(email=email, username=username, password=password, **kwargs)
user.set_password(password)
user.save()
return user
def create_user(self, email, username, password, **kwargs):
kwargs['is_superuser'] = False
return self._create_user(email, username, password, **kwargs)
def create_superuser(self, email, username, password, **kwargs):
kwargs['is_superuser'] = True
kwargs['is_staff'] = True
return self._create_user(email, username, password, **kwargs)
看到UserManager类有两个方法:create_user
和create_superuser
,分别对映的创建用户和创建超级管理员。
至此,我们的PeekpaUser就创建完成了。当然,想要让他生效,还有重要的一步,那就是在settings.py里面添加进去我们的PeekpaUser。需要在settings.py文件里面,添加一个AUTH_USER_MODEL
变量,还有就是要把peekpauser得在INSTALLED_APPS
里面添加进去:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.peekpauser', # 新添加的PeekpaUser应用
]
AUTH_USER_MODEL = 'peekpauser.User'
注意这里AUTH_USER_MODEL
,不需要写绝对路径,只需要写app_name.class_name
就可以了。同样,INSTALLED_APPS
里面,别忘了最后的逗号,
,因为这个是数组。
到此,我们的模块就创建好了,接下来就需要在manage.py里面执行命令。进入manage.py的路径:
执行的命令:
$ makemigrations
和
$ migrate
这两个命令了,出现这个就表示执行成功.
注意!!!
如果migrate失败,因为现在是项目初期,就可以直接用终端打开你的MySQL,然后通过以下命令删除database,重新创建就可以:$ CREATE DATABASE 数据库名; $ drop database <数据库名>;
这个时候,我们使用PyCharm自带的Database查看器,在页面的右侧,有个竖条的Database,:
点进去,然后选择MySQL:
接着配置我们的本地数据库的基本信息,user,password还有database,这三个信息在我们的settings.py文件中的DATABASES
里就有,填写好之后,点击OK。
注意!!!
如果缺失文件,可以点击自动安装下载缺失文件就好
如果成功,右侧将会变成这个样子:
我们看到,这里面其实都是我们在执行Django的migrate命令之后,产生的数据表。而且看到,我们创建的peekpauser的表单也在其中。
这样子就说明成功了,接下来,我们需要在manage.py命令中,通过createsuperuser
来创建我们的超级管理员:
他会让你输入email,username还有password,上面显示的就是创建成功。
但是如何才能检测我们刚才创建的用户是否成功呢?
就需要来到Django自己集成的Admin系统里了。
在浏览器里面输入Admin页面的地址:
http://127.0.0.1:8000/admin
就会出现这个画面:
然后我们把刚才创建的Super User的email和password输入,登录进去:
如果是这个界面,就说嘛登录成功了。下一节我们来用Login页面来实现登录功能。
最后总结一下,
设计PeekpaUser模块:
INSTALLED_APP
和AUTH_USER_MODEL
变量中把User添加进去;