Tôi đang cố gắng kiểm tra các điều kiện nhất định trước khi người dùng được phép xem trang cài đặt người dùng cụ thể. Tôi đang cố gắng để đạt được điều này bằng cách sử dụng trang trí user_passes_test. Hàm này nằm trong khung nhìn dựa trên lớp như sau. Tôi đang sử dụng phương pháp trang trí để trang trí hàm get_initial trong khung nhìn.Cách sử dụng trình trang trí user_passes_test trong chế độ xem dựa trên lớp học?
class UserSettingsView(LoginRequiredMixin, FormView):
success_url = '.'
template_name = 'accts/usersettings.html'
def get_form_class(self):
if self.request.user.profile.is_student:
return form1
if self.request.user.profile.is_teacher:
return form2
if self.request.user.profile.is_parent:
return form3
@method_decorator(user_passes_test(test_settings, login_url='/accounts/usertype/'))
def get_initial(self):
if self.request.user.is_authenticated():
user_obj = get_user_model().objects.get(email=self.request.user.email)
if user_obj.profile.is_student:
return { ..........
...... ....
Dưới đây là test_settings chức năng:
def test_settings(user):
print "I am in test settings"
if not (user.profile.is_student or user.profile.is_parent or user.profile.is_teacher):
return False
else:
return True
Tôi nhận được lỗi dưới đây với các trang trí.
File "../django/core/handlers/base.py", line 111, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "../django/views/generic/base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
File "../braces/views.py", line 107, in dispatch
request, *args, **kwargs)
File "../django/views/generic/base.py", line 87, in dispatch
return handler(request, *args, **kwargs)
File "../django/views/generic/edit.py", line 162, in get
form = self.get_form(form_class)
File "../django/views/generic/edit.py", line 45, in get_form
return form_class(**self.get_form_kwargs())
File "../django/views/generic/edit.py", line 52, in get_form_kwargs
'initial': self.get_initial(),
File "../django/utils/decorators.py", line 29, in _wrapper
return bound_func(*args, **kwargs)
TypeError: _wrapped_view() takes at least 1 argument (0 given)
Tôi không chắc chắn cách giải quyết lỗi này. Tôi có áp dụng công cụ trang trí sai chức năng không? Bất kỳ khách hàng tiềm năng nào đều hữu ích.
OK. cảm ơn! – pxUx
Ví dụ của bạn đọc rằng nếu người dùng được xác thực thì hãy trả lại url đăng nhập. Nên nếu/else được đổi chỗ? – pymarco
@pymarco vị trí tốt, cố định ngay bây giờ – Alasdair