Django自带一套USER字段
并有一整套的认证模式等,可以直接使用,也可以在此基础上扩展,具体查看文档的
Extending the existing User model 部分
不改变原有数据,只是增加属于自己的方法,可以用 proxy models 实现
具体方法为,新建一个类,在类里的 Meta 类中 设置 proxy 属性为 True
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) class MyPerson(Person): class Meta: proxy = True def do_something(self): # ... pass
所以应该这样改(推测):
from django.contrib.auth.models import User class MyUser(User): class Meta: proxy = True
修改原来的数据项
强烈建议建立项目的时候使用自定义的 USER 继承默认 USER,从而取代默认 USER,即使不改变默认任何字段,但这样方便以后扩展。记得替换之后,执行下面的第1步和第三步。
from django.contrib.auth.models import AbstractUser class User(AbstractUser): pass
也可以自己定义一个USER字段
具体在文档的 Substituting a custom
User
model
在 setting 里加入语句
AUTH_USER_MODEL = 'myapp.MyUser'
在 app 的 models 里面写入自定义的 USER字段
最简单的自定义方法是继承
AbstractBaseUser
类定义字段时,如果需要使用 Django 提供的认证后端,则必须保证至少有一个字段是
unique=True
的
class MyUser(AbstractBaseUser): identifier = models.CharField(max_length=40, unique=True) ... USERNAME_FIELD = 'identifier'
这里的 USERNAME_FIELD 字段是用作认证的,需要声明给 Django 知道,方便认证。
记得在 app 的 admin.py 中注册这个模式(为了使管理员界面中显示这个数据类型)
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User admin.site.register(User, UserAdmin)