Coopération entre le module python et l'API

Préface

J'ai essayé de lier le module Python pour Front et l'API créée par Spring Boot, je vais donc laisser une note du flux.

Le module Python utilise un framework Web appelé ** Pyramid **.

Écoulement approximatif de l'ensemble

Détails

Démarrez Python / SpringBootAPI

Lancez le module Python pour recevoir la requête du navigateur Afin de recevoir la requête de Python, l'API est démarrée.

(env) username@host:~/dirname/PythonProject1$ pserve development.ini 
Starting server in PID 6660. 
Serving on http://0.0.0.0:50001

Envoyer une requête HTTP depuis le navigateur

Saisissez l'URL suivante dans le navigateur.

http://0.0.0.0:50001/hotel/

context/view.config

Gérez le routage ici.

Lors de l'accès à / hotel, le traitement de ** view_hotel_list ** de ** HotelListContext ** est lancé.

def set_detail_setting(config):

    RootContext.set_child(
        name='hotel',
        factory=HotelListContext,
    )

    config.add_view(
        context=HotelListContext,
        view=context_as_view,
        attr='view_hotel_list',
        renderer='hotel/common/hotel/listHotel.jinja2',
        request_method='GET',
        name=''
    )

context/list/list.py

Transmettez le processus à Executor, validez le résultat et traitez les données, puis transmettez le résultat.

class HotelListContext(HotelListBaseContext):

    def view_hotel_list(self):
        logger.info('Start search hotel result.')

        list_executor = Executor(self.list_service)
        list_form = self.validated_form(HotelSchema)
        response = list_executor.execute_search_products(list_form.data)
        logger.info(response)
        return {
            'data': {
                'hotels': response['body']['items'],
                'pagination': response['body']['pagination']
            }
        }

context/list/executor/__init__.py

Après avoir créé le JSON pour la demande, envoyez la demande à l'API. Renvoyez la réponse dans /context/list/list.py.

class HotelSearchListExecutor(object):

    def __init__(self, service):
        self.service = service

    def execute_search_products(self, condition):
        detail_condition = {
            'header': executor_create_header_request(condition),
            'body': {
                'query': condition.get('query')
                'searchBy': condition.get('searchBy'),
                'pageNum': condition.get('pageNum'),
                'sortBy': condition.get('pageNum'),
                'sortOrder': condition.get('sortOrder')
            }
        }
        return self.service.search_hotel(detail_condition)

listHotel_jinja2

Afficher le JSON transmis depuis /context/list/list.py dans jinja2


<!DOCTYPE html>
<html lang=
"en">
<head>
    <title>Test page</title>
</head>
<body>
<table border=1>
    <tr>
        <td>id</td>
        <td>name</td>
        <td>cityCode</td>
    </tr>
    {% for item in data.hotels %}
        <tr>
            <td>{{ item.id }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.cityCode }}</td>
        </tr>
    {% endfor %}
</table>
</body>
</html>

Méthodes et définitions utilisées dans le flux

development.ini

Définissez ici l'URL lors d'une demande à l'API

URL = http://localhost:8080/hotel/

executor_helper.py

context/list/executor/__init__.py -> executor_create_header_request(condition)

Il s'agit d'un modèle d'en-tête de demande utilisé dans le processus ci-dessus.

def executor_create_header_request(condition):

    return {
        'languageCode': 'en',
        'countryCode': 'US',
        'currencyCode': 'USD'
    }

schema/hotel/__init__.py

/context/list/list.py ⇒ self.validated_form(HotelSchema)

Ici, le processus de validation est effectué.

class HotelSchema(Schema):
    allow_extra_fields = True
    filter_extra_fields = True
    query = validators.UnicodeString(not_empty=False, if_missing='')
    sortBy = validators.UnicodeString(not_empty=False, if_missing='name')
    pageNum = validators.UnicodeString(not_empty=False, if_missing='1')
    sortOrder = validators.UnicodeString(not_empty=False, if_missing='ASC')

Résultats dans le navigateur

20160920155820.png

Les données de la base de données sont affichées sur l'écran du navigateur via l'API.

Il a été confirmé que le module Python et l'API pouvaient être liés.

Recommended Posts

Coopération entre le module python et l'API
Module de débogage et de test Python
Coopération entre py2exe et les outils de configuration
Différence entre Ruby et Python Split
Différence entre java et python (mémo)
Différence entre list () et [] en Python
Module Python num2words Différence de comportement entre l'anglais et le russe
Différence entre Python, stftime et strptime
Différence entre la série python2 et la série python3 dict.keys ()
Module de socket Python 3 et flux de communication de socket
[Python] Différence entre fonction et méthode
Python - Différence entre exec et eval
[Python] Différence entre randrange () et randint ()
[Python] Différence entre trié et trié (Colaboratoire)
Communiquez entre Elixir et Python avec gRPC
Différence d'authenticité entre Python et JavaScript
Différences entre Ruby et Python dans la portée
différence entre les instructions (instructions) et les expressions (expressions) en Python
Module d'implémentation de file d'attente et Python "deque"
Créer un module Python [CarSensor API support module csapi]
Différence entre @classmethod et @staticmethod en Python
Différence entre append et + = dans la liste Python
Différence entre non local et global en Python
[Python] Différence entre la méthode de classe et la méthode statique
[Python3] Basculer entre Shift_JIS, UTF-8 et ASCII
[Python Iroha] Différence entre List et Tuple
[python] Différence entre la sortie rand et randn
Différences de multithreading entre Python et Jython
Différence entre Ruby et Python (syntaxe de base)
Importation de modules et gestion des exceptions en python
Correspondance entre les fonctions intégrées de Python et Rust
Communication de données chiffrées entre Python et C #
Importer le module Python
Module de collections Python
Résumé des différences entre PHP et Python
La réponse de "1/2" est différente entre python2 et 3
[python] Différence entre variable et self. Variable dans la classe
À propos de la différence entre "==" et "is" en python
Jeu manuel Python (interopérabilité entre CSV et PostgreSQL)
Passer des valeurs entre les pages à l'aide du module cgi Python 3.5
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Version Amazon API Gateway et AWS Lambda Python
[Python] Type de classe et utilisation du module datetime
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
(En bas) Coopération entre Jupyter Notebook et l'exécution d'Excel
Astuces Python et Numpy
[Python] pip et roue
Module Python (mémo d'apprentissage Python ④)
Créer un module Python
Itérateur et générateur Python
Paquets et modules Python
Intégration Vue-Cli et Python
Expérience de comparaison de la vitesse d'écriture de fichier entre python 2.7.9 et pypy 2.5.0
Entre paramétrique et non paramétrique
[Ruby vs Python] Comparaison de référence entre Rails et Flask
Contrôler d'autres programmes depuis Python (communication entre Python ⇔ exe)
Différence entre Ruby et Python en termes de variables
Ruby, Python et carte
Module __future__ et module future_builtins