Контроль доступа и валидация ввода (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'])})
Вернуться на верх