Получить объект модели из tastypie uri?

Как вы получаете модельный объект tastypie modelresource из его uri?

например:

если вы получили uri как строку в python, как вы получите объект модели этой строки?

3 Solutions collect form web for “Получить объект модели из tastypie uri?”

Класс ресурсов Tastypie (который является парнем ModelResource является подклассом) предоставляет метод get_via_uri(uri, request) . Имейте в apply_authorization_limits(request, object_list) что его вызовы apply_authorization_limits(request, object_list) поэтому, если вы не получили желаемый результат, обязательно отредактируйте свой запрос таким образом, чтобы он прошел вашу авторизацию.

Плохая альтернатива – использовать регулярное выражение для извлечения идентификатора из вашего URL-адреса, а затем использовать его для фильтрации по списку всех объектов. Это был мой грязный хак, пока я не получил работу get_via_uri, и я НЕ рекомендую использовать это. 😉

 id_regex = re.compile("/(\d+)/$") object_id = id_regex.findall(your_url)[0] your_object = filter(lambda x: x.id == int(object_id),YourResource().get_object_list(request))[0] 

Вы можете использовать get_via_uri , но, как упоминает @Zakum, это применит авторизацию, которую вы, вероятно, не хотите. Поэтому, копаясь в источнике этого метода, мы видим, что мы можем разрешить URI следующим образом:

 from django.core.urlresolvers import resolve, get_script_prefix def get_pk_from_uri(uri): prefix = get_script_prefix() chomped_uri = uri if prefix and chomped_uri.startswith(prefix): chomped_uri = chomped_uri[len(prefix)-1:] try: view, args, kwargs = resolve(chomped_uri) except Resolver404: raise NotFound("The URL provided '%s' was not a link to a valid resource." % uri) return kwargs['pk'] 

Если ваше приложение Django находится в корневом get_script_prefix() == '/' веб-сервера (т.е. get_script_prefix() == '/' ), вы можете упростить это:

 view, args, kwargs = resolve(uri) pk = kwargs['pk'] 

Вы ищете блок-схему ? Это действительно зависит от того, когда вы хотите объект.

В течение цикла дегидратации вы можете получить доступ к нему через пучок, например

 class MyResource(Resource): # fields etc. def dehydrate(self, bundle): # Include the request IP in the bundle if the object has an attribute value if bundle.obj.user: bundle.data['request_ip'] = bundle.request.META.get('REMOTE_ADDR') return bundle 

Если вы хотите вручную получить объект по api url, то с учетом шаблона вы можете просто перемещать пул или первичный ключ (или что-то еще) через схему orm по умолчанию?

  • Tastypie с приложением / x-www-form-urlencoded
  • Ошибка базы данных Django: отсутствует таблица social_auth_usersocialauth, когда social_auth не установлен
  • Django Tastypie: как аутентифицировать ключ API
  • RESTFUL веб-сервисы, используемые веб-и родными мобильными приложениями с аутентификацией на python с использованием платформы django
  • Ресурс модели с пользователями как API FK TastyPie
  • Tastypie, отфильтровывая многие и многие отношения
  • Как загрузить подмодели с отношением внешнего ключа в Backbone.js?
  • Как сделать некоторые фильтры обязательными в tastypie?
  • Python - лучший язык программирования в мире.