博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django 1.8扩展/自定义User
阅读量:7190 次
发布时间:2019-06-29

本文共 3178 字,大约阅读时间需要 10 分钟。

hot3.png

方式一:OneToOneField方式

参见或者

该方式没有什么特别之处,就是一对一的两个表,创建User不一定创建扩展,他们只是外键关系,不再赘述

方式二:扩展User表

参见或者

需求

如果你很满意默认User,只是想添加几个字段,那么使用这种方式即可。

目录结构

创建存放自定义User的包,目录结构如下

├── curr                                自定义User所在包│   ├── __init__.py│   ├── models.py                  ├── manage.py└── tuser    ├── __init__.py    ├── settings.py                    配置文件    ├── urls.py    └── wsgi.py

settings配置

INSTALLED_APPS = (    'curr'        # 添加一行,添加该app)AUTH_USER_MODEL = 'curr.MyUser'     # 本系统用户表(必须在app下的models.py文件,否则找不到Model)

自定义用户Model

在User所在包的models.py中添加

#coding:utf-8from django.db import modelsfrom django.contrib.auth.models import AbstractBaseUser, AbstractUserclass User(AbstractUser):        # 继承AbstractUser,该Model和默认User的字段方法一样,只需要添加自己需要的字段即可        test = models.CharField(max_length=40)        # 自定义的字段

创建完后在数据表auth_user中添加该字段

使用自定义User

参见或

使用时不能再from django.contrib.auth.models import User

  1. 创建其他Model的外键时可以如下
from django.conf import settingsclass UserType(models.Model):       user = models.ForeignKey(settings.AUTH_USER_MODEL)       type = models.CharField(max_length=10)

或者

from curr.models import MyUserclass UserType(models.Model):       user = models.ForeignKey(MyUser)       type = models.CharField(max_length=10)

视图函数中使用时可以

from curr.models import MyUser# 或者from django.contrib.auth import get_user_modelget_user_model()    # 该方法只在所有Model都已经加载完后使用

方式三:重写User表

参见或者

需求

如果对默认User不满意,需要完全自定义(例如以phone为唯一标示,不以默认的username)

目录结构

同方式二

settings配置

同方式二

自定义用户Model

在User所在包的models.py中添加

# coding=utf8import datetimefrom django.contrib.auth.models import AbstractBaseUser, BaseUserManagerfrom django.db import modelsfrom django.db.models import Ffrom django.contrib.auth.models import Userfrom django.conf import settingsclass MyUserManager(BaseUserManager):    """    功能说明:自定义用户Model管理器    """    use_in_migrations = True    def _create_user(self, username, password, **extra_fields):        """        Creates and saves a User with the given username, email and password.        """        now = datetime.datetime.now()        if not username:            raise ValueError('The given username must be set')        user = self.model(username=username, add_time=now, **extra_fields)        user.set_password(password)        user.save(using=self._db)        return user        # 实现一下两个方法用于创建账号    def create_user(self, username, password=None, **extra_fields):        return self._create_user(username, password, **extra_fields)    def create_superuser(self, username, password, **extra_fields):        return self._create_user(username, password, **extra_fields)class User(AbstractBaseUser):    """    功能说明:自定义用户    """    username = models.CharField(u"帐号/用户名", max_length=30, unique=True)    name = models.CharField(u"姓名", max_length=30)    phone = models.CharField(u'手机', max_length=11)    add_time = models.DateTimeField(u'创建时间')    objects = MyUserManager()                        # 设置自定义的相应管理器    USERNAME_FIELD = 'username'                 # 必须(用户唯一标示字段)    REQUIRED_FIELDS = ['add_time', 'name']    # 必须(不能缺省字段)    class Meta:        db_table = "auth_user"                        # 定义数据表名

创建完后在数据表auth_user中添加该字段

使用自定义User

同方式二

转载于:https://my.oschina.net/watcher/blog/848565

你可能感兴趣的文章
javascript声明二维数组
查看>>
ssh 操作 esxi 基本命令
查看>>
微软携手均衡科技提供箱包行业ERP解决方案
查看>>
批量自动安装常用软件
查看>>
在Ubuntu上,使用SWT嵌入AWT/SWING代码导致Eclipse崩溃问题
查看>>
Mysql 的一些优化 (MyISAM和InnoDB)
查看>>
Linux中特殊符号的用法
查看>>
2.5-ls命令
查看>>
1.1-php编译安装
查看>>
记华为S5700S-28P-LI-AC一次重写VRP的经历
查看>>
Varnish的简单使用
查看>>
OGG运维优化脚本(十四)-信息同步类--定义文件自动下发
查看>>
策略模式
查看>>
字符设备(二)
查看>>
Linux TC的ifb原理以及ingress流控
查看>>
SSDT 结构体
查看>>
android 银联支付接入报nullexception异常
查看>>
配置OSPF
查看>>
EIGRP邻居关系
查看>>
x3850X5如何添加CPU和QPI Wrap Card及两节点配置说明
查看>>