Учебники

Web2py — Услуги

web2py обеспечивает поддержку различных протоколов, таких как XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC и SOAP. Каждый из этих протоколов поддерживается несколькими способами, и мы делаем различие между —

  • Визуализация вывода функции в заданном формате.
  • Удаленные вызовы процедур.

Предоставление словаря

Рассмотрим следующий код, который поддерживает количество сеансов.

def count():
   session.counter = (session.counter or 0) + 1
   return dict(counter = session.counter, now = request.now)

Вышеуказанная функция увеличивает количество подсчетов по мере того, как пользователь посещает страницу. Предположим, что данная функция определена в контроллере «default.py» приложения web2py. Страницу можно запросить по следующему URL — http://127.0.0.1:8000/app/default/count

web2py может отображать вышеупомянутую страницу в разных протоколах и добавляя расширение к URL, например:

http://127.0.0.1:8000/app/default/count.html

http://127.0.0.1:8000/app/default/count.xml

http://127.0.0.1:8000/app/default/count.json

Словарь, возвращаемый вышеуказанным действием, будет отображаться в HTML, XML и JSON.

Удаленные вызовы процедур

Фреймворк web2py предоставляет механизм, который преобразует функцию в веб-сервис. Механизм, описанный здесь, отличается от механизма, описанного ранее, потому что —

  • Включение аргументов в функцию.
  • Функция должна быть определена в модели.
  • Он обеспечивает более строгое соглашение об именах URL.
  • Он работает для фиксированного набора протоколов и легко расширяется.
  • Чтобы использовать эту функцию, необходимо импортировать и инициировать объект службы.

Для реализации этого механизма сначала необходимо импортировать и создать экземпляр объекта службы.

from gluon.tools import Service
service = Service()

Это реализовано в файле модели «db.py» в приложении скаффолдинга. Модель Db.py является моделью по умолчанию в среде web2py, которая взаимодействует с базой данных и контроллером для достижения желаемого результата для пользователей.

После внедрения сервис в модели может быть доступен с контроллеров по мере необходимости.

В следующем примере показаны различные реализации удаленных вызовов процедур с использованием веб-служб и многое другое.

Веб-сервисы

Веб-службы могут быть определены как стандартизированный способ интеграции веб-приложений с использованием таких протоколов, как XML, SOAP, WSDL и UDDI.

web2py поддерживает большинство из них, но интеграция будет довольно сложной.

Использование JSON-сервиса web2py с помощью jQuery

Есть много способов вернуть форму JSON web2py, но здесь мы рассмотрим случай службы JSON. Например —

def consumer():return dict()@service.json
def get_days():return ["Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"]
def call():return service()

Здесь мы наблюдаем, что —

  • функция просто возвращает пустой словарь для отображения представления, которое будет использовать службу.

  • get_days определяет сервис, а вызов функции предоставляет все зарегистрированные сервисы.

  • get_days не обязательно должен быть в контроллере и может быть в модели.

  • Вызов всегда в контроллере скаффолдинга default.py.

функция просто возвращает пустой словарь для отображения представления, которое будет использовать службу.

get_days определяет сервис, а вызов функции предоставляет все зарегистрированные сервисы.

get_days не обязательно должен быть в контроллере и может быть в модели.

Вызов всегда в контроллере скаффолдинга default.py.

Взгляд с потребителем действия следующие:

{{extend 'layout.html'}}
<div id = "target"></div>

<script>
   jQuery.getJSON("{{= URL('call',args = ['json','get_days'])}}",
      function(msg){
         jQuery.each(msg, function(){ jQuery("#target").
         append(this + "<br />"); } )
      }
   );
</script>

Первый аргумент jQuery.getJSON — это URL-адрес следующей службы: http://127.0.0.1:8000/app/default/call/json/get_days.

Это всегда следует шаблону —

http://<domain>/<app>/<controller>/call/<type>/<service>

URL находится между {{…}} , потому что он разрешается на стороне сервера, а все остальное выполняется на стороне клиента. Второй аргумент jQuery.getJSON — это обратный вызов, которому будет передан ответ JSON.

В этом случае обратный вызов зацикливается на каждом элементе в ответе (список дней недели в виде строк) и добавляет каждую строку, а затем <br/> к <div id = «target»> .

Таким образом, web2py управляет реализацией веб-сервисов, используя jQuery.getJSON .