【面向初学者友好的LINE机器人30分钟课程】在其他网站上不能很好地完成,对吧?就是模仿返回
环境。
pyenv 版本选择 Python 3.6.7
Django 版本选择 2.1.7
使用 line-bot-sdk 库
使用 gunicorn 库
使用 django-heroku 库
使用 psycopg2-binary 库
Heroku 可以进行简化的云平台。
目录结构
因为错误地多次遇到了该目录结构问题,所以在这里要确保做到正确。
/djangobot
/bot
/_pycache_
/migrations
/_init.py
/admin.py
/apps.py
/models.py
/tests.py
/urls.py
/views.py
/djangobot
/_pychache_
/settings.py
/urls.py
/wdgi.py
/manage.py
/Procfile
/requirements.txt
/runtime.txt
/djangoenv
在LINE开发者平台上注册频道
完成注册后,渠道基本设置页面的渠道访问令牌和Messaging API设置页面的渠道密钥这两个是需要记下来的。
可以使用Messaging API設置中的QR碼在手機上進行頻道註冊。同樣可以從Messaging API設置中註冊問候訊息。
Python环境设置
根据这篇文章的参考进行环境搭建。
使用 venv 建立虚拟环境
由于在Python中可能会使用许多库,因此为每个项目创建虚拟环境似乎是更好的选择。
python -m venv djangoenv
使用Python标准功能venv来创建名为djangoenv的虚拟环境,名称可以是任意的。
venv是一个能够在一个系统中创建独立的Python环境的软件。可以使用命令来创建虚拟环境,并在虚拟环境之间切换。
source djangoenv/bin/activate
激活djangoenv之后。
如果活动结束
deactivate
如果您希望删除的话
rm -rf <仮想環境名>/
安装Django
在这里指定Django的版本,并将其安装到venv上。
之后导入django_heroku,因为它只与Django 2.x兼容,所以需要安装2.x版本。
pip install Django==2.1.7
确认Django是否已安装。
python -m django --version
使用line-bot-sdk安装
“LinebotSDK是什么?”
在开发使用Messaging API的LINE应用程序时,可以使用的功能实现SDK(软件开发工具包、库、工具和示例)。
pip install line-bot-sdk
创建项目和开发应用
django-admin startproject djangobot && cd djangobot
使用Django-admin工具创建一个名为”djangobot”的项目,并切换到创建的目录中。
python manage.py startapp bot
使用djangobot目录中的manage.py文件,创建一个名为bot的应用程序。
/djangobot
/djangobot
/bot
manage.py
理解的必要是,在djangobot目录中有一个djangobot目录。
更改Python文件
djangobot/ djangobot/设置.py
import os
import django_heroku # 追加
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bot.apps.BotConfig', #追加
]
在现有的settings.py中导入django_heroku。
然后添加到INSTALLED_APP中将创建的bot应用与djangobot关联。
LANGUAGE_CODE = 'ja' #変更
TIME_ZONE = 'Asia/Tokyo' #変更
进一步将语言和时区更改为日语、东京。
django_heroku.settings(locals()) #追加
激活已导入的django_heroku。
djangobot/djangobot/urs.py 的中文翻译为:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('callback/', include('bot.urls')), # url(callback/)に、botアプリケーションフォルダのurls.py(下記コード)が紐づく
]
包含详细信息请点击此处
慈生机器人/机器人/urs.py
from . import views
from django.urls import path
app_name = 'bot'
urlpatterns = [
path('', views.callback, name='callback'), # djangobot/urls.pyに呼び出され、views.pyのcallback関数を呼び出す
]
在设置webhookURL时,将会使用这个urls.py文件中的回调函数。
请为我提供一个选项的中文本地化:
djangobot/bot/views.py 文件
在这个文件中,实际上定义了linebot-messagingAPI的设置和操作。
os.environ是用于在python中添加和获取环境变量的工具。在这里修改的环境变量仅在该python程序中有效,不会影响系统的环境变量。
from django.shortcuts import render
from django.http import HttpResponseForbidden, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from linebot import (LineBotApi, WebhookHandler)
from linebot.exceptions import (InvalidSignatureError)
from linebot.models import (
MessageEvent,
TextMessage,
TextSendMessage,
)
import os
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"] # YOUR_CHANNEL_ACCESS_TOKENは環境変数であり、後に設定する
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]# YOUR_CHANNEL_SECRETも環境変数であり、後に設定する
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)
@csrf_exempt #csrf攻撃対策
def callback(request):
# リクエストヘッダーから署名検証用の値を取得する
signature = request.META['HTTP_X_LINE_SIGNATURE']
#リクエストの内容を取得
body = request.body.decode('utf-8')
try:
# 署名を検証して問題がなければ下に定義されたhandleを実行する
handler.handle(body, signature)
except InvalidSignatureError:
# 検証でエラーがあればエラー文を出す
HttpResponseForbidden()
# tryがうまく行けば200を返す
return HttpResponse('OK', status=200)
# オウム返し
@handler.add(MessageEvent, message=TextMessage)
# Messageが送られてきた時の処理のため、
# MessageEventを第一引数に、第二引数でmessageにmessage内容を代入
def handle_text_message(event):
line_bot_api.reply_message(event.reply_token,
TextSendMessage(text=event.message.text))
CSRF是什么意思?
CSRF是跨站请求伪造的简称,是利用Web应用程序的漏洞进行的一种网络攻击。随着互联网连接的加速和设备的普及,人们更容易地使用在线服务。
据说在Django中,针对Webhook请求和POST请求,需要进行CSRF防护。
環境變數是什麼?
环境变量是一种用于自定义操作系统环境的系统变量。
传一个中国版本的Procfile给djangobot。
・在Heroku网络应用中,Procfile是必需的。
・这个文件用于声明应用的进程类型和入口点。
・Django应用程序推荐在生产环境中使用的Web服务器Gunicorn是必需的。
・Gunicorn是存在于Nginx等Web服务器和Django之间的应用程序服务器的概念。
web: gunicorn djangobot.wsgi --log-file -
djangobot/需求清单.txt
请在项目中列出要安装的软件包。
Django==2.1.7 # 先ほどインストールしたバージョン
line-bot-sdk==1.8.0
gunicorn
django-heroku
psycopg2-binary
djangobot的runtime.txt文件
python-3.6.7
Heroku 她。
简单来说,如果是小型开发项目,可以免费而且轻松地通过PaaS平台发布应用。
安装Heroku并登录,创建应用程序。
brew tap heroku/brew && brew install heroku
heroku login
如果还没有完成Heroku的注册,请先注册。
由于安全性要求高,登录时需要安装应用并输入代码,这一步骤有些繁琐。
heroku create アプリケーション名
由于需要避免与世界上的Heroku应用重名,需要考虑应用程序名称。
設定 Heroku 的環境變數。
使用在文章开头备忘录中记录的令牌的时候到了。
heroku config:set YOUR_CHANNEL_SECRET="チャンネルシークレットの欄の文字列" --app createの時に入力したアプリケーション名
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="チャネルアクセストークンの欄の文字列" --app createの時に入力したアプリケーション名
Heroku平台堆栈
heroku stack:set heroku-18 -a <app name>
由于Heroku的堆栈版本不兼容,将默认的版本从20更改为18。
我学到了需要仔细确认版本的兼容性。事实上,我在这一点上遇到了相当大的困难。
Git的配置
首先,进行git初始化。
git init
在Heroku上注册Git
git remote add heroku https://git.heroku.com/アプリケーション名.git
之后只需遵循基本的git操作。
git init
git add .
git commit -m "new commit"
git push heroku master
如果不顺利的话
heroku logs --tail -app アプリケーション名
我很感激你的帮助,因为我在这个命令中能够查看Heroku的错误日志。
请参考
・我最参考的一项。
建立Python虛擬環境
・九宫格公式
・Gunicorn是什么?
・Heroku平台的技术栈
・LINE的官方版本