J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku

J'ai utilisé Flask et Heroku pour créer un formulaire de publication simple.

(1) Image de sortie

L'objectif était de créer un formulaire de publication simple comme celui ci-dessous. スクリーンショット 2020-03-01 21.23.24.png Entrez "Nya Nya" dans le contenu du tweet et "Tama" dans le chat tweeté, et appuyez sur le bouton d'envoi. スクリーンショット 2020-03-01 21.25.01.png Il sera affiché comme ça.

(2) Configurer un environnement virtuel

Créez un répertoire appelé my_form sur le bureau, déplacez-vous vers le répertoire et définissez l'environnement virtuel. Démarrez un environnement virtuel.

python3 -m venv .
source bin/activate

(3) Installez le framework et le serveur WEB nécessaires

Installez le ballon et le gunicorn.

pip install flask
pip install gunicorn

(4) Préparez les répertoires et fichiers nécessaires (.py .html)

Créez form.py dans le répertoire my_form, Créez également un répertoire templates et index.html et layout.html (dans le répertoire templates) dans le répertoire my_form.

(4) Décrivez form.py

Décrivez ce qui suit.

form.py


from flask import Flask,request,render_template
app = Flask(__name__)


@app.route("/")
def show():
    return render_template("index.html")


@app.route("/result",methods=["POST"])
def result():
    article = request.form["article"]
    name = request.form["name"]
    return render_template("index.html",article=article,name=name)

En important render_template, l'environnement pour utiliser Jinja2 a été préparé. Le moteur de modèle Jinja2 appelle le modèle html (ici, index.html).

Tout d'abord, concernant le traitement de @ app.route ("/"), Jinja2 appelle index.html. En particulier,

return render_template("index.html" 〜)

Et.

Ensuite, concernant le traitement de @ app.route ("/ result", method = ["POST"]), en important reuest, les données saisies dans le formulaire peuvent être récupérées côté html appelé. Par exemple, pour l'article, en définissant article = request.form ["article"], le contenu saisi dans le formulaire côté index.html (l'attribut de nom de formulaire côté index.html est défini sur "article"). (Supposé) peut être retiré. En ce qui concerne les méthodes, le formulaire côté index.html est envoyé cette fois par la méthode POST, il a donc été défini sur [POST]. La transmission par la méthode GET sera décrite plus loin.

article = request.form["article"]

L'article extrait et le contenu de name sont renvoyés à index.html en tant que return render_template. À ce moment-là, attribuez des valeurs à chacun des articles et noms d'arguments.

return render_template("index.html",article=article,name=name)

méthodes est POST

@app.route("/result",methods=["POST"])

(5) Décrivez layout.html

Créez un html commun pour que la maintenance de la partie commune soit facile même si la partie modèle augmente.

layout.html


<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Nyanco Form</title>
        <style>body {padding: 10px;}</style>
    </head>
    <body>
        {% block content %}
        {% endblock %}
    </body>
</html>

Des contenus individuels (index.html) peuvent être intégrés dans les parties suivantes.

{% block content %}

(6) Décrivez index.html

index.html


{% extends "layout.html" %}
{% block content %}
<h1>Formulaire de tweet de Nyanko</h1>

<form action="/result" method="post">
      <label for="article">Contenu du tweet</label>
      <input type="text" name="article">
      
      <p></p>
      
      <label for="name">Chat tweeté</label>
      <input type="text" name="name">
      <button type="submit">Envoyer</button>
</form>

<p></p>

<p>Contenu du Tweet/{{ article }}</p>
<p>Chat tweeté/{{ name }}</p>
{% endblock %}

Le contenu de {% block content%} à {% endblock%} est inséré dans la partie de layout.html. L'attribut name de l'entrée est "article".

 <input type="text" name="article">

L'adresse de destination est / result, et le contenu saisi dans le formulaire est envoyé par la méthode POST.

<form action="/result" method="post">

(7) Essayez de démarrer dans l'environnement local

Essayez de démarrer le flacon comme suit.

 FLASK_APP=form.py flask run
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Si vous collez la partie http: // ~ dans le navigateur,

スクリーンショット 2020-03-01 22.14.45.png S'il apparaît, c'est réussi.

(8) Différence entre la méthode POST et la méthode GET

