这是第一个问题。
我在创建可在我的 views.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)
在当前的设置中,它将检测到用户未登录,但仍会继续显示新的.html页面,而不是重定向到登录。但是,如果我剪切并粘贴check_log_in中包含的确切代码,而不仅仅是调用它,它就可以正常工作。
有什么想法吗?提前谢谢你!
如果从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