这是第一个问题。
我在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中包含的确切代码而不是仅仅调用它,它就可以正常工作。
有什么想法吗?提前谢谢!
答案 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