2013-03-07 1 views
0

Я использую backbone.js с django, и я хотел бы сразу после первоначального запроса к моему приложению / получить текущего зарегистрированного пользователя.Как получить текущий входной ресурс пользователя с помощью django-tastypie

У меня есть UserResource, поэтому я могу сделать api-звонок api/v1/user/id, но это значит, что я должен знать id. Я ищу, что я не делаю. В традиционном представлении запроса django у меня будет объект request.user. Является ли это также доступным для меня на стороне клиента, и если нет, то как я могу позвонить, чтобы получить request.user?

Edit:

Поскольку я использую традиционную аутентификацию с Джанго и после авторизации пользователя, магистральный подхватывает оттуда. Могу ли я в моем файле base.html, создать переменную, которая хранит уникальный идентификатор текущего вошедшего в систему пользователя, как так:

var user = {{user}}; // which shows the username 

Существуют ли какие-либо риски для этого

ответ

6

Посмотрите на «Создание пример для каждого пользователя ресурсы в TastyPie Cookbook

http://django-tastypie.readthedocs.org/en/latest/cookbook.html#creating-per-user-resources

Однако документы находятся вне времени, и API изменился. Подписи методов изменились, и запрос теперь является атрибутом пакета.

Защиту authorized_read_list (я, object_list, расслоение):

Вы можете получить доступ пользователя от bundle.request.user

Также см https://github.com/toastdriven/django-tastypie/issues/809

+0

Спасибо за ответ, я использую традиционную технику аутентификации/авторизации django, чтобы мой пользователь вошел в систему, а не backbone.js (сделать api-вызов для UserResource или что-то еще). Даже с ресурсом для каждого пользователя вы предлагаете мне просто при входе в систему сделать дополнительный звонок на tastypie и вернуть всех пользователей и с помощью ресурса пользователя, я бы получил только один объект json? – Warz

+0

Если вы используете стандартный вход в систему django, то cookie сеанса идентифицирует пользователя для вас в любых последующих запросах AJAX, как и со стандартным HTTP-запросом. Ваш первоначальный вызов TastyPie может вернуть userResource в качестве дополнительных данных независимо от того, что вы возвращаете. – Howie

+0

любые примеры вызова javascript в cookie сеанса и получения идентификатора пользователя или имени пользователя? – Warz

0

Следующая поместит идентификатор пользователя в мета ответа:

def alter_list_data_to_serialize(self, request, data_dict): 
    if isinstance(data_dict, dict): 
     if 'meta' in data_dict: 
      if request.user and request.user.pk: 
       data_dict['meta']['user_id'] = request.user.pk 

    return data_dict 

Лично мне никогда не приходилось это делать. Я помещаю объект пользователя в сторону сервера контекста страницы. Даже для одностраничного RESTful-приложения я бы сделал стандартный запрос/ответ (не AJAX) при входе в систему и заполнил часть содержимого/контекстного сервера.

Любые последующие запросы AJAX не должны включать идентификатор пользователя так же, как идентификатор suer не должен передаваться в URL-адресе. Вы должны определить серверную сторону пользователя и соответствующим образом фильтровать. Django делает это очень легко, предоставляя пользователю использование AuthenticationMiddleware.

+0

«Лично мне никогда не приходилось это делать». Я не знаю, если вы когда-либо использовали Django с позвоночником, и если у вас есть, пожалуйста, дайте мне знать, какой более правильный способ - получить начальную нагрузку, текущего зарегистрированного пользователя. Я знаю на стороне сервера, я могу использовать request.user или {{user}}, но без чтения сеанса или размещения тега