sql >> Databáze >  >> RDS >> Database

Rethink Flask – jednoduchý seznam úkolů založený na Flask a RethinkDB

Po řadě žádostí o základní šablonu Flask a RethinkDB jsem se rozhodl napsat článek na blog. Toto je ten příspěvek.

BTW:Žádosti vždy vítáme. Pokud máte něco, o čem byste chtěli napsat nebo vytvořit, napište nám.

Dnes vytvoříme jednoduché seznam úkolů, který si budete moci upravit podle svých potřeb. Než začnete, velmi doporučuji přečíst si tento článek, který podrobně popisuje, jak se RethinkDB liší od některých jiných databází NoSQL.


Nastavte RethinkDB


Nainstalujte RethinkDB

Přejděte sem a stáhněte si příslušný balíček pro váš systém. Použil jsem Homebrew - $ brew install rethinkdb - a stažení a instalace sestavení trvalo téměř dvacet minut:

==> Installing rethinkdb
==> Downloading http://download.rethinkdb.com/dist/rethinkdb-     1.11.2.tgz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/rethinkdb/1.11.2 --  fetch v8 --fetch protobuf
==> make
==> make install-osx
==> Caveats
To have launchd start rethinkdb at login:
  ln -sfv /usr/local/opt/rethinkdb/*.plist   ~/Library/LaunchAgents
Then to load rethinkdb now:
  launchctl load   ~/Library/LaunchAgents/homebrew.mxcl.rethinkdb.plist
==> Summary
🍺  /usr/local/Cellar/rethinkdb/1.11.2: 174 files, 29M, built in   19.7 minutes


Globálně nainstalujte ovladače Pythonu

$ sudo pip install rethinkdb

Poznámka: Nainstaloval jsem Rethink globálně (mimo virtualenv), protože pravděpodobně budu stejnou verzi používat s řadou projektů s řadou různých jazyků. Později v tomto tutoriálu provedeme instalaci v rámci virtualenv.



Otestujte své nastavení

Nejprve spusťte server následujícím příkazem:

$ rethinkdb

Pokud je vše správně nainstalováno, měli byste vidět něco podobného:

info: Creating directory /Users/michaelherman/rethinkdb_data
info: Creating a default database for your convenience. (This is because you ran 'rethinkdb' without 'create', 'serve', or '--join', and the directory '/Users/michaelherman/rethinkdb_data' did not already exist.)
info: Running rethinkdb 1.11.2 (CLANG 4.2 (clang-425.0.28))...
info: Running on Darwin 12.4.0 x86_64
info: Loading data from directory    /Users/michaelherman/rethinkdb_data
info: Listening for intracluster connections on port 29015
info: Listening for client driver connections on port 28015
info: Listening for administrative HTTP connections on port 8080
info: Listening on addresses: 127.0.0.1, ::1
info: To fully expose RethinkDB on the network, bind to all addresses
info: by running rethinkdb with the `--bind all` command line option.
info: Server ready

Poté otestujte připojení. Otevřete nové okno v terminálu a zadejte následující příkazy:

>>>
$ python
>>> import rethinkdb
>>> rethinkdb.connect('localhost', 28015).repl()

Měli byste vidět:

>>>
<rethinkdb.net.Connection object at 0x101122410>

Ukončete prostředí Pythonu, ale ponechte server RethinkDB spuštěný v druhém okně terminálu.




Nastavení projektu Basic Flask


Vytvořte adresář pro uložení projektu

$ mkdir flask-rethink
$ cd flask-rethink


Nastavení a aktivace virtuálního prostředí

$ virtualenv --no-site-packages env
$ source env/bin/activate


Instalujte Flask a Flask-WTF

$ pip install flask
$ pip install flask-wtf


Vytvořte soubor požadavků Pip

$ pip freeze > requirements.txt


Stáhněte si základní verzi Flask

Nachází se v adresáři šablon tohoto úložiště. Struktura vašeho projektu by nyní měla vypadat takto:

├── app
│   ├── __init__.py
│   ├── forms.py
│   ├── models.py
│   ├── templates
│   │   ├── base.html
│   │   └── index.html
│   └── views.py
├── readme.md
├── requirements.txt
└── run.py


Spusťte aplikaci

$ python run.py

Přejděte na http://localhost:5000/ a měli byste vidět:

Zatím se nepokoušejte nic odesílat, protože nejprve potřebujeme nastavit databázi. Začněme RethinkDB.




RethinkDB Config


Nainstalujte RethinkDB

$ pip install rethinkdb


Přidejte následující kód do „views.py“

# rethink imports
import rethinkdb as r
from rethinkdb.errors import RqlRuntimeError

# rethink config
RDB_HOST =  'localhost'
RDB_PORT = 28015
TODO_DB = 'todo'

# db setup; only run once
def dbSetup():
    connection = r.connect(host=RDB_HOST, port=RDB_PORT)
    try:
        r.db_create(TODO_DB).run(connection)
        r.db(TODO_DB).table_create('todos').run(connection)
        print 'Database setup completed'
    except RqlRuntimeError:
        print 'Database already exists.'
    finally:
        connection.close()
dbSetup()

# open connection before each request
@app.before_request
def before_request():
    try:
        g.rdb_conn = r.connect(host=RDB_HOST, port=RDB_PORT, db=TODO_DB)
    except RqlDriverError:
        abort(503, "Database connection could be established.")

# close the connection after each request
@app.teardown_request
def teardown_request(exception):
    try:
        g.rdb_conn.close()
    except AttributeError:
        pass

Podívejte se do komentářů, kde najdete stručné vysvětlení toho, co každá z funkcí dělá.



Znovu spusťte server

V terminálu byste měli vidět následující upozornění:

Database setup completed

Pokud se zobrazí tato chyba rethinkdb.errors.RqlDriverError: Could not connect to localhost:28015. váš server RethinkDB není spuštěn. Otevřete nové okno terminálu a spusťte $ rethinkdb .

Vytvořili jsme tedy novou databázi nazvanou „todo“, která má tabulku nazvanou „todos“.

Můžete si to ověřit v RethinkDB Admin. Přejděte na http://localhost:8080/. Admin by se měl načíst. Pokud kliknete na „Tabulky“, měli byste vidět databázi a tabulku, kterou jsme vytvořili:



Zobrazit úkoly

S nastavením databáze přidejte kód pro zobrazení úkolů. Aktualizujte index() funkce v „views.py“:

@app.route("/")
def index():
    form = TaskForm()
    selection = list(r.table('todos').run(g.rdb_conn))
    return render_template('index.html', form=form, tasks=selection)

Zde vybíráme tabulku „todos“, stahujeme všechna data, která jsou v JSON, a předáváme celou tabulku šabloně.



Přidat data ručně

Než si budeme moci prohlédnout nějaké úkoly, musíme je nejprve přidat. Pojďme si projít shell a přidat je ručně.

>>>
$ python
>>> import rethinkdb
>>> conn = rethinkdb.connect(db='todo')
>>> rethinkdb.table('todos').insert({'name':'sail to the moon'}).run(conn)
{u'errors': 0, u'deleted': 0, u'generated_keys': [u'c5562325-c5a1-4a78-8232-c0de4f500aff'], u'unchanged': 0, u'skipped': 0, u'replaced': 0, u'inserted': 1}
>>> rethinkdb.table('todos').insert({'name':'jump in the ocean'}).run(conn)
{u'errors': 0, u'deleted': 0, u'generated_keys': [u'0a3e3658-4513-48cb-bc68-5af247269ee4'], u'unchanged': 0, u'skipped': 0, u'replaced': 0, u'inserted': 1}
>>> rethinkdb.table('todos').insert({'name':'think of another todo'}).run(conn)
{u'errors': 0, u'deleted': 0, u'generated_keys': [u'b154a036-3c3b-47f4-89ec-cb9f4eff5f5a'], u'unchanged': 0, u'skipped': 0, u'replaced': 0, u'inserted': 1}
>>>

Připojili jsme se tedy k databázi a poté do tabulky v databázi zadali tři nové objekty. Další informace naleznete v dokumentaci k rozhraní API.

Spusťte server. Nyní byste měli vidět tři úkoly:



Dokončete formulář

Aktualizujte index() funkci znovu vytáhnout data z formuláře a přidat je do databáze:

@app.route('/', methods = ['GET', 'POST'])
def index():
    form = TaskForm()
      if form.validate_on_submit():
          r.table('todos').insert({"name":form.label.data}).run(g.rdb_conn)
          return redirect(url_for('index'))
      selection = list(r.table('todos').run(g.rdb_conn))
      return render_template('index.html', form = form, tasks = selection)

Vyzkoušejte to. Přidejte nějaké úkoly. Zbláznit se.




Závěr a výzvy

Aktuální aplikace je funkční, ale můžeme udělat mnohem víc. Posuňte tuto aplikaci na další úroveň.

Zde je několik nápadů:

  1. Přidejte přihlašovací údaje uživatele.
  2. Vytvořte robustnější formulář, do kterého můžete přidat datum dokončení pro každý úkol a poté úkoly seřadit podle tohoto data, než je vykreslíte do modelu DOM.
  3. Přidejte funkční a jednotkové testy.
  4. Přidejte možnost vytvářet dílčí úkoly pro každý úkol.
  5. Přečtěte si referenční dokumenty API. Pohrajte si s různými metodami.
  6. Modularizovat aplikaci.
  7. Refaktorujte kód. Pochlubte se svým novým kódem RethinkDB.

Co byste ještě rádi viděli? Máte zájem vidět 2. díl? Jak se vám líbí RethinkDB ve srovnání s MongoDB? Podělte se o své myšlenky níže.

Můžete získat veškerý kód z repozitáře. Na zdraví!



  1. Vytvořte více instancí Postgres na stejném počítači

  2. Jak vložit dlouhý řetězec do datového typu CLOB v Oracle

  3. Jaký je rozdíl mezi použitím křížového spojení a vložením čárky mezi dvě tabulky?

  4. Jak automatizovat selhání databáze pomocí ClusterControl