自动创建用户配置文件或其他Django对象

时间:2016-10-09 22:20:31

标签: django authentication django-models django-views profile

我已经设置了一个基本的Django网站并添加了登录网站。此外,我创建了一个学生(配置文件)模型,扩展了内置的用户模型。它与用户模型具有OneToOne关系。

但是,我还没有强迫用户在他们第一次登录时自动创建个人资料。如何在没有创建的情况下确保他们无法进行任何操作?

我尝试过在视图中定义以下内容:

def UserCheck(request):
    current_user = request.user
    # Check for or create a Student; set default account type here
    try:
        profile = Student.objects.get(user = request.user)   
        if profile == None:
            return redirect('/student/profile/update')
        return True
    except:
        return redirect('/student/profile/update')

然后添加以下内容:

UserCheck(request)

在我的每个观点的顶部。但是,这似乎永远不会重定向用户来创建配置文件。

有没有最好的方法来确保用户被迫在上面创建个人资料对象?

1 个答案:

答案 0 :(得分:2)

看起来你正在尝试做类似于Django的user_passes_test装饰器(documentation)。您可以将您拥有的功能转换为:

# Side note: Classes are CamelCase, not functions
def user_check(user):
    # Simpler way of seeing if the profile exists
    profile_exists = Student.objects.filter(user=user).exists()   
    if profile_exists:
       # The user can continue
       return True
    else:
        # If they don't, they need to be sent elsewhere
        return False

然后,您可以为视图添加装饰器:

from django.contrib.auth.decorators import user_passes_test

# Login URL is where they will be sent if user_check returns False
@user_passes_test(user_check, login_url='/student/profile/update')
def some_view(request):
    # Do stuff here
    pass