iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 4
0
影片教學

用Django架構建置專屬的LINEBOT吧系列 第 4

[Day 4]用Django架構建置專屬的LINEBOT吧 - 建構資料庫

在models.py建立資料表

在完成第一個由Django架構製作的LINE BOT之後,
當然就是要開始介紹如何以Django的model來建立LINE BOT資料庫囉,

在Django的官方說明文檔中,
也有關於資料庫、表的建立範例,

我們可以從LINE BOT如何記錄用戶資訊以及聊天訊息開始,
首先在LINE BOT APP資料夾中,開啟models.py檔案,
在當中輸入以下範例:

from django.db import models

# Create your models here.
class User_Info(models.Model):
    uid = models.CharField(max_length=50,null=False,default='')         #user_id
    name = models.CharField(max_length=255,blank=True,null=False)       #LINE名字
    pic_url = models.CharField(max_length=255,null=False)               #大頭貼網址
    mtext = models.CharField(max_length=255,blank=True,null=False)      #文字訊息紀錄
    mdt = models.DateTimeField(auto_now=True)                           #物件儲存的日期時間

    def __str__(self):
        return self.uid

在admin.py建立後台顯示資料

接著在同一層資料夾開啟admin.py,
這個檔案是用來設定在Django後台要顯示的資料,
要先從models.py檔案中引入model資料表,

from django.contrib import admin

# Register your models here.
from IT_help.models import *

class User_Info_Admin(admin.ModelAdmin):
    list_display = ('uid','name','pic_url','mtext','mdt')
admin.site.register(User_Info,User_Info_Admin)

更新資料庫

完成相關設定之後,
需要輸入以下指令更新資料庫,

$ python manage.py makemigrations
$ python manage.py migrate

如果看到以下畫面,
就代表到這邊資料表設定就完成了,

接著,
即可在LINEBOT中使用這個資料表規則,
以進行資料寫入、讀取、修改、刪除,

在views.py調用資料表

延續上一篇的回聲機器人

開啟views.py之後,
加入將用資訊、文字訊息存入資料庫的
在程式碼當中的使用方法如下:
首先將資料表import至views.py

#models.py資料表
from IT_help.models import *

主程式部分:

if isinstance(event, MessageEvent):
    mtext=event.message.text
    uid=event.source.user_id
    profile=line_bot_api.get_profile(uid)
    name=profile.display_name
    pic_url=profile.picture_url

    message=[]
    if User_Info.objects.filter(uid=uid).exists()==False:
        User_Info.objects.create(uid=uid,name=name,pic_url=pic_url,mtext=mtext)
        message.append(TextSendMessage(text='會員資料新增完畢'))
    elif User_Info.objects.filter(uid=uid).exists()==True:
        message.append(TextSendMessage(text='已經有建立會員資料囉'))
        user_info = User_Info.objects.filter(uid=uid)
        for user in user_info:
            info = 'UID=%s\nNAME=%s\n大頭貼=%s'%(user.uid,user.name,user.pic_url)
            message.append(TextSendMessage(text=info))
    line_bot_api.reply_message(event.reply_token,message)

來進行測試囉~

https://ithelp.ithome.com.tw/upload/images/20200825/201211769W2Sh4wu1R.jpg

有正常回傳訊息,就代表程式順利執行,

https://ithelp.ithome.com.tw/upload/images/20200825/201211761fGLbl86Cg.jpg

models.py的CRUD(寫入、讀取、修改、刪除)

從回傳的資訊可以看到資料庫當中調用的資料長什麼樣子,
這樣就可以完成透過Django的models.py寫入、讀取資料表內容了,
基本的操作都是以objects來調用的,例如:

寫入資料(將data資料寫入到data欄位)

Table_name.objects.create(data=data)

讀取資料(搜尋資料表中data欄位為data值的資料集)

#以filter讀取資料庫則將回傳list格式資料列表
Table_name.objects.filter(data=data)

#以get讀取資料庫會獲得單筆資料物件
Table_name.objects.get(data=data)

修改資料(調出data欄位為data值的資料,並將其data值改寫為new_data)

Table_name.objects.filter(data=data).update(data=new_data)

刪除資料(刪除data欄位為data值的資料,或全部資料)

Table_name.objects.filter(data=data).delete()
Table_name.objects.all().delete()

以上是Django資料庫的基本操作方式,

透過資料庫的建立,
LINEBOT就不再只能針對單一次訊息進行回應了,
對於初學者而言,也可以應用Django既有的設定,
從基礎的操作當中去進階到更多變化的設計,

下一篇講會講到關於Django後台的admin登入頁面操作


上一篇
[Day 3]用Django架構建置專屬的LINEBOT吧 - 開始第一個LINE BOT APP
下一篇
[Day 5]用Django架構建置專屬的LINEBOT吧 - 資料庫後台設定
系列文
用Django架構建置專屬的LINEBOT吧30

尚未有邦友留言

立即登入留言