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 | | +----------+-------------+------+-----+---------+----------------+