[Line / Python] Mémo d'implémentation Beacon

Construction de l'environnement Python

Installez la version 3.6.8 à partir de pkg [Comment installer à partir du fichier pkg](https://qiita.com/ms-rock/items/72b8f1abc661c539bb09#21-pkg%E3%83%95%E3%82%A1%E3%82%A4%E3%83 % AB% E3% 81% 8B% E3% 82% 89% E3% 81% AE% E3% 82% A4% E3% 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC % E3% 83% AB% E6% 96% B9% E6% B3% 95)

# Python3.6.Vérifiez l'emplacement d'installation de 8
$ which python

#Installez python avec brew pour installer pip3
$ brew install python

#installation de virtualenv
$ pip3 install virtualenv

#Créer un environnement virtuel
$ virtualenv --python=/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 env

#Confirmation de version
$ python
Python 3.6.8 (v3.6.8:3c6b436a57, Dec 24 2018, 02:04:31)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

Comment entrer dans l'environnement virtuel source bin/activate

Installation de Python3 (version Mac)

Enregistrement du compte en ligne

Préparation

--Créer un compte de développeur de ligne --Création d'une chaîne

Suivez les étapes ci-dessous pour passer à "Créer un bot LINE à l'aide de Flask". [Jusqu'à ce que vous implémentiez le bot LINE avec Flask et que vous le déployez sur heroku](https://qiita.com/suigin/items/0deb9451f45e351acf92#%E9%96%8B%E7%99%BA%E7%92%B0%E5 % A2% 83)

Construction de l'environnement Line Bot

Exécutez depuis le début de l'environnement virtuel.

$ source bin/activate
$ pip install flask 
$ pip install line-bot-sdk
$ brew cask install ngrok

SDK à utiliser: line-bot-sdk-python Qu'est-ce que le homebrew-cask

Utilisation de variables d'environnement

pip3 install python-dotenv

Meilleures pratiques pour les fichiers de configuration dans Flask Comment écrire des variables d'environnement que vous ne voulez pas mettre sur [GitHub] Python

tester

Tester si Flask fonctionne

Ajoutez ce qui suit à ʻapp.py, accédez au chemin racine et confirmez que hello world!` S'affiche.

@app.route("/")
def hello_world():
    return "hello world!"

commande d'exécution de flacon flask run --host=0.0.0.0

ngrok Si vous souhaitez tester la ligne, vous devez entrer l'URL de test dans le webhook. À ce stade, l'URL de https est requise, et ngrok est pratique à ce moment-là.

Que fait Ngrok

Vous pouvez publier votre développement local sur https. Veuillez vérifier ci-dessous pour plus de détails. ngrok est trop pratique

Actions

Dans un terminal séparé, procédez comme suit flask run --host=0.0.0.0 ngrok http 5000

Heroku

S'identifier

$ brew install heroku/brew/heroku

#Le navigateur sera affiché, alors connectez-vous ici
$ heroku login

Déployer

Fichiers requis

Créez les trois nouveaux

requirements.txt Utilisez feeze pour exporter la version que vous êtes actuellement dans l'environnement virtuel vers requirements.txt. Consultez la liste des packages installés avec Python, pip list / freeze

runtime.txt Décrivez la version Python.

Procfile

web: gunicorn app:app --log-file -

À propos de WSGI Différences entre serveur Web et serveur d'applications dans le développement de Rails (traduction)

Nginx transmet la demande à Unicorn. Unicorn transmet la demande à Rack. Rack transmet la demande au routeur Rails. Le routeur transmet la demande au contrôleur approprié. Ensuite, les réponses sont renvoyées dans l'ordre inverse.

Création d'applications

heroku create [nom de l'application]

Code push

git push heroku master

Paramètres de configuration

#Liste des variables d'environnement
$ heroku config

#Ajouter une variable d'environnement
$ heroku config:set ENV_NAME=value

[Commande Heroku] variable d'environnement

Ssh dans l'environnement Heroku

heroku run bash Collection de commandes Heroku

Implémentation de balise

En implémentant ce qui suit, vous pouvez définir l'action lorsqu'un événement Beacon se produit. Si vous souhaitez modifier l'événement, modifiez l'argument (BeaconEvent) de @ handler.add (BeaconEvent). Ainsi, le programme ci-dessous doit décrire comment gérer ** après l'événement. ** ** La condition d'occurrence d'événement est implémentée côté ligne.

#Événement de balise déclenché
@handler.add(BeaconEvent)
def handle_beacon(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text='Hello World'))

Décorateur

L'implémentation ci-dessus utilise un décorateur.

En utilisant un décorateur, vous pouvez ajouter un processus qui s'exécute automatiquement lorsque vous appelez une fonction fournie en tant que bibliothèque. Cité de À propos des décorateurs Python

Commande en traitement

handler = WebhookHandler(channel_secret)

#Canalisez la classe WebhookHandler_Initialiser avec secret
handler.handle(body, signature)

##comportement de la méthode de poignée
#Exécution de la méthode handle de la classe WebhookHandler
#Exécuter la méthode d'analyse de la classe WebhookParser
#Puisque le corps contient des événements, ajoutez aux événements et renvoyez des événements
#Transformez les événements avec une instruction for

##comportement du décorateur
#La méthode add est appelée
#Décorateur de retours
#En ce moment,app.handle implémenté dans py_la méthode de message est appelée
#Dans la méthode du décorateur__add_La méthode handler est appelée_Il y a une valeur dans les gestionnaires

#La méthode add de la classe WebhookHandler est décorée et le décorateur est appelé.
# __add_Gestionnaire appelé

##Je ne sais pas encore
#Je ne sais pas où la méthode add est exécutée
# handle_Je peux l'exécuter sans appeler la méthode message, donc je ne sais pas où il est exécuté dans la méthode handle

Autour de DB

Paramètres de SQL Alchemy

Ce qui suit sera utile. Procédure de démarrage du projet Flask + SQL Alchemy

Migration de flacon

Il générera automatiquement un fichier de migration à partir du fichier modèle. Dans mes propres mots sur Flask-Migrate

Lors de l'ajout de la migration (lors de la modification du schéma existant)

Exécutez localement

#Définit la révision de la base de données sur la révision spécifiée comme argument sans effectuer la migration.
$ flask db stamp head
$ flask db migrate
$ flask db upgrade

Courir vers Heroku

heroku run FLASK_APP=app.py flask db stamp head
heroku run FLASK_APP=app.py flask db migrate
heroku run FLASK_APP=app.py flask db migrate

Flask-Migrate

Recommended Posts

[Line / Python] Mémo d'implémentation Beacon
Mémo Python
Mémo Python
mémo python
Mémo Python
Mémo Python
[Python] Mémo sur le dictionnaire
mémo débutant python (9.2-10)
mémo débutant python (9.1)
★ Mémo ★ Python Iroha
LINE heroku python
[Python] Mémo EDA
Mémo opérateur Python 3
[Mon mémo] python
Mémo de métaclasse Python3
[Python] Mémo de fond de carte
Mémo débutant Python (2)
[Python] Mémo Numpy
Classe Python (mémo d'apprentissage Python ⑦)
installation de python openCV (mémo)
Module Python (mémo d'apprentissage Python ④)
Implémentation RNN en python
Mémo de visualisation par Python
Implémentation ValueObject en Python
Mémo du package de test Python
[Python] Mémo sur les fonctions
mémo d'expression régulière python
Recherche de bisection (python2.7) mémo
[Mon mémo] python -v / python -V
Mémo de type Liste / Dictionnaire Python3
[Mémo] Tri de liste Python3
Astuces Python (mon mémo)
[Python] Mémo sur les erreurs
Mémo de script DynamoDB (Python)
Mémo de base Python - Partie 2
livre de recettes python Memo
Notes de commande de base Python
Mémo du didacticiel Python OpenCV
Mémo de grammaire de base Python
Mémo de l'API TensorFlow (Python)
liens de mémo utiles python
Mémo d'opération de décorateur Python
Mémo de base Python - Partie 1
Élément de mémo Python efficace 3
Implémentation SVM en python
Mémo Python d'énumération approximative
Résumé de l'implémentation de l'interpréteur 7 lignes
Mémo Python (pour moi): Array
Gestion des exceptions Python (mémo d'apprentissage Python ⑥)
Afficher les chaînes de caractères sans saut de ligne en python (mémo personnel)
Mémo de mesure du temps d'exécution Python
Fizzbuzz en Python (en une ligne)
Mémo graphique Twitter avec Python
python> impression> N coupures> impression ('\ n' * 3)> 4 coupures> impression ('\ n' * 3),> 3 coupures
Mémo tranche python et rubis
Mémo de grammaire de base Python (1)
Mémo de code personnel Python
Essayez LINE Notify avec Python
Raspeye + Python + Mémo OpenGL