方式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

Django扩展Auth-User表的几种方法的更多相关文章

  1. django序列化单表的4种方法的介绍

    这里主要是讲序列化单表的几种方法 先看下models中设计的表结构 from django.db import models # Create your models here. class Book ...

  2. MySQL数据库分表的3种方法

    原文地址:MySQL数据库分表的3种方法作者:dreamboycx 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目 ...

  3. mysql分表的3种方法

    来源:http://blog.sina.com.cn/s/blog_640738130100tzeq.html 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死 ...

  4. mysql分表的三种方法

    先说一下为什么要分表当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间.根据个人经验,mysql执行一 ...

  5. mysql分表的3种方法(转)

    一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. 根据个人经验,mysq ...

  6. mysql 清空表的两种方法

    一.Delete DELETE FROM `table`; 二.Truncate TRUNCATE `table`; 第一种方法其实就是去掉where条件,没有了条件,也就是删除掉表里面的所有记录了: ...

  7. (转)mysql分表的3种方法

    原文:http://blog.51yip.com/mysql/949.html 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿 ...

  8. mysql 分表的三种方法

    原文:https://www.cnblogs.com/lucky-man/p/6207873.html   一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查 ...

  9. Jquery ajax提交表单几种方法

    在jquery中ajax提交表单有post与get方式,在使用get方式时我们可以直接使用ajax 序列化表单$('#表单ID').serialize();就行了,下面我来介绍两个提交表单数据的方法. ...

随机推荐

  1. 剑指offer--20.矩形覆盖

    链接:https://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6来源:牛客网 @DanielLea 思路分析: ...

  2. python 生成唯一字符串UUID与MD5

    1 Python使用UUID库生成唯一ID UUID是128位的全局唯一标识符,通常由32字节的字符串表示,保证时间和空间的唯一性 通过MAC地址.时间戳.命名空间.随机数.伪随机数来保证生成ID的唯 ...

  3. 欧拉函数 and 大数欧拉 (初步)

    前两天总结了素数筛法,其中就有Eular筛法.现在他又来了→→ φ(n),一般被称为欧拉函数.其定义为:小于n的正整数中与n互质的数的个数. 毕竟是伟大的数学家,所以以他名字命名的东西很多辣. 对于φ ...

  4. shell for的用法

    #!/bin/sh for1(){ for i in 1 2 3 4 5 6do echo "$i"done } for1#!/bin/shfor2(){for i in {1.. ...

  5. C# 代码注释和Config文件中,特殊符号的书写方法。

    App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  6. 异常:SQL Error: 1064, SQLState: 42000

    在MySQL中,有很多字符被MySQL保留了.如果你用来做列名或者表名就会出现问题. 我这里出现的问题是采用了order作为表明,这是一个保留字,所以出现问题.

  7. mongo之map-reduce笔记

    package com.sy.demo; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import ...

  8. (转)C#正则表达式Regex类的用法

    原文地址如下:http://www.studyofnet.com/news/297.html 一.C#正则表达式符号模式 字 符 描 述 \ 转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反 ...

  9. 【转】IMSI和IMEI

    国际移动客户识别码(International Mobile Subscriber Identification Number) 为了在无线路径和整个GSM移动通信网上正确地识别某个移动客户,就必须给 ...

  10. I/O---读取txt文件----demo

    首先获得一个文件句柄.File file = new File(); file即为文件句柄. 读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了.接下 ...