[CGI] Exécutez le programme Python du serveur avec Vue.js + axios et obtenez les données de sortie

introduction

Je peux tout faire avec le front-end, mais je voulais le plaisir de Python dans la partie calcul, alors j'ai touché CGI qui exécute dynamiquement le programme sur le serveur, donc je l'ai résumé. Le back-end est encore clairsemé.

J'ai un compte XREA sur un serveur de location gratuit, je vais donc l'essayer là-bas. Serveur de location haute performance et de haute qualité qui peut être utilisé gratuitement | XREA

Ce que je veux faire c'est

  1. Cliquez sur le bouton
  2. Transmettez les données au serveur en utilisant Vue.js et axios
  3. Exécutez un script CGI écrit en Python, effectuez une opération et renvoyez le résultat en JSON.
  4. Afficher les données renvoyées sur le même écran

C'est vrai.

Cette fois, à titre d'exemple, nous allons créer un programme qui calcule et renvoie les multiples communs maximum et minimum des deux nombres d'entrée.

Essayer de faire

Placement des fichiers

├─ cgi-bin
│    └─ index.cgi
├─ index.html
└─ main.js

Les scripts CGI écrits en Python créent un répertoire appelé cgi-bin et le mettent dedans. Écrit en Python mais avec l'extension .cgi.

Après le téléchargement sur le serveur, vous devez spécifier les autorisations autour de CGI, qui seront décrites plus tard.

HTML (index.html)

<html>
<head>
    <meta charset="UTF-8">
    <title>Renvoie les multiples communs maximum et minimum</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js"></script>
    <script type="module" src="main.js"></script>
</head>
<body>
    <div id="app">
        <!--Partie d'entrée-->
        <p>
            <input v-model="a" type="number" value="12">
            <input v-model="b" type="number" value="15">
            <button v-on:click="getResult">Calcul</button>
        </p>
        <!--Pièce d'affichage-->
        <p>
Engagement maximum: {{ result['gcd'] }}<br>
Multiple commun minimum: {{ result['lcm'] }}
        </p>
    </div>
</body>
</html>

Chargez Vue.js et axios avec CDN. Si vous chargez un fichier JavaScript écrit en Vue avec type =" module ", il sera exécuté après le chargement du DOM, vous pouvez donc être rassuré.

JavaScript (main.js)

var vm = new Vue({
    el: '#app',
    data: {
        a: 12,
        b: 15,
        result: {},  //Variable pour stocker l'objet retourné
    },
    methods: {
        getResult: function() {
            const url = './cgi-bin/';
            //Passer des données avec axios
            axios.get(url, {
                params: {  //Spécifiez les paramètres avec des paramètres
                    a: this.a,
                    b: this.b
                }
            })
            .then(res => this.result = res.data)  //Stocker les données dans le résultat
        }
    }
});

Créez une instance Vue et transmettez les données avec axios. L'URL est «. / Cgi-bin /». Si le nom est ʻindex.cgi`, vous n'avez pas à spécifier le nom du fichier comme HTML.

