2013-02-28 6 views
0

저는 장고를 처음 접했고 현장에서 경험이 거의 없으므로 저를 도와 줄 수 있다고 생각했습니다.다중 사용자 인스턴스 django를 사용하여 하나의 시스템에서 동시에 로깅

두 가지 유형의 사용자 인 소유자와 의사가 User 클래스의 인스턴스 인 환자 건강 기록 (PHR) 시스템을 구축하려고합니다. 의사가 로그인 한 상태에서 응용 프로그램을 만들고 의사가 환자의 PHR에 진료 항목을 추가 할 수 있도록 자격 증명을 입력해야합니다.

인증을위한 모델 및 뷰와 함께 이중 로깅 부분을 도와 주시면 기쁘게 생각합니다.

답변

1

Django 1.5의 새로운 구성 가능한 사용자 모델을 사용하여이를 수행 할 수 있습니다. 설명서 here을 검토 할 수 있습니다.

일반적인 아이디어를 제공하기 위해 사용자 모델을 AbstractUser으로 확장하고 추가 필드를 추가하여 의사와 환자 간의 연결 관계를 만듭니다. 환자가 의사를 한 명만 가질 수 있고 의사가 많은 환자를 가질 수있는 경우 ForeignKey 관계를 사용하거나 환자가 많은 의사를 가질 수있는 경우 Many to Many 관계를 사용합니다.

def user_relation(request, owner): 
    if (request.user.email == owner.email) or (request.user.email == owner.token): 
     return True 
: 당신과 같은 유틸리티 기능을 구현할 수있는 뷰에서 다음

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('/') 

:

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) 

그런 다음 등록 당신이 뭔가를 구현할 수 있습니다 내 아래 예제는 외래 키를 사용

레코드 소유자의 사용자 개체를 owner으로 전달하면 함수는 다음과 같이됩니다.

로그인 한 사용자 경우 로그인 한 사용자가 환자의 경우
  • 반환은 True입니다 그들의 권한이 부여 된 환자를 보려고하고 의사는
  • 반환 진정한 기록하고 그들은 자신의 기록
  • 돌아 보려고 틀린 경우

이 기능을 사용하여보기에서이 요청에 대해 표시해야 할 내용을 확인할 수 있습니다.

구현을 위해이 권리를 얻기 위해 약간의 조정이 필요할 수 있지만, 시작해야합니다.