我有三个Django项目:项目A、项目B和项目C。项目A用作身份验证项目,项目B负责管理与用户相关的功能,项目C处理与餐厅相关的操作。
在项目A中,我创建了一个自定义用户模型来满足我的身份验证需求。现在,我想利用这个自定义用户模型来访问项目B和项目C的API。
如何实现项目之间的集成?具体而言,我希望实现以下目标:
启用用户身份验证:我想使用在项目A中定义的自定义用户模型,在用户访问项目B和项目C的API时对其进行身份验证。
共享用户信息:我需要使用项目A中定义的自定义用户模型访问项目B和项目C中的用户信息。这包括检索用户详细信息、更新用户配置文件以及执行与用户相关的操作。
保持一致性:必须确保对项目A中的自定义用户模型所做的任何更改都反映在所有项目中,包括项目B和项目C。
这是我的自定义用户模型,来自项目A。
import uuid
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models
from django.utils import timezone
class UserManager(BaseUserManager):
def _create_user(self, email, password, is_staff, is_superuser, **extra_fields):
if not email:
raise ValueError('Users must have an email address')
now = timezone.now()
email = self.normalize_email(email)
user = self.model(
email=email,
is_staff=is_staff,
is_active=True,
is_superuser=is_superuser,
last_login=now,
date_joined=now,
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password, **extra_fields):
return self._create_user(email, password, False, False, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
user = self._create_user(email, password, True, True, **extra_fields)
return user
class User(AbstractBaseUser, PermissionsMixin):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# username = models.CharField(max_length=255, null=True, blank=True, unique=True)
email = models.EmailField(max_length=254)
name = models.CharField(max_length=254, null=True, blank=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
last_login = models.DateTimeField(null=True, blank=True)
date_joined = models.DateTimeField(auto_now_add=True)
organization_id = models.UUIDField(null=True, blank=True)
USERNAME_FIELD = 'email'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def get_absolute_url(self):
return "/users/%i/" % (self.pk)
我已经尝试过这个解决方案(Using same database table with two different projects Django)。但它不起作用。或者我没有正确地执行它。如果这是解决方案,请给予一个完整的例子。您的文本
1条答案
按热度按时间jq6vz3qz1#
要将项目A的自定义用户模型与项目B和C集成,您可以使用Django的多数据库功能。这允许你在一个Django项目中使用多个数据库。
下面是如何实现这种集成的示例:
1.在单独的应用中定义自定义用户模型
为了确保所有项目之间的一致性,最好在单独的应用程序中定义自定义用户模型,这三个项目都可以安装和使用。
您可以创建一个名为“accounts”(或您喜欢的任何其他名称)的新应用程序,并在其www.example.com文件中定义自定义用户模型models.py。
1.为每个项目配置数据库设置
在Django设置文件中,您可以使用Django的DATABASE配置为每个项目定义单独的数据库设置。
例如,可以按如下方式定义项目A的数据库设置:
同样,您可以使用单独的数据库名称和凭据为项目B和C定义数据库设置。
1.定义数据库路由器以将自定义用户模型查询路由到项目A
为了确保与自定义用户模型相关的所有查询都被路由到Project A数据库,您可以在“accounts”应用程序内的单独文件(例如“www.example.com”)中定义数据库路由器routers.py。
下面是如何定义路由器的示例:
这个路由器将确保所有与自定义用户模型相关的查询都被路由到“project_a_db”数据库,而所有其他查询都被路由到它们各自的数据库。
1.在Django设置中设置数据库路由器
在Django设置文件中,您可以设置所有项目都要使用的数据库路由器,如下所示:
有了这些设置,您现在可以使用在项目A中定义的自定义用户模型访问项目B和C中的API。
要对用户进行身份验证,您可以使用Django的身份验证框架,它将自动使用自定义用户模型进行身份验证。
要在项目间共享用户信息,您可以在项目B和C中定义API端点,使用Django的查询API查询项目A中的自定义用户模型。例如,您可以在项目B中定义一个API端点来检索用户详细信息,如下所示:
类似地,您可以定义其他API端点来更新用户配置文件、执行与用户相关的操作等。