【问题标题】:Django:What is best way to import my Custom-User in views.py?Django:在views.py中导入我的自定义用户的最佳方法是什么?
【发布时间】:2020-04-24 08:58:08
【问题描述】:

实际上我在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.我有第三种选择,只需直接从 settings.py 导入 AUTH_USER_MODEL 并以这种方式使用它。

from django.conf import settings
MyUser=settings.AUTH_USER_MODEL

但是第三个选项返回一个字符串而不是返回我的自定义用户。但是为什么?

我只是想知道在views.py 中导入自定义用户的最佳选项是什么?为什么?

【问题讨论】:

    标签: python django django-custom-user


    【解决方案1】:

    您的前两个选项都可以。使用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,
        )
    

    【讨论】:

      猜你喜欢
      • 2015-12-11
      • 1970-01-01
      • 2020-02-03
      • 2022-11-19
      • 1970-01-01
      • 2022-07-03
      • 1970-01-01
      • 2014-02-28
      • 2012-04-30
      相关资源
      最近更新 更多