Intégration Vue-Cli et Python

1. 1. Objectif

・ Je veux lier Vue-Cli et Python. (Je veux exécuter Python sur une application qui utilise Vue-CLi)

2. Méthode

-Le frontal est composé de Vue-Cli. Placez le code Python sur le backend. -L'interface entre Vue-Cli et Python est [Python-shell](https://qiita.com/NT1123/items/09aed7b23388190cba23#3-1-%E3%82%A4%E3%83%B3%E3%82 % B9% E3% 83% 88% E3% 83% BC% E3% 83% AB% E6% 96% B9% E6% B3% 95) est utilisé. -Attribuez différents ports pour le frontal et le back-end afin que les deux puissent communiquer.

4.JPG

3. 3. Préférences / préparation

La méthode d'installation et la version du package ou de la bibliothèque utilisée sont décrites ci-dessous.

article version Comment installer
Vue-Cli 3.9.3 Voir la destination LINK
python-shell 1.0.8 Voir la destination LINK
express 4.17.1
bodyparser Explication omise
node.js 12.14.0 Explication omise
npm 6.3.14 Explication omise

Quatre. Application créée

Depuis la page Web, ajoutez +3 à la valeur saisie et affichez le résultat du calcul.

5.JPG

★ (1) à (6) sur la figure ci-dessus correspondent aux opérations (1) à (6) expliquées ci-dessous.

(1) "Écran de démonstration" Entrez la valeur numérique dans la zone de texte. (2) Cliquez sur le bouton Obtenir. (3) La valeur numérique saisie dans (1) est envoyée au code Python (sample.py) via index.js (exécutant Python-shell). (4) sample.py ajoute +3 à la valeur saisie. (5) sample.py renvoie la valeur numérique complétée à index.js. (6) index.js renvoie la valeur numérique reçue de sample.py à «l'écran de démonstration». (7) L '«écran Démo» affiche les résultats du calcul.

4-1 Configuration du système

On suppose que Vue-Cli est déjà installé et prêt à être utilisé.

4-2 Structure du répertoire

La structure des répertoires de chaque fichier est organisée comme suit.

6.JPG

4-3 code

/src/component/main.js


// eslint-disable-next-line
/* eslint-disable */ 
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import axios from 'axios'  //Lors de l'utilisation d'axios,.Importez avec js.

Vue.config.productionTip = false
Vue.prototype.$axios = axios  //Lors de l'utilisation d'axios,.Besoin d'ajouter cette ligne dans js

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})

/src/components/Top.vue


<template>

  <div>
    <h1>Écran de démonstration</h1>
    <input type="button" value="Bouge toi" @click="goNewTask()"> <br>
    <input type="number" v-model="message"><input type="button" value="Avoir" @click="getdata()">
    <p> <font size="2">Des données d'entrée:{{ $data.message }} </font> </p>
    <p> <font size="2">des données de sortie:{{ $data.result }} </font> </p>
    <p> <font size="2">Statut:{{ $data.state }} </font> </p>
  </div>

</template>

<script>
// eslint-disable-next-line
/* eslint-disable */ 
import * as d3 from 'd3'  //Autoriser

export default {
  name: 'top',
  data: function(){
    return { 
        message:'',  //Une variable qui stocke les données d'entrée.
        result :'',  //Une variable qui stocke le résultat de l'opération.
        state:"wait" //Une variable qui stocke l'état actuel.
    }
  },
  methods: {
    //Méthode qui envoie les données saisies dans la zone de texte au backend, reçoit le résultat du calcul du backend et affiche le résultat.
    getdata:function(){
        this.state="getting data"
        this.$axios.get('http://192.168.0.4:3000/api',{params:{dat:this.message}})
          .then(function(response){
            console.log(response.data.message)  //Le résultat de l'opération renvoyé par le back-end est console.Je me connecte.
            this.result= response.data.message
            this.state="done"    
            }.bind(this))  //Lors du traitement des promesses.bind(this)Est nécessaire
          .catch(function(error){  //À propos du traitement à effectuer lorsqu'une erreur est renvoyée depuis le back-end
            this.state="ERROR"
            }.bind(this))
          .finally(function(){
            }.bind(this))}
     
  } 
}

</script>

/bkend/index.js


const express = require('express')
const bodyParser = require('body-parser')
const app = express()
app.use(bodyParser.json())


