用Django全栈开发——10. PeekpaUser的设计

大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程,从零开始,到最后成功部署上线的项目。这一节,我们来设计用户模型,即PeekpaUser。

Peekpa.com的官方地址:http://peekpa.com

用Django全栈开发——10. PeekpaUser的设计_第1张图片

上一节我们已经继承了AdminLTE的Dashboard和Login页面,那么这一节我们就来设计一下PeekpaUser这个模块。

PeekpaUser首先是为了登录系统而用,我们打算集成Django原生的User系统,再添加我们的一些修改,来实现我们自己的PeekpaUser。

那么,接下来我们就开始动工吧。

开发PeekpaUser模块

is_staff
首先,因为这个User对于Django来说,应该算是一个Application,所以,我们就先在apps文件夹下创建一个peekpauser的Python包:

用Django全栈开发——10. PeekpaUser的设计_第2张图片

然后在这个底下,创建一个叫migrations的Python包。结构如下:

用Django全栈开发——10. PeekpaUser的设计_第3张图片

接着我们需要在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_usercreate_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的路径:

用Django全栈开发——10. PeekpaUser的设计_第4张图片

执行的命令:

$ makemigrations
和
$ migrate

这两个命令了,出现这个就表示执行成功.

注意!!!
如果migrate失败,因为现在是项目初期,就可以直接用终端打开你的MySQL,然后通过以下命令删除database,重新创建就可以:

$ CREATE DATABASE 数据库名;
$ drop database <数据库名>;

这个时候,我们使用PyCharm自带的Database查看器,在页面的右侧,有个竖条的Database,:

用Django全栈开发——10. PeekpaUser的设计_第5张图片

点进去,然后选择MySQL:

用Django全栈开发——10. PeekpaUser的设计_第6张图片

接着配置我们的本地数据库的基本信息,user,password还有database,这三个信息在我们的settings.py文件中的DATABASES里就有,填写好之后,点击OK。

注意!!!
如果缺失文件,可以点击自动安装下载缺失文件就好

用Django全栈开发——10. PeekpaUser的设计_第7张图片

如果成功,右侧将会变成这个样子:

用Django全栈开发——10. PeekpaUser的设计_第8张图片

我们看到,这里面其实都是我们在执行Django的migrate命令之后,产生的数据表。而且看到,我们创建的peekpauser的表单也在其中。

这样子就说明成功了,接下来,我们需要在manage.py命令中,通过createsuperuser来创建我们的超级管理员:

用Django全栈开发——10. PeekpaUser的设计_第9张图片

他会让你输入email,username还有password,上面显示的就是创建成功。

但是如何才能检测我们刚才创建的用户是否成功呢?

就需要来到Django自己集成的Admin系统里了。

在浏览器里面输入Admin页面的地址:

http://127.0.0.1:8000/admin

就会出现这个画面:

用Django全栈开发——10. PeekpaUser的设计_第10张图片

然后我们把刚才创建的Super User的email和password输入,登录进去:

用Django全栈开发——10. PeekpaUser的设计_第11张图片

如果是这个界面,就说嘛登录成功了。下一节我们来用Login页面来实现登录功能。

技术总结

最后总结一下,

设计PeekpaUser模块:

  1. 创建PeekpaUser应用;
  2. 在Models.py文件中,定义User类,父类必须是AbstractBaseUser, PermissionsMixin;
  3. 需要实现UserManager类;
  4. 在Settings.py文件中的INSTALLED_APPAUTH_USER_MODEL变量中把User添加进去;
  5. 在manage.py下,执行makemigrations和migrate命令,成功之后,需要通过createsuperuser命令来创建超级管理员。
  6. 完毕

用Django全栈开发——10. PeekpaUser的设计_第12张图片

你可能感兴趣的:(Django,Peekpa.com,Python,django,python,node.js)