Django

Djangoで外部サイトから受け取ったPOSTをLINENotifyに転送する

適当なフォームからPOST送信された内容をLINENotifyで転送するDjangoアプリケーションの備忘録。

あとで自分が使うための備忘録なので細かい解説はしてません。
あしからず。

もくじ

  1. ディレクトリ構成
  2. LINENotifyトークンの取
  3. DjangoのView
  4. まとめ

ディレクトリ構成

大まかなディレクトリ構成はこんな感じ。
DjangoアプリケーションでLINENotifyを実行させる。

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    app/
      /* 一部省略 */
      urls.py
      views.py

LINENotifyトークンの取得

下記サイトでNotifyを使用したいルームを選び、トークンを取得できます。

会員登録が必要ですが、方法は割愛。
だいたいリンクに沿って進めてけばできます。

LINENotify

DjangoのView

DjnagoでNotifyを使うためのView。
URLルーティングについては割愛。

今回は外部サイトのフォームで入力されたデータをPOSTで受け取って、LINENotifyに転送するアプリケーションです。
外部サイトからの受け取りなので、CSRFトークンを無効にしてます。

これでCSRFトークンを無効化できます。

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt

あとはDjnagoでPOSTの情報を受け取る方法です。
getメソッドで引数にinputのname情報を与えてあげるとデータが手に入ります。

余談ですが、チェックボックスフォームみたいに、配列形式で複数の情報が送られてくる場合は、getlistメソッドを使います。

name = request.POST.get('name')
email = request.POST.get('email')
subject = request.POST.get('subject')
message = request.POST.get('message')

とりあえずコード全文。

from django.shortcuts import redirect
import requests
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def mailapp(request):
    if request.POST:
        name = request.POST.get('name')
        email = request.POST.get('email')
        subject = request.POST.get('subject')
        message = request.POST.get('message')

        url = "https://notify-api.line.me/api/notify"
        token = "NotifyのAPIトークン"
        headers = {"Authorization": "Bearer " + token}

        messages =  'n' + '名前:' + name +'n' + 'メール:' + email + 'n' + '件名:' +  subject + 'n' + '本文:' +  message
        payload = {"message":  messages}
        r = requests.post(url, headers=headers, params=payload)

    return redirect(元サイト)

まとめ

LINENotifyでフォームのPOSTデータを受け取るプログラムは、簡易的なサイトを作るときに使うかなと思ったので、簡単にまとめました。
たった数行でNotifyへの転送処理が実装できるのは素直に感動ですね。

ただ、このためにいちいちサーバー建てるのは面倒なんで、そのうちサーバーレスで書こうかなと思ってます。

COMMENT

メールアドレスが公開されることはありません。