Контроль доступа и валидация ввода (json) в представлениях Django ajax?
В обычном представлении мы используем декораторы (например, login_required/user_passes_test/etc.) для контроля доступа к представлению и формы для проверки пользовательского ввода.
Есть ли что-то подобное для ajax представлений, которые принимают json в качестве входных (и выходных) данных?
Делать это вручную - незаконно многословно...
def my_ajax_view(request):
if not request.is_ajax():
return http.HttpResponseForbidden('cannot use this view directly')
if request.user.is_anonymous():
return http.HttpResponseForbidden('must login')
if not request.user.has_perm('can_foo'):
return http.HttpResponseForbidden('no foo permission')
try:
data = json.loads(request.body)
except json.decoder.JSONDecodeError:
return http.HttpResponseForbidden('invalid input')
# validate {"a": [list of int]}
if not isinstance(data, dict): ..error
if not 'a' in data.keys(): ..error
if not isinstance(data['a'], list): ..error
if not all(isinstance(val, int) for val in data['a']): ..error
return http.JsonResponse({"length": len(data['a'])})