Django 1.8扩展/自定义User
2017-03-01 12:55
302 查看
方式一: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-8 from django.db import models from django.contrib.auth.models import AbstractBaseUser, AbstractUser class User(AbstractUser): # 继承AbstractUser,该Model和默认User的字段方法一样,只需要添加自己需要的字段即可 test = models.CharField(max_length=40) # 自定义的字段
创建完后在数据表auth_user中添加该字段
使用自定义User
参见官方文档或翻译版使用时不能再
from django.contrib.auth.models import User
创建其他Model的外键时可以如下
from django.conf import settings class UserType(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL) type = models.CharField(max_length=10)
或者
from curr.models import MyUser class 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_model get_user_model() # 该方法只在所有Model都已经加载完后使用
方式三:重写User表
参见官方文档或者翻译版需求
如果对默认User不满意,需要完全自定义(例如以phone为唯一标示,不以默认的username)目录结构
同方式二settings配置
同方式二自定义用户Model
在User所在包的models.py中添加# coding=utf8 import datetime from django.contrib.auth.models import AbstractBaseUser, BaseUserManager from django.db import models from django.db.models import F from django.contrib.auth.models import User from django.conf import settings class 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
同方式二相关文章推荐
- 自定义 Django的User Model,扩展 AbstractUser类注意事项
- django 自定义用户user模型的三种方法
- Django笔记 如何扩展User表的字段
- django 自定义user 表
- django admin扩展-自定义后台管理界面
- 初入Django4-User表字段自定义拓展
- Django1.10 扩展User属性增加头像上传功能
- 给django admin后台管理user扩展下拉框及多选框的字段
- django1.8自定义404错误
- django 自定义 USER
- How to Extend Django User Model 如何扩展Django用户模型
- django manage.py扩展自定义命令方法
- django 1.8 官方文档翻译: 6-4-2 编写自定义的django-admin命令
- Python+ django + pycharm项目之扩展默认user表
- django 注册、登录及第三方接口程序(2):扩展User表
- django中使用Profile扩展User模块(基于django 1.10版本下)
- django manage.py扩展自定义命令
- Django 扩展User 编写自己的认证后台
- spring security 扩展User,自定义User字段
- django 自定义user使用权限管理模块