[PYTHON] Erstellen Sie eine einfache Web-App mit Flasche

Website zu tun

http://www.kzfmix.com/flaski/

Vorbereiten der Umgebung für den Kolben mit virtualenv

Informationen zur Installation und Verwendung von virtualenv finden Sie unter hier.

$ mkvirtualenv flaski
$ workon flaski

Installation

(flaski):flask_test hoge$ pip install flask
(flaski):flask_test hoge$ pip install sqlalchemy

Richten Sie lokal einen Webserver ein und zeigen Sie Hello World im Browser an.

{app.py}


from flask import Flask
app = Flask(__name__)

# http://127.0.0.1:Mit 5000 als Route("")Zugangspunktbezeichnung in
# @app.route("hoge")Wenn Sie mit etc. angeben, http://127.0.0.1:5000/Kann den Vorgang in hoge beschreiben.
@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    #Start des Webservers
    app.run()

Führen Sie es mit `` `python app.py``` aus. In der Standardausgabe wird Folgendes angezeigt.

(flaski)hoge:src hoge$ python app.py 
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Geben Sie `http: //127.0.0.1: 5000 /` in Ihren Browser ein und Sie sollten Folgendes sehen:

スクリーンショット 2016-05-10 21.35.04.png

Arbeiten mit SQLite mit SQLAlchemy

Dateiorganisation

├── flaski
│   ├── __init__.py
│   ├── database.py
│   └── models.py
├── do_create.py
└── do_insert.py

Überprüfen Sie jedes Skript und jede Operation

{database.py}


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

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import os

# wiki.Gibt an, dass eine Datenbankdatei mit dem Namen db erstellt werden soll
databese_file = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'wiki.db')
#Geben Sie SQLite und die Erstellung der Tabelle an.
engine = create_engine('sqlite:///' + databese_file, convert_unicode=True)
#Geben Sie die Tabelle an, die für die Bindung erstellt werden soll.
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
# declarative_Instanziierung der Basis.
Base = declarative_base()
#Sitzungsspeicher zur Ausführung?
Base.query = db_session.query_property()


def init_db():
    import flaski.models
    #Erstellen mit dem Inhalt von Base ausführen?
    Base.metadata.create_all(bind=engine)

{models.py}


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

from sqlalchemy import Column, Integer, String, Text, DateTime
from flaski.database import Base
from datetime import datetime


class WikiContent(Base):
    __tablename__ = 'wikicontents'                  #Tabellenname
    id = Column(Integer, primary_key=True)          #Spalte 1(id)
    title = Column(String(128), unique=True)        #Spalte 2(title)
    body = Column(Text)                             #Spalte 3(body)
    date = Column(DateTime, default=datetime.now()) #Spalte 4(date)Stellen Sie das aktuelle Standarddatum und die aktuelle Uhrzeit ein

    def __init__(self, title=None, body=None, date=None):
        self.title = title
        self.body = body
        self.date = date

    def __repr__(self):
        return '<Title %r>' % (self.title)

{do_create.py}


from flaski.database import init_db
#Tabelle erstellen
init_db()

Durch Ausführen von do_create.py wird wiki.db im flaski-Verzeichnis erstellt. Überprüfen Sie den Inhalt.

{confirm_sqllite.}


$ > (flaski)hoge:flaski hoge$ sqlite3 wiki.db 
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE wikicontents (
	id INTEGER NOT NULL, 
	title VARCHAR(128), 
	body TEXT, 
	date DATETIME, 
	PRIMARY KEY (id), 
	UNIQUE (title)
);

{do_insert.py}


from flaski.database import init_db
from flaski.database import db_session
from flaski.models import WikiContent

#Die ID ist eine Seriennummer. Geben Sie Titel und Text an. Datum kann ohne Erlaubnis eingegeben werden(model.Standardmäßig ist py eingestellt)
c1 = WikiContent("Flask", "micro framework")  #Spalte 1:'Flask'Spalte 2:'micro framework'Erstellen Sie eine Instanz durch Angabe
db_session.add(c1)                            #Ausführung einfügen
db_session.commit()                           #Commit ausführen
c2 = WikiContent("python", "pppython")        #Das gleiche wie oben
c3 = WikiContent("kobito", "kakure-momojiri")
db_session.add(c2)
db_session.add(c3)
db_session.commit()

Lassen Sie uns die Tabelle früher überprüfen.

{confirm_sqllite2.}


(flaski)hoge:flaski hoge$ sqlite3 wiki.db 
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> select * from wikicontents;
1|Flask|micro framework|2016-05-14 15:04:24.246057
2|python|pppython|2016-05-14 15:04:24.246057
3|kobito|kakure-momojiri|2016-05-14 15:04:24.246057

Sie können sehen, dass 3 Datensätze eingefügt wurden.

Referenz

http://omake.accense.com/static/doc-ja/sqlalchemy/session.html

Erhalten Sie Daten, indem Sie flask und SQLite verbinden