De plus, les données retournées res.data peuvent être récupérées en tant qu'objet, il n'était donc pas nécessaire de les corriger avec JSON.parse (). (Parce que je l'ai renvoyé en tant que JSON, j'étais convaincu qu'il serait renvoyé sous forme de chaîne de caractères JSON.) Au fait, j'obtiens cette erreur.

SyntaxError: Unexpected token o in JSON at position 1

Si vous vous demandez ce qu'est «o», cela semble être «o» de «objet» ...

Python CGI (index.cgi)

#!/usr/local/bin/python3
# -*- coding: UTF-8 -*-
import cgi
import cgitb
import math
import json

cgitb.enable()  #Activer le débogage CGI

form = cgi.FieldStorage()  #Stocker les données obtenues par GET
a = int(form['a'].value)   #Étant donné que les données se présentent sous la forme d'une chaîne de caractères, convertissez-les en valeur numérique
b = int(form['b'].value)

data = {
    'gcd': math.gcd(a, b),  # math.gcd()Est Python 3.Apparemment ajouté dans 5
    'lcm': a * b // math.gcd(a, b)
}

print('Content-Type: application/json')
print()
print(json.dumps(data))  #Retour au format json

Spécifiez l'emplacement de l'interpréteur Python au début de la ligne. Je pense que le chemin d'exécution de CGI pour chaque langue est écrit sur la page de spécifications du serveur de location, alors vérifiez-le. XREA est là. xrea_py_path.png

Context-Type Le` print () ʻaprès la ligne spécifiée est pour un saut de ligne, et cela semble être une spécification inutile à moins que cela ne soit inséré. Vous pouvez généralement mettre «\ n» à la fin de la chaîne «Type de contexte».

Après le téléchargement, vous devez spécifier les autorisations du répertoire contenant le script CGI et ses fichiers, et XREA a également des autorisations recommandées. xrea_permission.png En particulier, notez que le fichier exécutable CGI doit être de 700 ou plus (exécutable) (j'ai souvent oublié).

Je publierai également un lien avec les spécifications XREA ci-dessus. spécification|Serveur de location haute performance et de haute qualité qui peut être utilisé gratuitement|XREA

Courir

Voici l'écran sur lequel j'ai soulevé le fichier et essayé xrea_cgi_disp.png bon sentiment. Si vous l'envoyez vierge ou en petit nombre, vous obtiendrez généralement une erreur, mais c'est un essai.

c'est tout.

Recommended Posts

[CGI] Exécutez le programme Python du serveur avec Vue.js + axios et obtenez les données de sortie
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Obtenez la largeur du div côté serveur avec Selenium + PhantomJS + Python
Jusqu'à ce que Python soit installé avec pythonbrew et que Flask s'exécute sur le serveur WSGI
Obtenez des commentaires sur youtube Live avec [python] et [pytchat]!
Exécutez CGI écrit en python sur le serveur de location de Sakura
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Installez django sur python + anaconda et démarrez le serveur
Obtenez des données Youtube avec python
Exécutez le CGI de Python sur CORESERVER
Accédez au serveur SQL de l'hôte avec python27 / pyodbc sur le conteneur
Débarrassez-vous des données sales avec Python et les expressions régulières
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Créer un environnement Python et transférer des données vers le serveur
Commerce du système à partir de Python3: obtenez le dernier code de programme
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Récupérez la chaîne correspondante dans l'expression régulière et réutilisez-la lors du remplacement sur Python3
Exécutez le programme sans créer d'environnement Python! !! (Comment démarrer avec Google Colaboratory)
Comment est le progrès? Continuons le boom ?? en Python
Exécutez le code de sortie sur le serveur Web local en tant que "A, faisant semblant d'être B" en python
Premiers pas avec le framework Python Django sur Mac OS X
Obtenez la météo avec les requêtes Python
Obtenez la météo avec les requêtes Python 2
[Python] Obtenez des données économiques avec DataReader
J'ai essayé d'obtenir et d'analyser les données statistiques de la nouvelle Corona avec Python: données de l'Université John's Hopkins
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 3: Exploration et visualisation des données
[Mémo personnel] Obtenez des données sur le Web et faites-en un DataFrame
Envoyer et recevoir des données d'image au format JSON en Python sur le réseau
Obtenez et convertissez l'heure actuelle dans le fuseau horaire local du système avec python
Déployer et utiliser le modèle de prédiction créé en Python sur SQL Server
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
Lisez le fichier avec python et supprimez les sauts de ligne [Notes sur la lecture du fichier]
Envoyer et recevoir des données binaires via une communication série avec python3 (sur Mac)
Obtenez et estimez la forme de la tête en utilisant Dlib et OpenCV avec python
Comparez le retour nocturne et le retour diurne du cours moyen de l'action Nikkei avec Python
Janken Poi avec Python Exécutons sur un serveur local Windows pour les débutants
Installez Python3 et Django sur Amazon Linux (EC2) et exécutez le serveur Web
Obtenez des données supplémentaires vers LDAP avec python
Construction de pipeline de données avec Python et Luigi
[Note] Obtenir des données de PostgreSQL avec Python
Exécutez le servo avec Python sur ESP32 (Windows)
[Python] Récupère le nom de la variable avec str
Un mémo contenant Python2.7 et Python3 dans CentOS
Créer un serveur CGI fonctionnant sur Python 3 sur Docker
Télécharger des fichiers sur le Web avec Python
Exécutez le serveur python wsgi sur l'unité NGINX
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
Comment démarrer le projet Python en 2020 (Windows WSL et Mac commun)
Transformez un programme Python en démon et exécutez-le automatiquement au démarrage du système d'exploitation
Exécuter du SQL brut avec redash à l'aide de la source de données Python et afficher le résultat
Obtenez des informations sur les 100 utilisateurs techniques de Twitter les plus influents au monde avec python.
Cliquez sur le diagramme python / matplotlib pour obtenir des valeurs de coordonnées ou des valeurs d'entrée au clavier
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Exécutez régulièrement des programmes Python sur AWS Lambda
[Python] Récupérez les fichiers dans le dossier avec Python
Installez et exécutez Python3.5 + NumPy + SciPy sur Windows 10
Conseils de dessin avec matplotlib côté serveur