美文网首页
django 中User的重写

django 中User的重写

作者: 入间 | 来源:发表于2018-07-06 22:24 被阅读0次

django本身的auth_user 只包含了基本的信息包括用户名,密码,邮箱以及注册时间和最新的登录时间,但是这些字段很难满足我们的要求,有时我们想记录用户更多的信息,例如手机号等信息,这时就需要在auth_user 的基础上增加字段,django自定义User网上有四种方法。

1,是官网上推荐的方法,就是增加一个表auth_profile,其中以auth_user 表中的id作为Forgein Key将两个表过关联起来,这样可以在auth_profile 中增加多个用户的信息。

2,另外一种是修改django的源码,这种方法简单暴力直接,但是这种方法可移植性差,不利于多项目部署。

3,重写User,也就是继承AbstractUser和Permissions两个类,其实django的User Model也是继承自这两个类,因此你可以做类似User的定义方法定义User。

4,继承django auth/models 中的User继续增加字段,这种方法需要修改setting中的AUTH_USER_MODEL=‘app.User’ app为你自定义的app,INSTALLED_APP中要包含Contenttypes和auth两个app,class meta中 db_table 要指定为auth_user, 如果要在admin中管理用户的话,需要将app_label 进行指定。而且要在admin中重新定义UserAdmin 将新添加的字段写在list_display和add_fields中。详见django.contrib.auth.admin中。

第一种大多数人都会用,第二种不推荐用,第三种写起来比较麻烦,在这里我就写下第四种的写法

# apps.users.models 
from datetime import datetime
from django.db import models
from django.contrib.auth.models import AbstractUser


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

在settings 文件中

# 增加一句  这局必须的写上 因为后面的方法会用到这个配置
# 将自定义的user 写入 
AUTH_USER_MODEL = 'users.UserProfile'

# 在这里加一个增加 source rouce的方法
import sys 

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE_DIR)
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))

如何使用自定义的User类

from django.contrib.auth import get_user_model

# 这个方法会从settings中找AUTH_USER_MODEL ,然后取得的User
# 至于为何不直接那models里的User  暂时不清楚,后续会去测试,知道后再修改本文
User = get_user_model()

然后就可以开始使用了.

本文为个人记录所用.

相关文章

  • 2019-04-03 User模型

    重写django User 模型

  • django 中User的重写

    django本身的auth_user 只包含了基本的信息包括用户名,密码,邮箱以及注册时间和最新的登录时间,但是这...

  • 权限相关操作

    利用Django自带的相关方法对权限进行基本的操作。 重写User模型 在创建的应用中的模块文件重新定义User模...

  • Django 重写用户模型

    django——重写用户模型 Django内建的User模型可能不适合某些类型的项目。例如,在某些网站上使用邮件地...

  • django中默认User

    这篇文章在博客园有出处的,是某位大神创作的,然后自己为了研究用户登录注册的问题,所以把它copy到简书上,希望可以...

  • Django 默认 user 表的替换和扩充

    User 表的扩充 需要继承 Django 的 user 的抽象类 AbstractUser 在 django u...

  • Django 项目中使用 User 数据模型

    通过 Django 工具查找 User 数据模型 获取 User 类的最佳方式: 在数据模型中,使用 settin...

  • 2019-06-19【关于django中auth模块的表】

    参考博客 Django权限系统AUTH模块 auth模块相关的表 user表User是auth模块中维护用户信息的...

  • auth 应用

    User 模型 from django.contrib.auth.models import User 1. 字段...

  • django中级 --- User模块

    模块说明: User对象属性 User方法: 模块扩展: django默认的user模块字段固定,可能无法满足我们...

网友评论

      本文标题:django 中User的重写

      本文链接:https://www.haomeiwen.com/subject/hoqiuftx.html