[PYTHON] Best Practices für die dynamische Verarbeitung von LINE Flex-Nachrichten in Django

Hallo! Ich werde zum ersten Mal bei Qiita posten, also stellen Sie sich bitte kurz vor. Ich bin ein Student, der eine bestimmte Abteilung für Informationszusammenarbeit besucht. (Auch wenn du etwas sagst ...) Meine Lieblingsbrowser sind Firefox und Edge (Chromium).

Übrigens werden wir alle in der zweiten Hälfte der ersten Klasse ein Team entwickeln, das Django im Unterricht einsetzt. Ich habe letztes Jahr einen LINE-Bot erstellt, aber zu diesem Zeitpunkt habe ich keine gute Möglichkeit gefunden, Flex-Nachrichten der LINE-Messaging-API dynamisch mit Django zu verarbeiten. Deshalb habe ich auch meine persönlichen Best Practices aufgeschrieben. Ich werde es auch hier schreiben. Siehe hier für Flex Message.

Ansatz

Django bietet eine Vorlagensprache namens Django Template Language. Darüber hinaus ist Flex Message der LINE Messaging API im JSON-Format geschrieben. Mit ihnen möchte ich den Ansatz verfolgen, Informationen in eine JSON-Vorlagendatei einzubetten und eine Flex-Nachricht zu senden, wenn der Django-Server eine Nachricht sendet. (Es ist das gleiche wie beim Umgang mit HTML-Dateien in Django)

Spezifische Methode

Ich denke, dass Sie normalerweise render () usw. verwenden, um Informationen in eine HTML-Datei einzubetten und mit Django zu senden, aber da dies für die HTTP-Antwort ist, werde ich sie dieses Mal nicht verwenden. Verwenden Sie stattdessen "render_to_string ()".

Nehmen wir dieses Mal, wie in der Abbildung unten gezeigt, einen Bot, der den gesendeten Satz und das Datum am Beispiel von Flex Message anzeigt. linebot.jpg Der vollständige Text von message.json und views.py, der im Beispiel verwendet wird, befindet sich in GitHub Gist.

Codebeispiel

Dies ist eine leicht modifizierte Version der offiziellen LINE Beispielcode für Django.

import json
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt
from django.template.loader import render_to_string
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.models import (
    MessageEvent, TextMessage, FlexSendMessage, BubbleContainer
)

#settings.Holen Sie sich Zugriffstoken usw. von py (hier gefällt Ihnen)
line_bot_api = LineBotApi(channel_access_token=settings.LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(channel_secret=settings.LINE_CHANNEL_SECRET)

#(Kürzung)

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    msg_text=event.message.text
    today_date = datetime.datetime.now()
    msg = render_to_string("message.json", {"text": msg_text, "date": today_date})
    line_bot_api.reply_message(
        event.reply_token,
        FlexSendMessage(alt_text = msg_text, contents = BubbleContainer.new_from_json_dict(json.loads(msg)))
    )

** Das Wichtigste ist hier **

msg_text=event.message.text
today_date = datetime.datetime.now()
msg = render_to_string("message.json", {"text": msg_text, "date": today_date})

Der in LINE eingegebene msg_text befindet sich im {{text}} Teil von message.json unter dem Vorlagenordner, und das aktuelle Datum und die aktuelle Uhrzeit befinden sich im{{date}}Teil. today_dateist jetzt mitrender_to_string ()` gefüllt.

Zusammenfassung

Dies sind meine persönlichen Best Practices, wenn ich in Django dynamisch mit LINE Flex-Nachrichten arbeite. Ich hoffe, Sie finden es nützlich.

Referenz

Recommended Posts

Best Practices für die dynamische Verarbeitung von LINE Flex-Nachrichten in Django
Best Practices für Django views.py und urls.py (?)
Persönliche Best Practice zum Einfügen eines Python-Projekts zum Starten einer Befehlszeile in einen Docker-Container
Fügen Sie in Django dynamisch Formularfelder hinzu
Best Practices für Konfigurationsdateien in Flask
Erstellen Sie mit Django einen LINE-Bot
Same-Site-Attributeinstellung des Cookies in Django
Geben Sie das ModelChoiceField-Abfrageset in Django dynamisch an
Abfrageparameter für GET-Anforderungen mit Django abrufen
Beispiel für den Umgang mit EML-Dateien in Python
Best Practices für den Umgang mit Daten mit Pandas