dj鲜生-03-用户模块的创建与模型类的创建

用户模块创建,app user

(base) G:\dailyfresh>python manage.py startapp user

在这里插入图片描述

用户应用的注册

在配置中添加应用的名称即可
在这里插入图片描述

回顾要设计的模型类

在这里插入图片描述

用户表与地址表

一对多对应关系

用户表为一方

地址表为多方

用户模型类的设计

复用django自带的用户认证的体系

因为django自带了一些用户的字段,我们直接继承复用就好

from django.db import models
from django.contrib.auth.models import AbstractUser
from db.base_model import BaseModel
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from django.conf import settings

class User(AbstractUser, BaseModel):
    """用户模型类"""

    def generate_active_token(self):
        """生成用户签名字符串"""
        serializer = Serializer(settings.SECRET_KEY, 3600)
        info = {'confirm': self.id}
        token = serializer.dump(info)
        return token.decode()

    class Meta:
        db_table = 'df_user'
        verbose_name = '用户'
        verbose_name_plural = verbose_name

class Meta , 用于设置数据表的相关内容,详细的配置写在该类的类属性中
db_table, 类属性,用于定义当前的模型类User在迁移生成数据表时,以什么表名来显示
verbose_name , 用于在后台管理中,以什么名称来显示这个表

留意报错情况

生成迁移文件时,会有报错情况发生


(base) G:\dailyfresh>python manage.py makemigrations
SystemCheckError: System check identified some issues:

ERRORS:
auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse ac
cessor for 'User.groups'.
        HINT: Add or change a related_name argument to the definition for 'User.groups' or
 'User.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' cla
shes with reverse accessor for 'User.user_permissions'.
        HINT: Add or change a related_name argument to the definition for 'User.user_permi
ssions' or 'User.user_permissions'.
user.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse ac
cessor for 'User.groups'.
        HINT: Add or change a related_name argument to the definition for 'User.groups' or

解决报错,配置中指定用户认证的

AUTH_USER_MODEL = "user.User"

在这里插入图片描述

解决好后再次生成迁移文件

问题解决

不再报错

小结,用户模型类的操作,主要两步

》一,用户模型类

1,用户模型类继承,django的抽象用户类

2,继承自定义的基类

》二,配置

告诉django用户表用哪个表

迁移操作

》迁移前,数据库中

在这里插入图片描述

》生成迁移文件

(base) G:\dailyfresh>python manage.py makemigrations

在这里插入图片描述

》迁移数据,生成数据表

命令

(base) G:\dailyfresh>python manage.py migrate

效果


(base) G:\dailyfresh>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, user
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying user.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying sessions.0001_initial... OK

(base) G:\dailyfresh>

》迁移后,数据表中

在这里插入图片描述

》用户表的表结构如下

在这里插入图片描述

地址模型类的定义

》先演示一个错误的定义方式

在这里插入图片描述

这是django 1版本的定义方式

会报如下错误:

  File "G:\dailyfresh\user\models.py", line 23, in <module>
    class Address(BaseModel):
  File "G:\dailyfresh\user\models.py", line 25, in Address
    user = models.ForeignKey("User", verbose_name="所属帐户")
TypeError: __init__() missing 1 required positional argument: 'on_delete'

正解,外键字段需要加上 on_delete

》定义地址模型类


class Address(BaseModel):
    """地址模型类"""
    user = models.ForeignKey("User", verbose_name="所属帐户", on_delete=models.CASCADE)
    receiver = models.CharField(max_length=20, verbose_name="收件人", )
    addr = models.CharField(max_length=256, verbose_name="收货地址")
    zip_code = models.CharField(max_length=6, null=True, verbose_name="邮政编码")
    phone = models.CharField(max_length=11, verbose_name="联系电话")
    is_default = models.BooleanField(default=False, verbose_name="是否默认")

    class Meta:
        db_table = "df_address"
        verbose_name = "地址"
        verbose_name_plural = verbose_name

》生成迁移文件

不会再报错

在这里插入图片描述

》迁移数据

在这里插入图片描述

》最终地址表结果

在这里插入图片描述

。。。

用户模块的表到此创建完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸鱼编程pyhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值