处理动态LINE Flex Message时的最佳实践是使用Django
你好!这是我第一次在Qiita上发帖,所以我想简单介绍一下自己。我是某个情报联络学部的学生。(虽然我说是某个学部,但其实是…)我喜欢使用的浏览器是Firefox和Edge(Chromium)。
现在在我们的学院中,大一学生在下半学期都会通过课程进行使用Django进行团队开发。
去年我创建了一个LINE bot,但是在使用Django处理LINE Messaging API Flex Message的动态方法时,我没有找到很好的方式,所以我个人想出了一种最佳实践,并将其作为备忘记录在此。
关于Flex Message的更多信息,请参考这里。
方法
Django提供了一个名为Django模板语言的模板语言。此外,LINE Messaging API的Flex Message是以JSON格式编写的。
我们希望在Django服务器发送消息时采用这些方法,将信息填入模板的JSON文件并发送Flex Message。
(就像在Django处理HTML文件时的感觉一样)
具體的方法
通常使用Django中的render()等方法可以将信息填充到HTML文件中并发送,但由于这些方法主要用于生成HTTP响应,所以本次不使用它们。相反,我们将使用render_to_string()方法代替。
程式範例
以下是将LINE公式的示例代码略微修改以适应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.pyからアクセストークンなどを取得(ここはお好みで)
line_bot_api = LineBotApi(channel_access_token=settings.LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(channel_secret=settings.LINE_CHANNEL_SECRET)
#(省略)
@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 = json.loads(msg))
)
重要的是这里。
msg_text=event.message.text
today_date = datetime.datetime.now()
msg = render_to_string("message.json", {"text": msg_text, "date": today_date})
在templates文件夹下,message.json文件中的{{ text }}部分将由输入到LINE的内容msg_text填充,而{{ date }}部分将由当前日期时间today_date通过render_to_string()函数填充。
总结
如果以上是我个人在使用Django动态处理LINE Flex消息时的最佳实践,如果对您有帮助的话,我会很高兴。
请参考
-
- Django Template Language のドキュメント
- render_to_string関数のドキュメント