Django:验证了不同的用户模型

时间:2016-12-13 13:48:19

标签: django django-models django-forms

在我的项目中,我有两个名为学生教师的模型。这两个模型是用户的OneToOne字段。 我有3个应用程序:主页(索引页面,常见问题解答,关于......),教师(教师界面,管理课程,编辑个人资料......)和< strong>学生(学生界面,简介...)

我有一个登录表单(在应用程序主页中),我希望将其用于登录教师和学生,并在身份验证后重定向到正确的应用程序。这样做的最佳方式是什么?我想创建两个小组(老师和学生)并在注册表后分配到正确的小组,并以登录形式,只检查小组?

PS:学生可以创建一个帐户,但对于老师,我们的团队会创建帐户,因此我们没有教师的注册表

1 个答案:

答案 0 :(得分:1)

如果与User表的关系是OneToOne,您可以从user.student或user.teacher访问它,所以你会这样做......

def login_view(request):
   if form.is_valid():
      # get user from form
      _user = form.get_user()
      user = authenticate(form.cleaned_data['username'], form.cleaned_data['password'])
      login(request, user)
      if hasattr(user, 'student'):
          # You'll return to student app
          return redirect('studen:home')
      # else
      return redirect('teacher:home')

修改

decorators.py

...
from django.contrib.auth.decorators import user_passes_test
def group_required(*args):
    if args:
        def decorator(user):
            if user.is_staff or user.is_superuser:
                return True
            return user.is_authenticated() and user.groups.filter(name__in=args).exists()
    else:
        decorator = lambda x: x.is_authenticated()

    return user_passes_test(decorator)
...

并使用它......

...
@group_required('student')
def home_student(request):
   # some code

@group_required('teacher', 'student'):
def common_view_for_all(request):
   # some code
...