Zusammenarbeit zwischen Python-Modul und API

Vorwort

Ich habe versucht, das Python-Modul für Front und die von Spring Boot erstellte API zu verknüpfen, damit ich eine Notiz über den Ablauf hinterlassen kann.

Das Python-Modul verwendet ein Webframework namens ** Pyramid **.

Rauer Fluss des Ganzen

Einzelheiten

Starten Sie Python / SpringBootAPI

Starten Sie das Python-Modul, um die Anforderung vom Browser zu erhalten Um die Anfrage von Python zu erhalten, wird die API gestartet.

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

HTTP-Anfrage vom Browser senden

Geben Sie die folgende URL in den Browser ein.

http://0.0.0.0:50001/hotel/

context/view.config

Verwalten Sie das Routing hier.

Beim Zugriff auf / hotel wird die Verarbeitung von ** view_hotel_list ** von ** HotelListContext ** gestartet.

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

Übergeben Sie den Prozess an Executor, validieren Sie das Ergebnis und verarbeiten Sie die Daten und übergeben Sie das Ergebnis.

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

Senden Sie die Anforderung nach dem Erstellen des JSON für die Anforderung an die API. Geben Sie die Antwort an /context/list/list.py zurück.

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

Zeigen Sie den von /context/list/list.py übergebenen JSON in jinja2 an


<!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>

Im Ablauf verwendete Methoden und Definitionen

development.ini

Definieren Sie hier die URL, wenn Sie eine Anfrage an die API stellen

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

executor_helper.py

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

Dies ist eine Anforderungsheadervorlage, die im obigen Prozess verwendet wird.

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)

Hier wird der Validierungsprozess durchgeführt.

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')

Ergebnisse im Browser

20160920155820.png

DB-Daten werden auf dem Browserbildschirm über die API angezeigt.

Es wurde bestätigt, dass das Python-Modul und die API verknüpft werden können.

Recommended Posts

Zusammenarbeit zwischen Python-Modul und API
Python-Debug- und Testmodul
Zusammenarbeit zwischen py2exe und Setup-Tools
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen list () und [] in Python
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Unterschied zwischen Python, Stftime und Strptime
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
Python 3-Socket-Modul und Socket-Kommunikationsfluss
[Python] Unterschied zwischen Funktion und Methode
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Unterschied in der Authentizität zwischen Python und JavaScript
Unterschiede zwischen Ruby und Python im Umfang
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Warteschlangen- und Python-Implementierungsmodul "deque"
Python-Modul erstellen [CarSensor API-Unterstützungsmodul csapi]
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
[Python] Unterschied zwischen Klassenmethode und statischer Methode
[Python3] Wechseln Sie zwischen Shift_JIS, UTF-8 und ASCII
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Unterschiede in der Multithread-Verarbeitung zwischen Python und Jython
Unterschied zwischen Ruby und Python (grundlegende Syntax)
Modulimport und Ausnahmebehandlung in Python
Korrespondenz zwischen den in Python integrierten Funktionen und Rust
Kommunikation verschlüsselter Daten zwischen Python und C #
Python-Modul importieren
Python-Sammlungsmodul
Zusammenfassung der Unterschiede zwischen PHP und Python
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Über den Unterschied zwischen "==" und "is" in Python
Python-Handspiel (Interoperation zwischen CSV und PostgreSQL)
Übergeben Sie Werte zwischen Seiten mit dem Python 3.5-CGI-Modul
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API
Amazon API Gateway und AWS Lambda Python-Version
[Python] Klassentyp und Verwendung des datetime-Moduls
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
(Unten) Zusammenarbeit zwischen Jupyter Notebook und Excel
Python- und Numpy-Tipps
[Python] Pip und Wheel
Python-Modul (Python-Lernnotiz ④)
Erstellen Sie ein Python-Modul
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Experiment zum Vergleich der Schreibgeschwindigkeit von Dateien zwischen Python 2.7.9 und Pypy 2.5.0
Zwischen parametrisch und nicht parametrisch
[Ruby vs Python] Benchmark-Vergleich zwischen Rails und Flask
Steuern Sie andere Programme von Python aus (Kommunikation zwischen Python ⇔ exe)
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Ruby, Python und Map
__future__ Modul und future_builtins Modul