[py]django项目-让系统用自定义的users表认证

Posted 毛台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[py]django项目-让系统用自定义的users表认证相关的知识,希望对你有一定的参考价值。

项目开端

参考的是mxonline项目

先把这两项完成

  • 1.app设计
  • 2.app的models的设计

经过分析系统有四个模块

users       - 用户管理
course      - 课程管理
oranization - 授课教师&授课机构
operation   - 用户操作管理


一般系统都先设计用户模块, 把较为独立的模块也放在users模块

先设计user模块

- 用户详情里的字段有
  image
  nick_name
  gender
  brith
  mobile
  address

django默认自带用户表的字段无法满足,因此需要继承它并做扩展,让系统用我们继承过来的.

完成项目初始化

  • 创建项目
  • 创建app users
  • 写models修改认证表为自己的表

users/models.py

- 其中birthday字段类型是DateField
- gender是choices形式
- image头像是ImageField类型,并设置默认头像
- 修改表字段名称显示verbose_name
- 修改表名显示Meta


- 这里继承AbstractUser表, 可以查看AbstractUser类,里面的字段正是系统默认的


import django.contrib.auth.models import AbstractUser # 定义了django默认的model

class UserProfile(AbstractUser):
    image = models.ImageField(upload_to="image/%Y/%m", default="image/default.png", max_length=100)
    nick_name = models.CharField(max_length=50, verbose_name="昵称", default="")
    gender = models.CharField(max_length=5, choices=(("male", "男"), ("female", "女")), default="female")
    birthday = models.DateField(verbose_name="生日", null=True, blank=True)
    mobile = models.CharField(max_length=11, verbose_name="手机", null=True, blank=True)
    address = models.CharField(max_length=50, verbose_name="地址", default="")

    class Meta:
        verbose_name = "用户信息"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

  • 修改settings.py,让django使用我们扩展的表.
app名字.对应model的class名

AUTH_USER_MODEL = "users.UserProfile"
  • 同步数据库,观察users表

循环引用问题

- 已经确定4个模块
users
courses
organization
operation


- 循环引用
users:   用户课程  有这个字段
courses: 课程评论  有这个字段

彼此又要互相引用

user    外键 课程评论
courses 外键 用户课程

会造成循环引用问题,利用model分层设计解决



- model分层设计: 防止循环引用
3者之间的共同关系通过operation model来关联.
        operation
___________|____________
|          |            |
users    courses    organization

邮箱验证码和广告条的model设计

users/models.py

- 较底层的model都放到users模型当中,如邮箱验证码,和广告条较为独立
- send_type是选择类型
- 发送邮件有时间,注意是datetime.now,发送时系统时间.没括号
- 轮播图需要地址URLField类型和前后顺序IntegerField


class EmailVerifyRecord(models.Model):
    code = models.CharField(max_length=10, verbose_name="验证码")
    email = models.EmailField(max_length=50, verbose_name="邮箱")
    send_type = models.CharField(choices=(("register", "注册"), ("forget", "忘记密码")), max_length=10)
    send_time = models.DateTimeField(default=datetime.now)

    class Meta:
        verbose_name = "邮箱验证码"
        verbose_name_plural = verbose_name


class Banner(models.Model):
    title = models.CharField(max_length=100, verbose_name="标题")
    image = models.ImageField(upload_to="banner/%Y/%m", verbose_name="轮播图")
    url = models.URLField(max_length=200, verbose_name="访问地址")
    index = models.IntegerField(default=200, verbose_name="顺序")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    class Meta:
        verbose_name = "轮播图"
        verbose_name_plural = verbose_name

表的字段小结

userprofile:
    image
    nickname
    gender
    tel
    address

emailrecord:
    code
    email
    send_type
    send_time

banner:
    name
    url
    index
    add_time

以上是关于[py]django项目-让系统用自定义的users表认证的主要内容,如果未能解决你的问题,请参考以下文章

django 登录注册

23-自定义用户模型

Django实践2——图书馆系统

Django博客项目之登录和注册系统

Django 前后端分离 JWT 登录

用django框架开发一个B2C购物网站的基本流程和用到的知识点总结1