调用"返回渲染"从外部方法调用时不会工作(Django,views.py)

时间:2016-05-31 15:55:18

标签: python django

这是第一个问题。

我在view.py文件中创建可重用的方法以处理用户身份验证时遇到问题。我创建并导入了一个如下所示的utils.py文件:

from django.shortcuts import render
from django.contrib.auth.forms import AuthenticationForm

def check_log_in(request):
    username = None
    if request.user.is_authenticated():
        user = request.user
        if user.is_staff == False:
            message = "You are not an authorized staff member."
            form = AuthenticationForm()
            context = {'form': form,
                       'message': message}
            return render(request, 'obits/login.html', context)
    else:
        message = "Please log-in to add a new record."
        form = AuthenticationForm()
        context = {'form': form,
                   'message': message}
        return render(request, 'obits/login.html', context)

如果我将相同的代码直接放入我的视图中,它可以正常工作,但现在我将它作为一个单独的方法,它不会在返回渲染中中断,而是继续通过代码。我使用print语句来测试它是否正确调用它。这是当前的观点:

def new(request):
    check_log_in(request)

    if request.method == 'POST':
        if form.is_valid():
            #code, yada, yada, context
            return render(request, 'obits/detail.html', context)
        else:
            #code, yada, yada, context
            return render(request, 'obits/new.html', context)
    else:
        #code, yada, yada, context
        return render(request, 'obits/new.html', context)

在当前设置中,它将检测到用户未登录,但仍然只是向前显示new.html页面,而不是重定向到登录。但是如果我剪切并粘贴check_log_in中包含的确切代码而不是仅仅调用它,它就可以正常工作。

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

如果您从check_log_in()返回,但对返回的值不执行任何操作,则new()视图的执行将继续。

您需要检查check_log_in()是否返回了某些内容,如果有,请从new()视图中返回:

def new(request):
    response = check_log_in(request)
    if response is not None:
        return response

    if request.method == 'POST':
        # rest of your code