Получение текущего зарегистрированного пользователя из функции Dajax

В настоящее время я использую вызов dajaxice в шаблоне, и я хотел бы иметь возможность получить зарегистрированного в данный момент пользователя в функции python, которую вызывают мои dajax.

Я знаю, что dajax передает параметр 'request' в функцию python, которая содержит идентификатор сеанса, но мне не повезло, установив тип переменной 'request' is. Я попытался преобразовать его в строку, расшифровав его как строку JSON, и несколько других методов.

Все, что я хотел бы сделать, это найти текущего зарегистрированного пользователя внутри функции python, которую вызывает dajax, не передавая его из фактического шаблона, поскольку это ненадежно с точки зрения безопасности.

Разбитая версия моего соответствующего кода:

Dajax Call:

Dajaxice.fortura_test.rbac_test(rbac_callback,{});

rbac_test ():

@dajaxice_register
def rbac_test(request):
    import re;
    from django.contrib.sessions.models import Session
    from django.contrib.auth.models import User
    request_string = str(request);
    request_list = [];
    for x in request_string:
        request_list.append(x);
    request_string = ''.join(request_list);
    m = re.match(r"'sessionid'\: '([A-Za-z0-9]+)'",request_string);
    if m is not None:
        session_key = m.group(0);
        session = Session.objects.get(session_key=session_key)
        uid = session.get_decoded().get('_auth_user_id')
        user = User.objects.get(pk=uid)
        return user.id
    else:
        return 'No match';

Приведенный выше метод, который я сейчас использую, не совсем работает, но я чувствую, что должен быть лучший способ, чем то, как я подхожу к этому в данный момент.

Любая помощь будет оценена.

1 ответ

Решение

Если это нормальный вид Django, то request является объектом HTTPRequest Django, и вы можете получить в настоящее время вошедшего в систему пользователя с помощью request.user который вернет contrib.auth.models.User экземпляр (вы можете убедиться, что они вошли в систему с помощью request.user.is_autenticated())

Другие вопросы по тегам