//La stratégie CORS est désactivée.
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});


app.get('/api', function(req, res) {

  var {PythonShell} = require('python-shell');
  var pyshell = new PythonShell('sample.py');  
  console.log("req")
  console.log(req.query.dat) //Consolider les données reçues du front-end.Je me connecte.

  pyshell.send(req.query.dat); //De ce code au code python'req.query.dat'Est fourni comme données d'entrée

  //Après avoir exécuté le code python, les données sont transmises de python à ce code.
  pyshell.on('message',  function (data) {
    console.log("return data")
    res.send({
      message: data   //Le résultat du calcul effectué par python est renvoyé au frontal.
    })
  })

})

app.listen(3000)

/bkend/sample.py


import sys
data = sys.stdin.readline()  #Obtenir des données à partir d'une entrée standard
num=int(data)

def sum(a):
    return a+3

print(sum(num))  #python le contenu de l'impression-Retour à la coque

4-4 Comment exécuter

Cinq. point

5-1 Raisons d'utiliser Pyshon-shell

Vue-cli fonctionne sur webpack, mais python-shell ne semble pas fonctionner sur webpack. Par conséquent, j'ai démarré un nouveau serveur qui ne fonctionne pas avec vue-cli et j'ai fait fonctionner python-shell dessus.

5-2 Solution de contournement pour le problème CORS

Lors de l'accès à xxx.xxx.xx.xx: 3000 à partir de xxx.xxx.xx.xx: 91, la communication est bloquée pour des raisons de sécurité car les domaines sont différents [problème CORS]. Afin d'éviter le problème CORS, il existe des cas où des mesures sont prises du côté de l'accès et des cas où des mesures sont prises du côté de l'accès, mais dans ce cas, des mesures ont été prises du côté de l'accès. Pour plus de détails, veuillez consulter ici.

/bkend/index.Fait partie de js


/bkend/
//La stratégie CORS est désactivée.
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

Recommended Posts

Intégration Vue-Cli et Python
[python] Compresser et décompresser
Astuces Python et Numpy
[Python] pip et roue
Itérateur et générateur Python
Ruby, Python et carte
entrée et sortie python
Python et Ruby se séparent
Lier PHP et Python à partir de zéro sur Laravel
test de coopération de balises python
Python asyncio et ContextVar
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python: variables de classe et d'instance
3-3, chaîne Python et code de caractère
Série Python 2 et série 3 (édition Anaconda)
Python et matériel - Utilisation de RS232C avec Python -
Python sur Ruby et Ruby en colère sur Python
Indentation Python et format de chaîne
division des nombres réels python (/) et division des nombres entiers (//)
Installez Python et Flask (Windows 10)
À propos des objets et des classes Python
À propos des variables et des objets Python
Apache mod_auth_tkt et Python AuthTkt
Å (Ongustorome) et NFC @ Python
Apprenez à connaître les packages et les modules Python
# 2 [python3] Séparation et commentaire
Copie superficielle Python et copie profonde
Mémo tranche python et rubis
Installation de Python et grammaire de base
J'ai comparé Java et Python!
Copie superficielle Python et copie profonde
À propos de Python, len () et randint ()
À propos de la date et du fuseau horaire Python
Installez Python 3.7 et Django 3.0 (CentOS)
Construction d'environnement Python et TensorFlow
Variables de classe et d'instance Python
Syntaxe Ruby et Python ~ branch ~
[Python] Python et sécurité-① Qu'est-ce que Python?
Pile et file d'attente en Python
métaclasse python et déclaration sqlalchemy
Implémentation de Fibonacci et des nombres premiers (python)
bases de python: conditions et itérations
Utilisation et intégration de "Shodan"
Opérateur de bits Python et somme logique
Module de débogage et de test Python
Liste Python et tapples et virgules
Variables Python et ID d'objet
Notation et générateur d'inclusion de liste Python
À propos de Python et des expressions régulières
python avec pyenv et venv
Unittest et CI en Python
Description et implémentation de Maxout (Python)
[python] Obtenir le quotient et le surplus
Fonctions de tri et de comparaison Python 3
[Python] Recherche de priorité de profondeur et recherche de priorité de largeur
Identité et équivalence: is et == en Python
Installation source et installation de Python
Python ou et et opérateur trap