python - 如何在 Dnago 中使用户名字段不区分大小写?我的实施正确吗?
问题描述
我正在使用 Django 和 Django Rest Framework 开始我的 Web 项目。我希望我的用户名字段不区分大小写,因此我在网上搜索了如何实现它并访问了这个漂亮的博客:https ://simpleisbetterthancomplex.com/tutorial/2017/02/06/how-to-implement-case-不敏感的用户名.html。他提出了这个方法:
from django.contrib.auth.models import AbstractUser, UserManager
class CustomUserManager(UserManager):
def get_by_natural_key(self, username):
case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
return self.get(**{case_insensitive_username_field: username})
class CustomUser(AbstractUser):
objects = CustomUserManager()
对于模型.py
但是当我编写测试时,它们失败了,因为当我创建两个用户名相同但大小写不同的用户时,User.objects.get_by_natural_key 返回了两个用户对象(例如:'aniket' 和 'Aniket')。
所以,我通过了这种方法:
from django.contrib.auth.models import UserManager, AbstractUser
# Create your models here.
class CustomUserManager(UserManager):
def create_user(self, username, email=None, password=None, **extra_fields):
return super().create_user(username.lower(),email,password,**extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
return super().create_superuser(username.lower(),email,password,**extra_fields)
def get_by_natural_key(self, username):
case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
return self.get(**{case_insensitive_username_field: username})
class User(AbstractUser):
objects = CustomUserManager()
那么,这种方法是否符合要求?
解决方案
推荐阅读
- apache-spark - 使用模式注册表和火花将 avro 序列化到 Kafka
- php - PHP多维数组 - 如果第一个键的值存在,则从第二个键返回值
- android - 什么是
和 - 在安卓 XML 中?
- intel-fpga - 如何检查微处理器是 Altera Nios?
- java - 为 JAVA 创建 OPC UA 客户端
- asp.net - itextsharp 回调 pdf 文档,同时单击生成的 pdf 上的打印按钮
- jhipster - JHipster Import-jdl Entity generator master.xml 和 CacheConfiguration 未更新
- android - 在 jni GetStringUTFChars 崩溃
- unity3d - Unity 如何在我的 EditorWindow 中捕获 GameView
- kubernetes - Kubernetes 如何帮助我为每个客户端部署一个应用程序?