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 **.
HTTP-Anfrage vom Browser senden
↓
In Python empfangen und eine Anfrage stellen
↓
Senden Sie eine Anfrage an die API und erhalten Sie eine Antwort
↓
Verarbeiten Sie die Antwort und zeigen Sie die Vorlagendatei im Browser an
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
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>
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')
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.