在我的项目中,我有两个名为学生和教师的模型。这两个模型是用户的OneToOne字段。 我有3个应用程序:主页(索引页面,常见问题解答,关于......),教师(教师界面,管理课程,编辑个人资料......)和< strong>学生(学生界面,简介...)
我有一个登录表单(在应用程序主页中),我希望将其用于登录教师和学生,并在身份验证后重定向到正确的应用程序。这样做的最佳方式是什么?我想创建两个小组(老师和学生)并在注册表后分配到正确的小组,并以登录形式,只检查小组?
PS:学生可以创建一个帐户,但对于老师,我们的团队会创建帐户,因此我们没有教师的注册表
答案 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
...