Zeigen Sie die Webseite mit den Werten der zuvor in SQLite erstellten Tabelle an.

Quellcode

github

Dateiorganisation

├── flaski
│   ├── __init__.py
│   ├── database.py
│   └── models.py
├── app.py
├── static
│   └── snake.jpg
└── templates
    ├── index.html
    ├── layout.html
    └── show_content.html

Jedes Skript

{app.py}


# -*- coding: utf-8 -*-
"""
 Using SQLAlchemy and Flask get db record.(GET)
"""

from flask import Flask, render_template, abort
from flaski.models import WikiContent

app = Flask(__name__)
app.config['DEBUG'] = True


#Vom gestarteten Server/Beschreibt das Verhalten beim Zugriff.
# @app.route("/hoge")Wenn Sie schreiben, http://127.0.0.1:5000/Sie können das Verhalten beim Zugriff mit aa beschreiben.
@app.route("/")
def hello():
    contents = WikiContent.query.all()
    # index.Führen Sie dies aus, indem Sie den Kontext als Argument an HTML übergeben.
    return render_template("index.html", contents=contents)

#/<title>Durch Angabe des Index.HTML-Titel=content.Der Titel wird angegeben. Methoden=["GET"]Geben Sie dann die GET-Anforderung an.
@app.route("/<title>", methods=["GET"])
def show_content(title):
    """
    :param title:Abfragezeichenfolge für Modell
    :return:
    """
    #Filtern Sie nach Titel aus der Wikicontent-Tabelle(erhalten Sie durch Angabe, wo)Das erste bedeutet, nur eine Zeile zu erhalten.
    # all()Dann erhalten Sie das Ergebnis in mehreren Listenformaten.
    content = WikiContent.query.filter_by(title=title).first()
    if content is None:
        abort(404)
    # show_content.HTML anzeigen. Inhalt als Argument übergeben.
    return render_template("show_content.html", content=content)

if __name__ == "__main__":
    #Starten Sie den Server
    app.run()

snake.jpg snake.jpg

{index.html}


{% extends "layout.html" %}
{% block body %}
<h1>Flaski</h1>
<!-- snake.Anzeige von jpg-->
<img src="{{url_for('static', filename='snake.jpg')}}" alt="snake"/>
<ul>
<!--Für eine als Argument übergebene Inhaltsschleife-->
{% for content in contents %}
<!-- show_content.Führen Sie HTML aus.+ {{content.title}}Show.-->
<li><a href="{{url_for('show_content', title=content.title)}}">{{content.title}}</a></li>
{% endfor%}
</ul>
{% endblock %}

{show_content.html}


{% extends "layout.html" %}
{% block body %}
<!--Anzeige anhand des Inhalts des Inhalts-->
<h1>{{content.title}}</h1>
<div>{{content.body}}</div>
<p>{{content.date}}</p>
<div>{{content.body}}</div>
{% endblock %}

Bis zu diesem Punkt wird die folgende Seite unter http://127.0.0.1:5000 angezeigt. スクリーンショット 2016-05-14 17.56.32.png

Klicken Sie auf jeden Link, um den Inhalt von SQLite anzuzeigen. Wenn Sie beispielsweise dem Python-Link folgen, sieht es folgendermaßen aus. スクリーンショット 2016-05-14 17.57.11.png

Es wird mit dem Inhalt von Python von SQLite angezeigt. (Ich konnte es bekommen) Der Inhalt der folgenden ID = 2.

{confirm_sqllite2.}


(flaski)hoge:flaski hoge$ sqlite3 wiki.db 
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> select * from wikicontents;
1|Flask|micro framework|2016-05-14 15:04:24.246057
2|python|pppython|2016-05-14 15:04:24.246057
3|kobito|kakure-momojiri|2016-05-14 15:04:24.246057

Einfügen / Aktualisieren (POST) in die SQLite-Tabelle mit API-Post

Versuchen Sie, die SQLite-Tabelle einzufügen und zu aktualisieren.

Dateiorganisation

├── flaski
│   ├── __init__.py
│   ├── database.py
│   └── models.py
└── app.py

{app.py}


# -*- coding: utf-8 -*-
from flask import Flask, render_template, abort, request
from flaski.models import WikiContent
from flaski.database import db_session
from datetime import datetime

app = Flask(__name__)
app.config['DEBUG'] = True


@app.teardown_request
def shutdown_session(exception=None):
    db_session.remove()


@app.route("/")
def hello():
    contents = WikiContent.query.all()
    return render_template("index.html", contents=contents)


@app.route("/<title>", methods=["GET"])
def show_content(title):
    content = WikiContent.query.filter_by(title=title).first()
    if content is None:
        abort(404)
    return render_template("show_content.html", content=content)

