Я пытаюсь отобразить старый добрый JSON через return {'category_name': category.category_name}
в файле views.py. Я использую Pyramid Web Framework. Я использую пользовательский веб-API RESTful и дизайн CRUD в базе данных SQLALCHEMY.
По какой-то причине я продолжаю получать Traceback error
:
views/views.py", line 112, in get_category
return {'category': category.category_name}
AttributeError: 'list' object has no attribute 'category_name'
Все, что я хочу сделать, это распечатать это в HTML или отобразить в HTML, чтобы я мог видеть, что было создано. У категории есть атрибут category_name... что сбивает с толку. Возможно, чтобы вернуть значение списка, мне нужно использовать специальный синтаксис? Я не смог найти в Интернете ничего, что имело бы для меня смысл (это был наиболее актуальный), но будем очень признательны за любые рекомендации! Я уверен, что это что-то простое.
Метод GET: сайт возвращаемого объекта (предназначен для рендеринга в шаблонах Jinja2 позже):
@view_config(route_name='category', request_method='GET', renderer='json')
def get_category(request):
with transaction.manager:
category_id = int(request.matchdict['id'])
category = api.retrieve_category(category_id)
if category is None:
raise HTTPNotFound()
return {'category_name': category.category_name}
Вот как выглядит метод POST (очень похоже на функцию Create в DB API):
@view_config(route_name='categories', request_method='POST', renderer='json')
def post_category(request):
with transaction.manager:
category_name = request.params['category_name']
category = api.create_category(category_name)
return HTTPCreated(location=request.route_url('category',id=id))
DB API для создания категории (это имеет отношение «многие ко многим» с оценкой, поэтому список):
def create_category(self, category_name):
new_category = Category(category_name)
self.session.add(new_category)
print(new_category)
self.session.commit()
Метод получения:
def retrieve_category(self, something_unique):
if isinstance(something_unique, int):
return self.session.query(Category).\
filter(Category.category_id == something_unique).all() # multiple categories
elif isinstance(something_unique, basestring):
print(something_unique) # added
return self.session.query(Category).\
filter(Category.category_name == something_unique).one()
print(something_unique)
if NoResultFound:
raise NotFoundError('No results found')
elif MultipleResultsFound:
raise MultipleResultsFound('Too many results found')
elif isinstance(something_unique, Category):
return something_unique
else:
raise ValueError('Value being passed is an object')
удобство API (наследование):
def create_assessment(self, name, text, username, videoname, category_names):
user = self.retrieve_user(username)
video = self.retrieve_video(videoname)
cat_objects = [self.retrieve_category(category_name) for category_name in category_names]
return super(ConvenienceAPI, self).create_assessment(name, text, user, video, cat_objects)
category
- это список. Пожалуйста, опубликуйте код, который создаетcategory
. - person Javier   schedule 24.09.2015api.retrieve_category
. - person Javier   schedule 24.09.2015api.retrieve_category
возвращаетlist
, возможно, пустой, а не объект илиNone
, как ожидалось. - person Dan D.   schedule 24.09.2015