【面向初学者友好的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的官方版本

广告
将在 10 秒后关闭
bannerAds