方式1, OneToOneField

from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
major = models.TextField(default='', blank=True)
address = models.CharField(max_length=200,default='',blank=True)
AUTH_PROFILE_MODULE = 'djangoadmin.myadmin.UserProfile'

settings.py

class ProfileInline(admin.StackedInline):
model = UserProfile
#fk_name = 'user'
max_num = 1
can_delete = False class CustomUserAdmin(UserAdmin):
inlines = [ProfileInline,] admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

admin.py(如果需要)

方式2,AbstractUser

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
nid = models.AutoField(primary_key=True)
nickname = models.CharField(verbose_name='昵称', max_length=32)
telephone = models.CharField(max_length=11, null=True, unique=True)
avatar = models.FileField(upload_to='avatar/', default="/avatar/default_avatar.jpg")
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

Settings.py:

AUTH_USER_MODEL = "user.UserInfo"

方式3,Signal

from django.db import models
from django.contrib.auth.models import User, UserManager
from .signals import * class CustomUser(User):
description = models.TextField(max_length=256, default="",blank=True)
headImage = models.ImageField(upload_to='/media/image/users/',null=True, blank=True)
scope = models.IntegerField(default=100)
objects = UserManager()
# signal.py
from django.db.models.signals import post_save
from django.contrib.auth.models import User
def create_user_detail(sender, instance, signal, *args, **kwargs): from .models import CustomUser
if kwargs['created']:
u = CustomUser()
u.__dict__.update(instance.__dict__)
u.save() post_save.connect(create_user_detail, sender=User)

Settings.py

CUSTOM_USER_MODEL = 'UserProfile.CustomUser'  

自定义认证

from django.conf import settings
from django.contrib.auth.backends import ModelBackend
from django.core.exceptions import ImproperlyConfigured
from django.db.models import get_model class CustomUserModelBackend(ModelBackend):
def authenticate(self, username=None, password=None):
try:
user = self.user_class.objects.get(username=username)
if user.check_password(password):
return user
except self.user_class.DoesNotExist:
return None def get_user(self, user_id):
try:
return self.user_class.objects.get(pk=user_id)
except self.user_class.DoesNotExist:
return None @property
def user_class(self):
if not hasattr(self, '_user_class'):
self._user_class = get_model(*settings.CUSTOM_USER_MODEL.split('.', 2))
if not self._user_class:
raise ImproperlyConfigured('Could not get custom user model')
return self._user_class

自定义认证

settings.py

AUTHENTICATION_BACKENDS = (
'myproject.auth_backends.CustomUserModelBackend',
)

settings.py

最新文章

  1. 冰冻三尺非一日之寒--js dom
  2. java并发编程(十)使用wait/notify/notifyAll实现线程间通信
  3. 5分钟windows wamp php安装phpunit 2015最新安装实践
  4. WCF服务部署到IIS7.5
  5. 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)
  6. 【转】Android4.4(MT8685)源码蓝牙解析--BLE搜索
  7. C# - DES加密+解密
  8. 《Head.First设计模式》的学习笔记(9)--外观模式
  9. iptables基础知识
  10. NSInternalInconsistencyException attempt to delete row 2 from section 4 which only contains 0 rows before the update 问题原因
  11. Redis多实例及主从搭建
  12. 【二十二】mysqli事务处理
  13. java8 for ,forEach ,lambda forEach , strean forEach , parller stream forEach, Iterator性能对比
  14. vue-cli3.0 使用postcss-plugin-px2rem(推荐)和 postcss-pxtorem(postcss-px2rem)自动转换px为rem 的配置方法;
  15. linux块设备驱动
  16. [http][ident] ident协议
  17. mongodb 批量修改
  18. 背水一战 Windows 10 (43) - C# 7.0 新特性
  19. java 内存优化
  20. 图解IIS配置过程

热门文章

  1. 通过ifreme实现文件上传
  2. HDU2065"红色病毒"问题【指数型母函数】
  3. Linux 链接网络
  4. Network Saboteur (深搜递归思想的特殊使用)
  5. 统计数字noip2007
  6. hadoop-sqoop学习笔记
  7. unity 查看打包资源占用
  8. Redis Sentinel(哨兵)主从高可用方案
  9. Azure VM开启资源监控
  10. Extjs5.0 学习之路【资源篇】