Django form dispatch method : value error : view returned None instead of HttpResponse
Django form dispatch method : value error : view returned None instead of HttpResponse
我想做什么:
我正在检查用户是否来自 "support" 组,然后他才能查看页面。如果不是,我想在响应页面中向用户显示正确的消息。
我在 dispatch() 视图方法上应用了 group_required 装饰器,用于检查用户是否来自支持组。
我试过了 :
但仍然收到 ValueError。
我的代码
view.py
class ScheduledTestView(FormView):
'''
Provides an admin panel interface for creating scheduled tests.
Scheduled test will be created as active=False intially.
'''
serializer_class = TestShortSerializer
template_name = 'admin/scheduled_test.html'
form_class = ScheduledTestForm
@method_decorator(group_required(['support']))
def dispatch(self, request, *args, **kwargs):
return super(ScheduledTestView, self).dispatch(request, *args, **kwargs)
group_required函数
def group_required(group_names):
"""
group_name will be the list of group name
"""
def decorator(func):
@wraps(func, assigned=available_attrs(func))
def inner(request, *args, **kwargs):
user = request.user
if user.is_authenticated():
if (user.groups.filter(name__in=group_names) and user.is_staff) or user.is_superuser:
return func(request, *args, **kwargs)
return redirect_to_login('/admin/')
return inner
return decorator
错误
GET
Request URL: http://localhost:8000/admin/support/scheduled_test/
Django Version: 1.8.4
Exception Type: ValueError
Exception Value:
The view support.views.ScheduledTestView didn't return an HttpResponse object. It returned None instead.
Exception Location: /home/kishan/.virtualenvs/kishan_pal/local/lib/python3.4/site-packages/django/core/handlers/base.py in get_response, line 151
正如@Daniel Roseman 在您的问题下方的评论中提到的那样。如果用户未通过身份验证,则 inner
不会 return 任何响应,而在这种情况下它应该 return redirect_to_login('/admin/')
。
如此变化
def inner(request, *args, **kwargs):
user = request.user
if user.is_authenticated():
if (user.groups.filter(name__in=group_names) and user.is_staff) or user.is_superuser:
return func(request, *args, **kwargs)
return redirect_to_login('/admin/')
到
def inner(request, *args, **kwargs):
user = request.user
if user.is_authenticated():
if (user.groups.filter(name__in=group_names) and user.is_staff) or user.is_superuser:
return func(request, *args, **kwargs)
return redirect_to_login('/admin/')
应该可以解决问题。查看差异 return redirect_to_login('/admin/')
在 if
块之外。
我想做什么:
我正在检查用户是否来自 "support" 组,然后他才能查看页面。如果不是,我想在响应页面中向用户显示正确的消息。 我在 dispatch() 视图方法上应用了 group_required 装饰器,用于检查用户是否来自支持组。
我试过了 :
我的代码
view.py
class ScheduledTestView(FormView):
'''
Provides an admin panel interface for creating scheduled tests.
Scheduled test will be created as active=False intially.
'''
serializer_class = TestShortSerializer
template_name = 'admin/scheduled_test.html'
form_class = ScheduledTestForm
@method_decorator(group_required(['support']))
def dispatch(self, request, *args, **kwargs):
return super(ScheduledTestView, self).dispatch(request, *args, **kwargs)
group_required函数
def group_required(group_names):
"""
group_name will be the list of group name
"""
def decorator(func):
@wraps(func, assigned=available_attrs(func))
def inner(request, *args, **kwargs):
user = request.user
if user.is_authenticated():
if (user.groups.filter(name__in=group_names) and user.is_staff) or user.is_superuser:
return func(request, *args, **kwargs)
return redirect_to_login('/admin/')
return inner
return decorator
错误
GET Request URL: http://localhost:8000/admin/support/scheduled_test/
Django Version: 1.8.4
Exception Type: ValueError
Exception Value:
The view support.views.ScheduledTestView didn't return an HttpResponse object. It returned None instead.Exception Location: /home/kishan/.virtualenvs/kishan_pal/local/lib/python3.4/site-packages/django/core/handlers/base.py in get_response, line 151
正如@Daniel Roseman 在您的问题下方的评论中提到的那样。如果用户未通过身份验证,则 inner
不会 return 任何响应,而在这种情况下它应该 return redirect_to_login('/admin/')
。
如此变化
def inner(request, *args, **kwargs):
user = request.user
if user.is_authenticated():
if (user.groups.filter(name__in=group_names) and user.is_staff) or user.is_superuser:
return func(request, *args, **kwargs)
return redirect_to_login('/admin/')
到
def inner(request, *args, **kwargs):
user = request.user
if user.is_authenticated():
if (user.groups.filter(name__in=group_names) and user.is_staff) or user.is_superuser:
return func(request, *args, **kwargs)
return redirect_to_login('/admin/')
应该可以解决问题。查看差异 return redirect_to_login('/admin/')
在 if
块之外。