Django ✕ LINE Messaging APIで簡易的なユーザー登録を作成する①
LINE Bot開発では、LINEユーザーの管理が必要となってくる場面があります。今回、LINEでできるスタンプラリーの開発に携わった関係でそのあたりの内容をまとめたいと思います。
スタンプラリーのような継続的なサービスでは、「誰が」アクセスしてきたかを保存する必要があります。LINEのユーザーID(Uから始まる文字列)をキーにして、Djangoのモデルでユーザーを管理する方法を紹介します。

前提
この記事では以下の技術を使います:
- Django
- LINE Messaging API
設定の仕方
チャネルアクセストークンを設定する
.envファイルに記載した LINE_CHANNEL_ACCESS_TOKEN を、settings.py で読み込んで設定しておきます。
LINE_CHANNEL_ACCESS_TOKEN=チャネルアクセストークンLINE_CHANNEL_ACCESS_TOKEN = os.environ.get('LINE_CHANNEL_ACCESS_TOKEN')LINE_CHANNEL_ACCESS_TOKEN = settings.LINE_CHANNEL_ACCESS_TOKENモデル設計
models.pyにユーザーモデルを定義します。以下はサンプルです。
from django.db import models
class User(models.Model):
line_id = models.CharField(max_length=50, unique=True, verbose_name="LINE ID")
name = models.CharField(max_length=100, blank=True, null=True, verbose_name="ニックネーム")
status = models.CharField(max_length=20, default="awaiting_name", verbose_name="状態")
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name or self.line_idline_idはUから始まる文字列を登録するために設定します。(LINEユーザーごとに割り振られるため、被りがない、そのためこの変数に対してuniqueキーを音にしておきます)
nameはユーザーに決めてもらう名前です。ユーザーを呼ぶときなどに使用します。これは被りを想定しておきます。
statusはユーザーの状態についてです。今、どの質問が聞かれている状態なのかなどをここに記します。
created_atはユーザーがいつ登録されたのかを記録します。追加するかはどちらでも良いですが、新規ユーザーかどうかを判定するときなどに役に立つかもしれません。
終わりましたらマイグレーションを忘れずに行ってください
python manage.py makemigrations
python manage.py migrateViewでの処理
Webhook内で、ユーザーがデータベースに存在するか確認し、なければ作成する処理です。
user, created = User.objects.get_or_create(line_id=line_id)
user.status = "awaiting_name"
user.save()get_or_createメソッドをメソッドを使うことで、「ユーザーが存在するか確認→なければ作成」という頻出の処理を1行でスマートに記述できます。
次の記事で具体的なユーザー登録の例を示します。


コメント