Django:What 是在 views.py 中导入自定义用户的最佳方式吗?
Django:What is best way to import my Custom-User in views.py?
实际上我已经在 models.py
中创建了自己的自定义用户 (MyUser)
from django.db import models
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
country=models.CharField(max_length=20)
settings.py
AUTH_USER_MODEL = 'new_user.MyUser'
我在 views.py 中创建了一个简单的函数来创建新用户。
from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.contrib.auth import get_user_model
from django.conf import settings
def save_account(request):
MyUser=get_user_model()
if request.method == "POST":
name=request.POST.get("name")
email=request.POST.get("email")
password1=request.POST.get("password1")
password2=request.POST.get("confirm-password")
country=request.POST.get("country")
new_user=MyUser.objects.create_user(username=name,email=email,password=password1,country=country)
new_user.save()
return redirect('/')
else:
return HttpResponse("404 Not Found")
1. 这里我使用 get_user_model() 函数来获取我当前的自定义用户。
2. 我有第二个选项来获取我的自定义用户,只需从 models.py 导入 MyUser 模型然后使用它。
from .models import MyUser
3. 我有第三个选项来获取自定义用户,只需直接从 [=44= 导入 AUTH_USER_MODEL ] 像这样使用它。
from django.conf import settings
MyUser=settings.AUTH_USER_MODEL
但是第三个选项返回一个字符串而不是返回我的自定义-user.but为什么?
我只想知道在 views.py 中哪个选项最适合导入自定义用户,为什么?
你的前两个选项都可以。使用 get_user_model
可以更轻松地重用应用程序而无需更改导入。然而,许多 Django 项目并不意味着可以重复使用,在这种情况下,显式导入可以更清楚地说明用户模型是从哪里导入的。
settings.AUTH_USER_MODEL
是一个字符串。当您执行 AUTH_USER_MODEL = 'new_user.MyUser'
时将其设置为字符串,并且 Django 在您访问它时不会自动将其更改为模型实例。它在外键中很有用,因为这意味着您不需要导入模型。例如:
class MyModel(models.Model):
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
实际上我已经在 models.py
中创建了自己的自定义用户 (MyUser)from django.db import models
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
country=models.CharField(max_length=20)
settings.py
AUTH_USER_MODEL = 'new_user.MyUser'
我在 views.py 中创建了一个简单的函数来创建新用户。
from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.contrib.auth import get_user_model
from django.conf import settings
def save_account(request):
MyUser=get_user_model()
if request.method == "POST":
name=request.POST.get("name")
email=request.POST.get("email")
password1=request.POST.get("password1")
password2=request.POST.get("confirm-password")
country=request.POST.get("country")
new_user=MyUser.objects.create_user(username=name,email=email,password=password1,country=country)
new_user.save()
return redirect('/')
else:
return HttpResponse("404 Not Found")
1. 这里我使用 get_user_model() 函数来获取我当前的自定义用户。
2. 我有第二个选项来获取我的自定义用户,只需从 models.py 导入 MyUser 模型然后使用它。
from .models import MyUser
3. 我有第三个选项来获取自定义用户,只需直接从 [=44= 导入 AUTH_USER_MODEL ] 像这样使用它。
from django.conf import settings
MyUser=settings.AUTH_USER_MODEL
但是第三个选项返回一个字符串而不是返回我的自定义-user.but为什么?
我只想知道在 views.py 中哪个选项最适合导入自定义用户,为什么?
你的前两个选项都可以。使用 get_user_model
可以更轻松地重用应用程序而无需更改导入。然而,许多 Django 项目并不意味着可以重复使用,在这种情况下,显式导入可以更清楚地说明用户模型是从哪里导入的。
settings.AUTH_USER_MODEL
是一个字符串。当您执行 AUTH_USER_MODEL = 'new_user.MyUser'
时将其设置为字符串,并且 Django 在您访问它时不会自动将其更改为模型实例。它在外键中很有用,因为这意味着您不需要导入模型。例如:
class MyModel(models.Model):
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)