@app.route("/<title>", methods=["POST"])
def post_content(title=None):
    if title is None:
        abort(404)
    content = WikiContent.query.filter_by(title=title).first()
    #Wenn der Inhalt nicht abgerufen werden kann, fügen Sie ihn ein. Erstellen Sie daher eine Instanz von WikiContent.
    if content is None:
        content = WikiContent(title,
                              request.form["body"]
                              )
    #Wenn der Inhalt abgerufen werden kann, wird er aktualisiert, also der Inhalt des Körpers und Datum / Uhrzeit=Stellen Sie die aktuelle Zeit ein
    else:
        content.body = request.form["body"]
        content.date = datetime.now()

    #Fügen Sie den Inhalt des Inhalts hinzu und legen Sie fest
    db_session.add(content)
    db_session.commit()
    return content.body

if __name__ == "__main__":
    app.run()

Führen Sie in diesem Status app.py aus.

Um eine http-Anfrage auf der Konsole zu stellen, installieren Sie httpie mit pip install httpie.

{insert_sqlite.}


# body=Update mit Test von httpie
http --form POST http://localhost:5000/httpie body="test from httpie"

Als ich den Inhalt überprüfte, wurde ein Datensatz mit der ID = 4 hinzugefügt.

{confirm_sqllite3.}


sqlite> select * from wikicontents;
1|Flask|micro framework|2016-05-14 15:04:24.246057
2|python|pppython|2016-05-14 15:04:24.246057
3|kobito|kakure-momojiri|2016-05-14 15:04:24.246057
4|httpie|test from httpie|2016-05-14 19:32:12.075871

Ich werde es dieses Mal aktualisieren.

{update_sqlite.}


# body=Aktualisiert mit geändert von httpie
http --form POST http://localhost:5000/httpie body="modified from httpie"

{confirm_sqllite4.}


sqlite> select * from wikicontents;
1|Flask|micro framework|2016-05-14 15:04:24.246057
2|python|pppython|2016-05-14 15:04:24.246057
3|kobito|kakure-momojiri|2016-05-14 15:04:24.246057
4|httpie|modified from httpie|2016-05-14 19:35:40.904904

Es wurde aktualisiert.

Wenn Sie in diesem Status http: // localhost: 5000 aktivieren, wird httpie hinzugefügt.

スクリーンショット 2016-05-14 19.39.02.png

Wenn Sie auf httpie klicken, können Sie sehen, dass es im aktualisierten Zustand erworben wurde. Ich konnte POSTEN.

スクリーンショット 2016-05-14 19.39.35.png

Recommended Posts

Erstellen Sie eine einfache Web-App mit Flasche
Erstellen Sie einen Webdienst mit Docker + Flask
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
Spielen Sie wie eine Web-App mit ipywidgets
Erstellen Sie eine einfache GUI-App in Python
Erstellen Sie eine GUI-App mit Tkinter of Python
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
Einfache Web-App mit Python + Flask + Heroku
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schichterstellungsseite)
Erstellen Sie eine Bildkompositions-App mit Flask + Pillow
Erstellen Sie mit Flask einen einfachen Punktbildgenerator
Gewinnen Sie die Python + Flask-Web-App mit Jenkins
Starten Sie mit Docker einen einfachen Python-Webserver
Erstellen Sie ein Bulletin Board mit Heroku, Flask, SQL Alchemy
Starten Sie einen Webserver mit Python und Flask
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Erstellen Sie eine Web-App, die mit Plotly Dash einfach visualisiert werden kann
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Einführung)
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
Erstellen Sie einen (einfachen) REST-Server
Einfaches maschinelles Lernen mit Scikit-Learn und Flask ✕ Web App
Entwicklung von Webanwendungen mit Flask
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Erstellen Sie eine Web-App, die PDF mit Flask und PyPDF2 in Text konvertiert
Webanwendung mit Python + Flask ② ③
Erstellen Sie einen einfachen Textlint-Server
Erstellen Sie ein Verzeichnis mit Python
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit
Stellen Sie eine mit Streamlit erstellte Web-App für Heroku bereit
Webanwendung mit Python + Flask ④
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schreiben Sie eine Basisvorlage)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Authentifizierungsverarbeitung)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Experiment auf der Admin-Seite)
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
(Für Anfänger) Versuchen Sie, mit Django eine einfache Web-API zu erstellen
Erstellen Sie eine einfache CRUD-App mit der generischen Klassenansicht von Django
Erstellen Sie mit Flask einen CSV-Reader
Erstellen eines Flask-Servers mit Docker
Führen Sie die App mit Flask + Heroku aus
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen Sie eine Webanwendung mit Django
Erstellen einer Webanwendung mit Flask ①
Erstellen einer Webanwendung mit Flask ③
Erstellen Sie einen Poisson-Stepper mit numpy.random
Erstellen einer Webanwendung mit Flask ④
Erstellen Sie mit Django einen Datei-Uploader
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Entwurf des Datenbankmodells)
Schritte zum Einrichten von Pipenv, Erstellen einer CRUD-App mit Flask und Containerisieren mit Docker