Nano Hash - криптовалюты, майнинг, программирование

Обход пирамиды HTTP PUT в несуществующий URI

Итак, у меня есть приложение для обхода пирамиды, и я хотел бы иметь возможность PUT для URI, которые не существуют. Есть ли способ сделать это в конфигурации просмотра?

Вот, например, у меня есть это

@view_defaults(context=models.Groups, renderer='json')
@view_config(request_method='GET')
class GroupsView(object):

    def __call__(self):
        ''' This URI corresponds to GET /groups '''
        pass

    @view_config(request_method='PUT')
    def put(self):
        ''' This URI should correspond to PUT /groups/doesnotexist '''
        pass

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

06.02.2013

Ответы:


1

Это звучит как отдельный класс для объектов Group с контекстом Group и контекстом UndefinedGroup. Большинство представлений работают с Group, но у вас может быть специальный метод, отвечающий на запросы PUT для UndefinedGroup объектов. Обратите внимание, что UndefinedGroup не должен быть подклассом Group.

@view_defaults(context=Group, renderer='json')
class GroupView(object):
    def __init__(self, request):
        self.request = request

    @view_config(request_method='GET')
    def get(self):
        # return information about the group

    @view_config(context=UndefinedGroup, request_method='PUT')
    def put_new(self):
        # create a Group from the UndefinedGroup

    @view_config(request_method='PUT')
    def put_overwrite(self):
        # overwrite the old group with a new one

Тогда ваше дерево обхода будет отвечать за создание объекта UndefinedGroup, если оно не может найти Group.

07.02.2013
  • Хорошо, это имеет смысл. Я надеялся, что мне не нужно определять дополнительный класс. 08.02.2013
  • Вы могли бы избежать определения дополнительного класса, но тогда ваши методы GET/POST/etc должны будут учитывать оба состояния объекта Group... одно реальное, а другое неопределенное. Таким образом, у вас просто не будет просмотров для UndefinedGroup, и эти URL-адреса будут 404. 08.02.2013

  • 2

    Мой класс просмотра не вызывает ошибку с помощью метода PUT или GET (версия пирамиды: 1.4.1):

    @view_defaults(context='.Group', renderer='json')
    @view_config(request_method='GET')
    class GroupView(object):
        def __init__(self, context, request):
            self.context = context
            self.request = request
    
        def __call__(self):
            return {'method':'GET'}
    
        @view_config(request_method='POST')
        def post(self):
            return {'method':'POST'}
    
        @view_config(request_method='PUT')
        def put(self):
            return {'method':'PUT'}
    
        @view_config(request_method='DELETE')
        def delete(self):
            return {'method':'DELETE'}
    

    Возможно, проблема с атрибутами __parent__ и __name__. Кстати, я предпочитаю использовать метод конфигуратора для привязки функций представления:

    config.add_view('app.views.GroupView', context='app.resources.Group',
                     request_method='GET', renderer='json') # attr=__call__
    config.add_view('app.views.GroupView', context='app.resources.Group',
                     attr='put', request_method='PUT', renderer='json')
    

    Используйте императивную конфигурацию, без дополнительного класса, но с аргументами. Вы также можете комбинировать декоратор view_defaults и метод Configurator.add_view().

    05.06.2013
  • Это не совсем ответ на вопрос. Это не относится к схеме обхода пирамиды. 17.06.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..