2016-12-02 2 views
1

Я использую пример по умолчанию ..Python Ева - Запись обновления, если существует в противном случае Вставьте

run.py

from eve import Eve 
app = Eve(template_folder=tmpl_dir) 

if __name__ == '__main__': 
    app.run(debug=True) 

settings.py

RESOURCE_METHODS = ['GET', 'POST', 'DELETE'] 
ITEM_METHODS = ['GET', 'PUT', 'PATCH', 'DELETE'] 
CACHE_CONTROL = 'max-age=20' 
CACHE_EXPIRES = 20 

IF_MATCH = False 

people = { 
    # 'title' tag used in item links. 
    'item_title': 'person', 
    'item_url': 'regex("[a-zA-Z0-9.]+")', 
    'item_lookup': True, 
    'item_lookup_field': 'firstname', 
    'additional_lookup': { 
     'url': 'regex("[\w]+")', 
     'field': 'firstname' 
    }, 
    'schema': { 
     'firstname': { 
      'type': 'string', 
      #'required': True, 
      'unique': True, 
     }, 
     'age': { 
      'type': 'integer' 
     } 
    } 
} 

DOMAIN = { 
    'people': people 
} 

сейчас , я могу легко создавать новые записи по

curl -X POST -F "firstname=john" -F "age=24" "http://127.0.0.1:5000/people" 

ВЫВОД

{"_updated": "Fri, 02 Dec 2016 10:12:58 GMT", "_created": "Fri, 02 Dec 2016 10:12:58 GMT", "_status": "OK", "_id": "5841492a10cf9320678bef65", "_links": {"self": {"href": "people/5841492a10cf9320678bef65", "title": "person"}}} 

теперь я могу легко отправить локон запрос

curl -X GET "http://127.0.0.1:5000/people/john" 

и получить запись, так как FirstName в моем дополнительном поиска

OUTPUT

{"_updated": "Fri, 02 Dec 2016 10:12:58 GMT", "firstname": "john", "age": 24, "_links": {"self": {"href": "people/5841492a10cf9320678bef65", "title": "person"}, "collection": {"href": "people", "title": "people"}, "parent": {"href": "/", "title": "home"}}, "_created": "Fri, 02 Dec 2016 10:12:58 GMT", "_id": "5841492a10cf9320678bef65"} 

теперь я могу также исправить документ и изменить возраст на,

curl -X PATCH -F "age=32" "http://127.0.0.1:5000/people/john" 

ВЫВОД

{"_updated": "Fri, 02 Dec 2016 10:15:56 GMT", "_created": "Fri, 02 Dec 2016 10:12:58 GMT", "_status": "OK", "_id": "5841492a10cf9320678bef65", "_links": {"self": {"href": "people/5841492a10cf9320678bef65", "title": "person"}}} 

Мой вопрос:

выше PATCH будет только работа, когда запись существует, есть способ, которым я могу отправить запрос PUT или PATCH с данными и позволить eve решить создать новую запись или изменить, если запись уже существует?

надеюсь, что мой вопрос достаточно ясно

+0

http://python-eve.org/features.html#event-hooks – metmirr

+0

Функции UPSERT_ON_PUT уже существуют, но, похоже, не работают. что мне не хватает? –

+0

Вы получаете ту же ошибку ?: 'id = lookup [resource_def ['id_field']] KeyError: '_id' ' – metmirr

ответ

1

Дополнительная конечная точка настройки с additional_lookup только для чтения:

Besides the standard item endpoint which defaults to /<resource>/<ID_FIELD_value> , you can optionally define a secondary, read-only, endpoint like /<resource>/<person_name> .

В настройках, я думаю, что вам не нужно устанавливать additional_lookup на всех, поскольку он просто переопределяет item_lookup_field (который устанавливает конечную точку чтения/записи).

+0

удаление дополнительных_lookup и отправка запроса PUT в//NEW_ID_FIELD_VALUE с данными создадут новую запись в моей коллекции? –

+0

сделал апгрейд обновления обновления, и все началось, как описано на сайте. в основном я был на версии 0.5.3. интересно, почему? –

Смежные вопросы