2013-02-28 24 views
0

我是django的新手,在該領域的經驗非常有限,所以我認爲你可以幫助我。多用戶實例使用django從一個系統同時登錄

我想建立一個病人健康記錄(PHR)系統,其中有兩種類型的用戶所有者和醫生都是用戶類的實例。我想創建一個醫生登錄的應用程序,並且用戶必須輸入他的憑據以允許醫生向他的PHR添加條目。

如果你可以幫助我使用模型和認證視圖的雙重記錄部分,我會非常高興。

回答

1

你可以使用Django 1.5的新的可配置用戶模型來實現這一點。您可以查閱文檔here

爲了給你一個大致的想法,你擴展你的用戶模型到AbstractUser並添加額外的字段來創建醫生和患者之間的鏈接關係。如果病人只能有一名醫生,而且醫生可以有很多病人,或者如果病人可以有很多醫生,則可以使用一種「多對多」關係。我下面的例子是使用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,函數將會:

  • 返回真,如果登錄的用戶是醫生,他們正試圖查看其授權的病人記錄
  • 返回真,如果登錄用戶是病人,他們正試圖查看自己的記錄
  • 返回否則爲假

您可以使用此函數作爲檢查來查看您應該在視圖中顯示此請求的內容。

您可能需要做一些修補以獲得適合您的實施的權利,但這應該讓您開始。

相關問題