Django에서 LINE Flex Message를 동적으로 처리하는 모범 사례
6810 단어 LINEmessagingAPIlinebotPython3장고
처음 Qiita에 게시하기 때문에 가볍게 자기 소개를.
모 정보 제휴 학부에 다니는 학생입니다. (모라고 해도…)
좋아하는 브라우저는 Firefox와 Edge (Chromium)입니다.
그런데, 폐학부에서는 1학년의 후반에, 전원이 수업으로 Django를 이용한 팀 개발을 실시합니다.
저는 작년 LINE bot을 작성했는데, 그때 Django에서 LINE Messaging API의 Flex Message를 동적으로 다루는 능숙한 방법이 조사해도 나오지 않았기 때문에 개인적으로 생각한 모범 사례를 비망록도 겸해 여기에 적습니다.
Flex Message에 대해서는 여기를 참조.
접근
Django는 Django Template Language라는 템플릿 언어를 제공합니다. 또한 LINE Messaging API의 Flex Message는 JSON 형식으로 작성합니다.
이것을 사용하여 Django 서버가 메시지를 보낼 때 병아리 JSON 파일에 정보를 채우고 Flex Message를 보내는 방법을 취하고 싶습니다.
(Django에서 HTML 파일을 다룰 때와 같은 느낌이군요)
구체적인 방법
Django에서 HTML 파일에 정보를 묻어 보내려면 일반적으로 render()
등을 사용한다고 생각합니다. 대신 render_to_string()
를 사용합니다.
이번에는 아래 이미지와 같이 보낸 문장과 날짜를 Flex Message로 표시하는 bot를 예로 들겠습니다.
덧붙여 예에 사용한 message.json 과 views.py 전문은 GitHub Gist 에 있습니다.
코드 예
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 }}
될 수 있습니다.
요약
이상이 Django에서 동적으로 LINE Flex Message를 다룰 때 개인적인 모범 사례입니다.
도움이되면 기쁩니다.
참고
Django에서 HTML 파일에 정보를 묻어 보내려면 일반적으로
render()
등을 사용한다고 생각합니다. 대신 render_to_string()
를 사용합니다.이번에는 아래 이미지와 같이 보낸 문장과 날짜를 Flex Message로 표시하는 bot를 예로 들겠습니다.
덧붙여 예에 사용한 message.json 과 views.py 전문은 GitHub Gist 에 있습니다.
코드 예
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 }}
될 수 있습니다.요약
이상이 Django에서 동적으로 LINE Flex Message를 다룰 때 개인적인 모범 사례입니다.
도움이되면 기쁩니다.
참고
Reference
이 문제에 관하여(Django에서 LINE Flex Message를 동적으로 처리하는 모범 사례), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryoheinan/items/ba06b16eb400558e779f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)