Пирамида: как создать REST-сервер, используя @view_defaults и @view_config с классами в отдельном файле - PullRequest
0 голосов
/ 30 октября 2019

Я создаю простой REST-сервер в пирамиде, следуя инструкции . Когда я записываю код запуска класса и сервера в один файл, он работает как положено. Но когда я перемещаю файл класса в отдельный файл, он не работает.

Ниже приведена структура моего проекта. enter image description here

Код, который я написал:

1. server.py

from wsgiref.simple_server import make_server
from pyramid.config import Configurator

from test_view_defaults import RESTView

if __name__ == '__main__':
  with Configurator() as config:
    config.add_route('rest', '/rest')
    config.scan()
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 6543, app)
    server.serve_forever()

2. test_view_defaults.py

from pyramid.response import Response
from pyramid.view import view_config
from pyramid.view import view_defaults

@view_defaults(route_name='rest')
class RESTView(object):
  def __init__(self, request):
      self.request = request

  @view_config(request_method='GET')
  def get(self):
      return Response('get')

  @view_config(request_method='POST')
  def post(self):
      return Response('post')

  @view_config(request_method='DELETE')
  def delete(self):
      return Response('delete')

Когда я запрашиваю http://localhost:6543/rest, выдает ошибку 404. Может ли кто-нибудь помочь мне понять, что я делаю неправильно?

1 Ответ

2 голосов
/ 30 октября 2019

Я решил проблему следующим образом:

  1. Создан каталог (модуль) с именем 'api'

  2. Перемещен файл класса test_view_defaults.pyв созданный выше каталог

  3. Изменен метод сканирования как config.scan(package='api')

  4. Измененный server.py выглядит следующим образом

from wsgiref.simple_server import make_server
from pyramid.config import Configurator


if __name__ == '__main__':
  with Configurator() as config:
    config.add_route('rest', '/rest')
    config.scan(package='api')
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 6543, app)
    server.serve_forever()
...