[1 hour challenge] J'ai essayé de créer un site de bonne aventure qui soit trop adapté à Python

適当すぎる占い.png

Site de bonne aventure trop adapté

Il n'y a pas si longtemps, j'ai créé un site de bonne aventure trop adapté.

J'ai fait quelques corrections après l'avoir créé, mais le temps de travail est en fait d'environ 1 heure.

Technologie utilisée

La technique utilisée était Bottle, un framework Web Python.

La base de données utilisait SQLite3 et le framework CSS utilisait Bulma.

La destination du déploiement est Heroku.

Créer une base de données

Tout d'abord, j'ai créé une base de données (SQLite3).

Le nom de la base de données est database.db.

set_fortune.py


# -*- coding: utf-8 -*-

import sqlite3
from contextlib import closing

dbname = 'database.db'

with closing(sqlite3.connect(dbname)) as conn:
    c = conn.cursor()

    create_table = '''create table fortune (id int, text varchar(256))'''
    c.execute(create_table)

    insert_sql = 'insert into fortune (id, text) values (?,?)'
    fortune = [
        (1, 'Boire de la mayonnaise à l'ombre peut être décevant.'),
        (2, 'Boire du café vous fait sentir.'),
        (3, 'Quand je parle au sexe opposé avec mes yeux, 50%Vous pouvez sortir avec une probabilité de.'),
        (4, 'Il peut être bon de manger des nouilles aux fruits de mer avec du Tabasco.'),
        (5, 'Si vous mangez du curry, votre QI sera de 150.'),
        (6, 'Il y a de bonnes choses à faire lorsque vous essayez d'éliminer la fumée de cigarette de votre nez.'),
        (7, 'Même si vous faites un contrecoup au milieu de la route, il sera ignoré.'),
        (8, 'J'ai du sang nasal quand je mange une barre de chocolat.'),
        (9, 'Tournez le robinet d'eau et faites-le couler jusqu'à ce qu'il déborde.'),
        (10, 'Je suis fatigué de penser à la bonne aventure.'),
    ]
    c.executemany(insert_sql, fortune)
    conn.commit()

    select_sql = 'select * from fortune'
    for row in c.execute(select_sql):
        print(row)

Je crée une table appelée fortune et crée des colonnes d'identifiant et de texte.

Après cela, j'ai inséré 10 données.

Pour insérer des données ultérieurement, vous pouvez les insérer comme suit.

$sqlite3 database.db
sqlite> insert into fortune values(11, 'Je veux devenir bon à Qiita');

Code source

Regardons le code source.

index.html


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="robots" content="index, follow">
    <meta name="application-name" content="Bonne aventure appropriée">
    <meta name="description" content="Faites fortune.">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Sloppy fortune-telling</title>

    <link rel="stylesheet" href="../static/style.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">
    <link href="https://fonts.googleapis.com/css?family=Gloria+Hallelujah|Kosugi&display=swap" rel="stylesheet">

  </head>
  <body>

  <section class="hero is-medium is-primary is-bold">
    <div class="hero-body">
      <div class="container">
        <h1 class="title">
          Sloppy fortune-telling
        </h1>
        <h2 class="subtitle">
Bonne aventure appropriée
        </h2>
      </div>
    </div>
  </section>

  <section class="section">
    <div class="container">

      <div class="field">
        <div class="control">
          <div class="select is-primary is-rounded is-medium">
            <select>
              <option>bélier</option>
              <option>Taureau</option>
              <option>Gémeaux</option>
              <option>Siège de crabe</option>
              <option>Leo</option>
              <option>Vierge</option>
              <option>Balance</option>
              <option>Scorpion</option>
              <option>Teza</option>
              <option>Chèvre</option>
              <option>Mizugame</option>
              <option>Poissons</option>
            </select>
          </div>
        </div>
      </div>

      <input class="input is-primary is-rounded is-medium" type="text" placeholder="Input your name">

      <div class="columns is-mobile is-centered">
        <button class="button is-primary is-rounded is-large" id="open">Fortune!</button>
      </div>

      <div class="modal">
        <div class="modal-background"></div>
        <div class="modal-card">
          <header class="modal-card-head">
            <p class="modal-card-title">La fortune d'aujourd'hui</p>
          </header>
          <section class="modal-card-body">
            {{result}}
          </section>
          <footer class="modal-card-foot">
            <button class="button" id="close">Close</button>
          </footer>
        </div>
      </div>

    </div>
  </section>

  <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

  <script>
    $(document).ready(function() {
      $("#open").on("click", function() {
        $("div.modal").addClass("is-active");
      })

      $("#close, div.modal-background").on("click", function() {
        $("div.modal").removeClass("is-active");
      })
    });
  </script>

  </body>
</html>

Bulma est lu par CDN et l'affichage est organisé.

Lorsque vous appuyez sur le bouton avec id = open, Modal apparaît et le résultat de la bonne aventure s'affiche.

Par souci d'apparence, il existe une sélection de constellation et un champ de saisie de nom, mais je ne l'utilise pour rien: D

app.py


# -*- coding: utf-8 -*-

from bottle import Bottle, template, static_file, url
import os
import random
import sqlite3

app = Bottle()

@app.route('/static/:path#.+#', name='static')
def static(path):
    return static_file(path, root='static')

@app.route('/')
def index():

    con = sqlite3.connect('database.db')
    cur = con.cursor()

    num = str(random.randint(1,16))

    sql = 'select * from fortune where id = ' + num + ';'
    cur.execute(sql)

    for row in cur:
        result = row[1]

    con.close()

    return template('index', result=result)

@app.error(404)
def error404(error):
    return "Error 404. Try again later."

@app.error(500)
def error500(error):
    return "Error 500. Try again later."

# local test
app.run(host='localhost', port=8080, debug=True)

# heroku
# app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))

Connectez-vous à une base de données appelée databese.db et générez un nombre aléatoire.

Puisque la table de fortune a une colonne d'id, nous obtenons le résultat de la bonne aventure (texte) où le nombre aléatoire généré et l'ID correspondent.

Déployer sur Heroku

Il a été achevé dans une certaine mesure, alors je l'ai déployé sur Heroku.

Tout d'abord, créez les fichiers nécessaires au déploiement.

$ pip3 freeze > requirements.txt        
$ echo web: python3 app.py > Procfile 

Il existe plusieurs façons de se déployer sur Heroku.

Personnellement, je trouve plus facile de travailler avec le référentiel GitHub.

Après avoir obtenu un compte Heroku, sélectionnez Créer une nouvelle application et définissez le nom de l'application, etc.

スクリーンショット 2020-02-13 15.02.13.png

Après cela, vous pouvez déployer en sélectionnant simplement GitHub dans la méthode de déploiement «Deploy» et en le liant.

スクリーンショット 2020-02-13 15.01.22.png

finalement

J'ai créé un site de bonne aventure qui est trop adapté.

S'il s'améliore, il prendra forme dans une certaine mesure. Je pense.

Si cela ne vous dérange pas, essayez le défi pendant une heure! !!

référence

Sqlite @ mas9612 en Python

Links

Site de bonne aventure trop adapté: https://sloppy-fortune-telling.herokuapp.com/

GitHub: https://github.com/ShogoMurakami/sloppy-fortune-telling

Thanks, @shogo

Recommended Posts

[1 hour challenge] J'ai essayé de créer un site de bonne aventure qui soit trop adapté à Python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python
Je veux faire un jeu avec Python
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
[Python] J'ai essayé de créer une IA Shiritori qui améliore le vocabulaire grâce aux batailles
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
J'ai essayé de créer diverses "données factices" avec Python faker
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
[Python] J'ai essayé de faire une application qui calcule le salaire en fonction des heures de travail avec tkinter
Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre
J'ai essayé de créer un système qui ne récupère que les tweets supprimés
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
[Python] J'ai essayé d'implémenter un tri stable, alors notez
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé de savoir si ReDoS est possible avec Python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai essayé un langage fonctionnel avec Python
J'ai créé une API Web
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
J'ai essayé de créer un langage original "PPAP Script" qui imagé PPAP (Pen Pineapple Appo Pen) avec Python
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
J'ai essayé de mettre en œuvre une blockchain qui fonctionne réellement avec environ 170 lignes
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
[AWS] [GCP] J'ai essayé de rendre les services cloud faciles à utiliser avec Python
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
[Zaif] J'ai essayé de faciliter le commerce de devises virtuelles avec Python
J'ai essayé de créer un service de raccourcissement d'url sans serveur avec AWS CDK
[Python] Quand j'ai essayé de créer un outil de décompression avec un fichier zip que je connaissais juste, j'étais accro à sys.exit ()
J'ai essayé d'obtenir des données CloudWatch avec Python
Essayez de créer un code de "décryptage" en Python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé d'automatiser la fabrication des sushis avec python