模块化django用户

django-primate的Python项目详细描述


  • 模块化django用户。

我不打算讨论这是否是个好主意。这个Django application monkey补丁django,以便有一个自定义的用户模型 插入django.contrib.auth应用程序。

安装

首先,通过检查最新代码或使用pip来安装模块:

pip install django-primate

为了给猴子打补丁,我们得早点做。我创造了一个 修改了可用于开发的manage.py文件。这就建立了 在运行管理命令(例如 runserver`)我们应用修补程序。将此复制到项目中并覆盖 默认值manage.py

#!/usr/bin/env python
from django.core.management import setup_environ, ManagementUtility
import imp
try:
    imp.find_module('settings') # Assumed to be in the same directory.
except ImportError:
    import sys
    sys.stderr.write(
        "Error: Can't find the file 'settings.py' in the directory "
        "containing %r. It appears you've customized things.\nYou'll have to "
        "run django-admin.py, passing it your settings module.\n" % __file__
        )
    sys.exit(1)

import settings

if __name__ == "__main__":
    setup_environ(settings)
    import primate
    primate.patch()
    ManagementUtility().execute()

要对部署进行monkey修补,您可以在设置之后立即应用修补程序 DJANGO_SETTINGS_MODULE

现在将django.contrib.auth添加到INSTALLED_APPS

使用

安装此修补程序后,您实际上完全没有用户模型。你有 自己创建一个并在设置中定义它。我会给你一个 关于如何使用提供的userbase类执行此操作的示例。

project/users/models.py

from primate.models import UserBase, UserMeta
from django.db import models

class CustomUser(UserBase):
    __metaclass__ = UserMeta
    name = models.CharField(max_length=500, default='Jon Deg')
    title = models.CharField(max_length=20, blank=True)

settings.py

``AUTH_USER_MODEL = 'users.models.CustomUser'``

现在您可以通过from django.contrib.auth.models import Userfrom project.users.models import CustomUser

自定义字段和覆盖默认字段

很简单

  • 要添加字段,只需像平常一样将字段添加到模型中。
  • 要重写字段,只需重写字段名,它将被使用 在UserBase中定义的。

覆盖特性是普通django中不可用的特殊特性 模型抽象类并在自定义元类中完成。也可以删除 通过稍微改变元类,在UserBase类中定义的字段 可以看一下代码,这真的很简单。

管理

为了让管理员工作,我已经将monkey补丁primate.patchpatch admin.autodiscover,这样它就不会为 django.contrib.auth.User。这意味着你需要注册 你自己。最简单的方法是首先将users添加到 INSTALLED_APPS,然后将类似的内容添加到ùsers/admin.py

from primate.admin import UserAdminBase
from django.contrib import admin
from django.contrib.auth.models import User


class UserAdmin(UserAdminBase):
    pass


admin.site.register(User, UserAdmin)

django.contrib.auth.models.User相比,UserBase中现在是什么?

我做了一些小改动:

  1. 删除了first_namelast_name
  2. 添加了name
  3. username现在最多50个字符
  4. 使email唯一
  5. get_profile方法只返回self

如前所述,现在可以更改所有这些,删除添加和重写字段 在你的用户模型中。

南部

我很担心,这是一个主要的功能,Luckley Andrew已经想到: 来自SOUTH_MIGRATION_MODULES

“请注意,此词典中的键是'app labels',而不是指向 应用程序;例如,我是否要为 django.contrib.auth,我想在这里使用auth作为密钥。“

现在是时候了,只需将此添加到您的设置:

SOUTH_MIGRATION_MODULES = {
    'auth': 'users.migrations',
}

可选密码哈希

sha-1是密码的默认django哈希算法。有些人可能不同意 这是最好的选择。django-primate使您可以简单地使用 替代散列,因为您可以覆盖check_passwordset_password自定义用户模型中的方法。因为Bcrypt是个好人 选项有一种简单的方法可以使用此实现哈希:

``project/users/models.py``::

    from primate.models import UserBase, UserMeta, BcryptMixin
    from django.db import models

    class CustomUser(BcryptMixin, UserBase):
        __metaclass__ = UserMeta

请注意,这将在授权成功时更新所有密码以使用bcrypt。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish