Ruby ist eine flexible Programmiersprache mit praktischen und leichten Webanwendungs-Frameworks wie Sinatra. Bisher als Analysesprache Ich habe Statistiken und Daten hauptsächlich in Python visualisiert, aber Python verfügt natürlich auch über eine Vielzahl von Webanwendungsrahmen. Es gibt Arbeit.
Wenn Sie einen Mechanismus zum Ausführen numerischer Berechnungen in Python als Websystem bereitstellen möchten, ist es konsistenter, das Webpart in derselben Sprache zu erstellen, als eine andere Sprache zu verwenden.
Dieses Mal verwende ich Flask, ein kleines Python-Framework, um eine sehr einfache Webanwendung zu erstellen.
Flask hat eine freundliche Bedienungsanleitung, die ins Japanische übersetzt wurde. https://a2c.bitbucket.io/flask/
Es ist so sorgfältig geschrieben, dass im Grunde jeder ein Websystem erstellen kann, indem er dieses Dokument liest und seine Hände bewegt.
Aber auch das ist viel. Wenn Sie nicht gut programmieren können, kann es dennoch schwierig sein, dies zu lesen. Selbst wenn Sie nicht die Zeit haben, wird es ein Ärger sein. Als einfache Einführung möchte ich schnell eine App erstellen, die einfach Textdaten sendet und die Ergebnisse zurückgibt.
Sie benötigen lediglich eine Python-Umgebung mit installiertem Flask. Ich werde die Umgebungskonstruktion weglassen, da Sie [Andere Artikel] lesen können (http://qiita.com/ynakayama/items/2a4d4802c93eb5c40eab).
Der größte Vorteil der Verwendung von Python ist das numerische Berechnungs- und Datenanalysesystem, das von pandas und NumPy dargestellt wird. Es ist das erste Mal in der Bibliothek von. Daher werden wir NumPy auch in der Beispielanwendung verwenden.
Lassen Sie uns zunächst den Teil des Zwecks erstellen, den Sie über das Web erreichen möchten. Wird auch als Geschäftslogik bezeichnet.
sample.py
#Importieren Sie die erforderlichen Bibliotheken wie Flask
from flask import Flask, render_template, request, redirect, url_for
import numpy as np
#Instanziieren Sie Ihren Namen als App
app = Flask(__name__)
#Eine Methode zum zufälligen Anzeigen von Nachrichten
def picked_up():
messages = [
"Hallo, bitte geben Sie Ihren Namen ein",
"Hallo! wie heißt du?",
"Sag mir deinen Namen"
]
#NumPy zufällig.Zufällig aus dem Array mit Auswahl abrufen
return np.random.choice(messages)
#Schreiben Sie von hier aus das Routing für Webanwendungen
#Was passiert, wenn Sie auf den Index zugreifen?
@app.route('/')
def index():
title = "Herzlich willkommen"
message = picked_up()
# index.HTML rendern
return render_template('index.html',
message=message, title=title)
# /Was passiert, wenn Sie auf die Post zugreifen?
@app.route('/post', methods=['GET', 'POST'])
def post():
title = "Hallo"
if request.method == 'POST':
#Holen Sie sich den "Namen" aus dem Anfrageformular
name = request.form['name']
# index.HTML rendern
return render_template('index.html',
name=name, title=title)
else:
#Wenn Sie aufgrund eines Fehlers usw. umleiten möchten, sieht es so aus
return redirect(url_for('index'))
if __name__ == '__main__':
app.debug = True #Aktivieren Sie den Debug-Modus
app.run(host='0.0.0.0') #Von überall zugänglich
Fordern Sie auf dem oberen Bildschirm einen Namen an und zeigen Sie ihn beim Senden auf dem Bildschirm an. Das ist das einzige Programm. Sie können sehen, dass es fast ein normales Python-Programm ist, außer für das Routing.
Verwenden Sie die Methode render_template (), um die Vorlage zu rendern. Wenn Sie das Objekt, das Sie zu diesem Zeitpunkt übergeben möchten, als Argument anhängen, ist es in der Ansicht verfügbar.
Der Bildschirm wird auch als Ansicht bezeichnet. Wie Sie im Benutzerhandbuch sehen können, verfügt Flask über eine Vorlagen-Engine namens Jinja2.
Jinja2 http://jinja.pocoo.org/docs/dev/
Es ist im Grunde genommen einfaches HTML, aber mit einer speziellen Notation dazwischen können Sie die von Python übergebenen Objekte anzeigen und Dinge wie Bedingungen und Schleifen verarbeiten.
Das Schreiben von CSS und Headern zum Laden von JavaScript auf jedem Bildschirm ist mühsam und verschwenderisch. Daher ist es in einer Webanwendung üblich, einen HTML-Code nur für den gemeinsamen Teil für das Layout wie layout.html vorzubereiten.
Dieses Mal verwenden wir das CSS-Framework Bootstrap. Flask legt Dateien wie CSS und JavaScript im Verzeichnis / static ab. Entpacken Sie daher die von der offiziellen Website (http://getbootstrap.com/) heruntergeladene Bootstrap-ZIP-Datei und stellen Sie sie unter statischen Bedingungen bereit.
Bereiten Sie außerdem ein Verzeichnis mit dem Namen Vorlagen vor und fügen Sie HTML in dieses Verzeichnis ein.
layout.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
{% if title %}
<title>{{ title }}</title>
{% else %}
<title>Bootstrap 101 Template</title>
{% endif %}
<!-- Bootstrap -->
<link href="/static/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
{% block content %}{% endblock %}
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="/static/js/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/static/js/bootstrap.min.js"></script>
</body>
</html>
Grundsätzlich habe ich den Bootstrap Basic Template so geschrieben, wie er ist.
Der in {% ...%} enthaltene Teil ist Jinja2. Wenn in diesem Beispiel der Titel als Instanz vorhanden ist, wird er angezeigt und ein Block mit dem Namen content wird eingefügt.
Diesmal ist es einfach, da es nur eine index.html-Seite gibt.
Das erste {% erweitert "layout.html"%} erweitert layout.html. Jetzt müssen Sie nur noch die Teile außer dem Layout schreiben. Wenn Sie es in {% block content%} {% endblock%} einschließen, wird es als Block mit dem Namen content behandelt. Dadurch wird es in den Inhaltsblockteil des Layouts gerendert.
index.html
{% extends "layout.html" %}
{% block content %}
<!-- Form
================================================== -->
<div class="form">
<div class="container">
<div class="row">
<div class="col-md-12">
<p class="lead">
{% if name %}
Hallo{{ name }}Herr.
{% else %}
{{ message }}
{% endif %}
</p>
<form action="/post" method="post" class="form-inline">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Name">
<button type="submit" class="btn btn-default">Senden</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
Wenn es eine Namensinstanz gibt, zeigen Sie den Namen an, andernfalls eine Nachricht.
Der Antrag ist jetzt vollständig. Wenn Sie danach etwas wie python app.py ausführen, wird die Webanwendung auf Port 5000 auf localhost gestartet.
Die obere Seite wurde sicher angezeigt. Die Nachricht wird zufällig ausgewählt und von NumPy angezeigt. Geben Sie hier Ihren Namen ein und klicken Sie auf die Schaltfläche "Senden", um ihn an / post zu senden.
Rufen Sie den Namen aus dem Anforderungsformular ab und rendern Sie index.html. Dies zeigt den Namen an, den Sie auf dem Bildschirm eingegeben haben.
Sie können sehen, dass Sie mit Python problemlos eine Webanwendung erstellen können. Es kann gesagt werden, dass sich die Fähigkeit, nicht nur den Analyseteil, sondern auch andere Teile wie das Web in derselben Sprache zu beschreiben, von der R-Sprache unterscheidet.
Wenn Sie ein Computersystem mit einer einfachen Antwortfunktion vorbereiten möchten, ist es praktisch, das Python-Programm zu erweitern und es so wie es ist als Webanwendung zu implementieren.
Sie können die gesendeten Daten einfach in der Datenbank speichern und die Daten aus der Datenbank lesen, indem Sie SQLAlchemy kombinieren. Ich denke, das allein hat mir das Gefühl gegeben, dass eine praktische Anwendung geschaffen werden kann.
Der Quellcode für diesen Artikel ist unter [hier] verfügbar (https://github.com/ynakayama/flask-hello/tree/hello-world).
Recommended Posts