[PYTHON] Meilleures pratiques pour la gestion dynamique des messages LINE Flex dans Django

salut! Je posterai sur Qiita pour la première fois, alors veuillez vous présenter brièvement. Je suis étudiant dans un certain département de coopération informationnelle. (Même si tu dis quelque chose ...) Mes navigateurs préférés sont Firefox et Edge (Chromium).

D'ailleurs, dans la seconde moitié de la première année, nous développerons tous une équipe utilisant Django en classe. J'ai créé un bot LINE l'année dernière, mais à ce moment-là, je n'ai pas trouvé un bon moyen de gérer le Flex Message de l'API LINE Messaging de manière dynamique avec Django, j'ai donc également rédigé un mémorandum de mes meilleures pratiques personnelles. Je vais l'écrire ici aussi. Voir ici pour Flex Message.

approche

Django fournit un langage de modèle appelé Django Template Language. De plus, le message Flex de l'API de messagerie LINE est écrit au format JSON. En les utilisant, j'aimerais adopter l'approche consistant à incorporer des informations dans un fichier JSON modèle et à envoyer un message Flex lorsque le serveur Django envoie un message. (C'est la même chose que pour les fichiers HTML dans Django)

Méthode spécifique

Je pense que vous utilisez généralement render () etc. pour incorporer des informations dans un fichier HTML et les envoyer avec Django, mais comme il s'agit d'une réponse HTTP, je ne l'utiliserai pas cette fois. Utilisez plutôt render_to_string ().

Cette fois, comme le montre l'image ci-dessous, prenons un bot qui affiche la phrase et la date envoyées avec Flex Message comme exemple. linebot.jpg Le texte complet de message.json et views.py utilisé dans l'exemple peut être trouvé dans GitHub Gist.

Exemple de code

Ceci est une version légèrement modifiée du LINE [Sample Code] officiel (https://github.com/line/line-bot-sdk-python) pour 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.Obtenez un jeton d'accès, etc. de py (ici vous aimez)
line_bot_api = LineBotApi(channel_access_token=settings.LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(channel_secret=settings.LINE_CHANNEL_SECRET)

#(réduction)

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

** L'important est ici **

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

Dans la partie {{text}} de message.json placée sous le dossier des modèles, msg_text, qui est le contenu entré dans LINE, est dans la partie de {{date}}, qui est la date et l'heure actuelles. today_date est maintenant rempli avec render_to_string ().

Sommaire

Ce sont mes meilleures pratiques personnelles lorsque je travaille avec LINE Flex Messages de manière dynamique dans Django. J'espère que tu trouves cela utile.

référence

Recommended Posts

Meilleures pratiques pour la gestion dynamique des messages LINE Flex dans Django
Bonnes pratiques pour Django views.py et urls.py (?)
Bonnes pratiques personnelles pour placer un projet Python de lancement en ligne de commande dans un conteneur Docker
Ajouter dynamiquement des champs de formulaire dans Django
Meilleures pratiques pour les fichiers de configuration dans Flask
Créer un bot LINE avec Django
Paramètre d'attribut de même site du cookie dans Django
Spécifiez dynamiquement le jeu de requêtes ModelChoiceField dans Django
Obtenir les paramètres de requête pour les requêtes GET avec Django
Exemple de gestion des fichiers eml en Python
Meilleures pratiques pour manipuler les données avec les pandas