User models设计

来自CloudWiki
跳转至: 导航搜索

项目表的设计

构想需要的表

  • users
  • goods
  • trade
  • user_operation

创建相关应用

[root@localhost mxshop]# python3 manage.py startapp goods

[root@localhost mxshop]# python3 manage.py startapp trade

[root@localhost mxshop]# python3 manage.py startapp user_operation

移动到apps目录下,方便管理:

[root@localhost mxshop]# mv goods apps/

[root@localhost mxshop]# mv trade apps/

[root@localhost mxshop]# mv user_operation apps/

注册相关应用

在settings.py 中注册相关应用:


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',
    'goods',
    'trade',
    'user_operation',
]

User models设计

apps/users/models.py:

设计UserProfile表

from datetime import datetime

from django.db import models
from django.contrib.auth.models import AbstractUser#导入系统用户

# Create your models here.


class UserProfile(AbstractUser):
    """
    用户
    """
    name = models.CharField(max_length=30, null=True, blank=True, verbose_name="姓名")
    birthday = models.DateField(null=True, blank=True, verbose_name="出生年月")
    gender = models.CharField(max_length=6, choices=(("male", u"男"), ("female", "女")), default="female", verbose_name="性别")
    mobile = models.CharField(null=True, blank=True, max_length=11, verbose_name="电话")
    email = models.EmailField(max_length=100, null=True, blank=True, verbose_name="邮箱")

    class Meta:
        verbose_name = "用户"#设置表的别名
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

设计验证码表

跟刚才同一文件下.

class VerifyCode(models.Model):
    """
    短信验证码
    """
    code = models.CharField(max_length=10, verbose_name="验证码")
    mobile = models.CharField(max_length=11, verbose_name="电话")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")#这里不能写成datetime.now()

    class Meta:
        verbose_name = "短信验证码"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.code

替换系统用户

在settings.py中添加:

AUTH_USER_MODEL = 'users.UserProfile'

这样认证的用户模型就变成了我们自己写的,替换掉系统中原来默认的。


模板迁移及写入

python3 manage.py makemigrations

python3 manage.py sqlmigrate users 0001

python3 manage.py migrate


验证

在mysql中输入命令验证:

MariaDB [(none)]> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mxshop             |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.01 sec)

MariaDB [(none)]> use mxshop;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

MariaDB [mxshop]> show tables;

+------------------------------------+
| Tables_in_mxshop                   |
+------------------------------------+
| auth_group                         |
| auth_group_permissions             |
| auth_permission                    |
| django_admin_log                   |
| django_content_type                |
| django_migrations                  |
| django_session                     |
| users_userprofile                  |
| users_userprofile_groups           |
| users_userprofile_user_permissions |
| users_verifycode                   |
+------------------------------------+

MariaDB [mxshop]> desc users_userprofile;

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| password     | varchar(128) | NO   |     | NULL    |                |
| last_login   | datetime     | YES  |     | NULL    |                |
| is_superuser | tinyint(1)   | NO   |     | NULL    |                |
| username     | varchar(150) | NO   | UNI | NULL    |                |
| first_name   | varchar(30)  | NO   |     | NULL    |                |
| last_name    | varchar(30)  | NO   |     | NULL    |                |
| is_staff     | tinyint(1)   | NO   |     | NULL    |                |
| is_active    | tinyint(1)   | NO   |     | NULL    |                |
| date_joined  | datetime     | NO   |     | NULL    |                |
| name         | varchar(30)  | YES  |     | NULL    |                |
| birthday     | date         | YES  |     | NULL    |                |
| gender       | varchar(6)   | NO   |     | NULL    |                |
| mobile       | varchar(11)  | YES  |     | NULL    |                |
| email        | varchar(100) | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
15 rows in set (0.01 sec)

MariaDB [mxshop]> desc users_verifycode;

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| code     | varchar(10) | NO   |     | NULL    |                |
| mobile   | varchar(11) | NO   |     | NULL    |                |
| add_time | datetime    | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+