运行Django的查询集时,用户身份验证

问题描述 投票:1回答:2

我要寻找一个解决以下问题:

我有一个包含许多种查询集和Python代码的主要功能。在这个功能有很多查询其具有在用户认证为只运行。我知道,当我的函数之前使用@login_required我可以验证用户,但我该如何使用函数内部的认证?

我的示例代码:

def auth(request):

    username = request.POST['username']
    password = request.POST['password']

    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return render(request, 'project/index.html')

    else:

        login(request, user)

def dashboard_data(request):

       qs1 = MyModel.objects.all()
       qs2 = MyModel.objects.all()
       qs3 = MyModel.objects.all()

        #Lets say I want to run the the following queries when user logged in
       qs_logged1 = MyModel.objects.all()
       qs_logged2 = MyModel.objects.all()

       send_data = {
          'qs1': qs1,
          'qs2': qs2,
          'qs3': qs3,
          'qs_logged1':qs_logged1,
          'qs_logged2':qs_logged2
                   }

     return render(request, 'project/index.html', send_data)

我怎么能运行上面只有查询时,用户登录?

python django authentication django-authentication
2个回答
1
投票
def dashboard_data(request):
    qs1 = MyModel.objects.all()
    qs2 = MyModel.objects.all()
    qs3 = MyModel.objects.all()

    if request.user.is_authenticated:
        qs_logged1 = MyModel.objects.all()
        qs_logged2 = MyModel.objects.all()

        send_data = {
            'qs1': qs1,
            'qs2': qs2,
            'qs3': qs3,
            'qs_logged1': qs_logged1,
            'qs_logged2': qs_logged2
        }

        return render(request, 'project/index.html', send_data)
    else:
        send_data = {
            'qs1': qs1,
            'qs2': qs2,
            'qs3': qs3,
        }
        return render(request, 'project/index.html', send_data)

1
投票

您可以使用is_authenticated用于检查用户是否登录或不

def dashboard_data(request):
    if request.user.is_authenticated:
        # do something with authenticated user
    else:
        # do something without authenticated user
    return something

您也可以参考this SO post为同

© www.soinside.com 2019 - 2024. All rights reserved.