J'ai utilisé la méthode POST cette fois, mais je noterai également la méthode GET. Dans le cas de la méthode POST, lorsque vous soumettez le formulaire, スクリーンショット 2020-03-01 22.18.21.png Et quand vous regardez l'adresse du navigateur, スクリーンショット 2020-03-01 22.18.10.png Il est devenu. En revanche, si vous utilisez la méthode GET, modifiez form.py et index.html comme suit.

form.py


from flask import Flask,request,render_template
app = Flask(__name__)


@app.route("/")
def show():
    return render_template("index.html")


@app.route("/result",methods=["GET"])
def result():
    article = request.args.get("article")
    name = request.args.get("name")
    return render_template("index.html",article=article,name=name)

index.html


{% extends "layout.html" %}
{% block content %}
<h1>Formulaire de tweet de Nyanko</h1>

<form action="/result" method="get">
      <label for="article">Contenu du tweet</label>
      <input type="text" name="article">

      <p></p>

      <label for="name">Chat tweeté</label>
      <input type="text" name="name">
      <button type="submit">Envoyer</button>
</form>

<p></p>

<p>Contenu du Tweet/{{ article }}</p>
<p>Chat tweeté/{{ name }}</p>
{% endblock %}

Quand je l'envoie et regarde l'adresse du navigateur, スクリーンショット 2020-03-01 22.24.51.png La méthode GET est conçue pour ajouter les données à envoyer à la fin de l'adresse. Par conséquent, quel type de données sera vu par d'autres personnes, il est donc utilisé pour des applications telles que la recherche. Il est nécessaire de ne pas l'utiliser pour les formulaires qui saisissent des mots de passe.

(9) Déployer sur Heroku

Les détails du déploiement sur Heroku sont tels que décrits dans l'article suivant, donc je n'utiliserai que l'essence et omettrai l'explication détaillée. https://qiita.com/nooonchi/items/a7ea7c7a12c56ab8e901

Connectez-vous à Heroku et créez une application sur Heroku

heroku login

Le nom de l'application est en forme de chat.

Heroku create cat-form

Initialiser le répertoire my_form

git init

Relier Heroku à l'environnement local,

heroku git:remote -a cat-form

Créez requirements.txt dans le répertoire my_form

pip freeze > requirements.txt

Créez un Prockfile dans le répertoire my_form et entrez ce qui suit: À ce stade, un espace est requis avant g, et le formulaire avant: app signifie le formulaire form.py, alors soyez prudent.

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

ajouter,

git add .

Cette fois, engagez-vous avec le nom du premier,

git commit -m'the-first'

Poussez vers Heroku.

git push heroku master

Finalement,

heroku open

Alors c'est fait. スクリーンショット 2020-03-01 21.23.24.png

(10) Conclusion

À l'avenir, j'aimerais développer cela et défier le tableau d'affichage.

Postscript

--Flask-Bootstap a été introduit dans cette forme (2020.3.2) J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku + Flask-Bootstrap introduit

Recommended Posts

J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai essayé de faire LINE BOT avec Python et Heroku
Made Mattermost Bot avec Python (+ Flask)
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
J'ai fait un compteur de caractères avec Python
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
Lancer un serveur Web avec Python et Flask
J'ai fait un jeu de cueillette avec Python
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai fait un blackjack avec du python!
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
J'ai fait un texte Python
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
Comment déployer une application Web créée avec Flask sur Heroku
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai essayé de créer LINE-bot avec Python + Flask + ngrok + LINE Messaging API
(Échec) Déployer une application Web créée avec Flask avec heroku
Créer un babillard Heroku, Flask, Python, Nyanko avec "fichier csv"
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Bases de SNS Python faites avec Flask
J'ai fait un Line-bot avec Python!
J'ai aimé le tweet avec python. ..
J'ai joué avec PyQt5 et Python3
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
J'ai essayé linebot avec flacon (anaconda) + heroku
J'ai fait un programme de gestion de la paie en Python!
J'ai dessiné une carte thermique avec Seaborn [Python]
POSTER diversement avec Python et recevoir avec Flask
Un mémo contenant Python2.7 et Python3 dans CentOS
J'ai essayé un langage fonctionnel avec Python
J'ai installé et utilisé Numba avec Python3.5