【问题标题】:Multi User instances Logging simultaneously from one system using django多用户实例使用 django 从一个系统同时记录
【发布时间】:2013-02-15 01:35:12
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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
    • 否则返回 False

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

    您可能需要做一些修改才能使您的实现正确,但这应该可以帮助您开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2012-02-02
      相关资源
      最近更新 更多