0

我是 django 的新手,在该领域的经验非常有限,所以我想你可以帮助我。

我正在尝试构建一个患者健康记录 (PHR) 系统,其中有两种类型的用户 Owner 和 Doctor ,它们都是 User 类的实例。我想创建一个医生登录的应用程序,用户必须输入他的凭据才能允许医生向他的 PHR 添加一个条目。

如果您能帮助我处理带有用于身份验证的模型和视图的双重日志记录部分,我将非常高兴。

4

1 回答 1

1

您可以使用 Django 1.5 的新可配置用户模型来完成此操作。您可以在此处查看文档。

为了给您一个总体思路,您可以扩展您的用户模型AbstractUser并添加其他字段以创建医生和患者之间的链接关系。如果患者只能有一个医生,而一个医生可以有很多患者,则可以使用 ForeignKey 关系;如果患者可以有很多医生,则可以使用多对多关系。我下面的例子是使用 ForeignKey:

class PHRUser(AbstractUser):
    phr_relate = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
    token = models.EmailField(null=True, blank=True)
    USER_CHOICES = (
        ('1', 'Doctor'),
        ('2', 'Patient')
    )
    user_type = models.CharField(choices=USER_CHOICES, max_length=10)

然后在您的注册中,您可以实现以下内容:

def UserRegistration(request):
    if request.method == 'POST':
        form = UserCreateForm(request.POST)
        if form.is_valid():
            data = request.POST.copy()
            # if user that is registering is a doctor, token is their own email. otherwise their token is their doctor's email and
            # their relation is their doctor
            if data.__getitem__('user_type') == '1':
                data.__setitem__('token', data.__getitem__('email'))
            else:
                doctor = PHRUser.objects.get(email=data.__getitem__('token'))
                data.__setitem__('phr_relate', staker.id)
                data.__setitem__('token', '')
            new_user = form.save(data)
        return HttpResponseRedirect('/')

然后在您的视图中,您可以实现一个实用功能,例如:

def user_relation(request, owner):
    if (request.user.email == owner.email) or (request.user.email == owner.token):
        return True

传入记录所有者的用户对象 as owner,函数将:

  • 如果登录的用户是医生并且他们正在尝试查看授权的患者记录,则返回 True
  • 如果登录用户是患者并且他们正在尝试查看自己的记录,则返回 True
  • 否则返回 False

你可以使用这个函数来检查你应该在你的视图中为这个请求显示什么。

您可能需要进行一些修改才能使您的实现正确,但这应该可以帮助您入门。

于 2013-02-28T19:48:54.140 回答