多用户实例使用django从一个系统同时记录

时间:2013-02-28 18:16:36

标签: django logging django-models django-views django-users

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用Django 1.5的新可配置用户模型来完成此任务。您可以查看文档here

为了给您一个总体思路,您将用户模型扩展到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

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

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

您可以使用此功能作为检查,以查看您应在视图中显示此请求的内容。

你可能需要做一些修补才能使你的实现正确,但这应该让你开始。