Database
 sql >> Baza danych >  >> RDS >> Database

Rethink Flask – prosta lista rzeczy do zrobienia oparta na Flask i RethinkDB

Po wielu prośbach o podstawowy szablon Flask i RethinkDB zdecydowałem się napisać post na blogu. To jest ten post.

BTW:Zawsze przyjmujemy prośby. Jeśli masz coś, o czym chciałbyś, abyśmy napisali lub zbudowali, napisz do nas e-mail.

Dzisiaj stworzymy prostą listę rzeczy do zrobienia, którą będziesz mógł modyfikować zgodnie z własnymi potrzebami. Przed rozpoczęciem gorąco polecam przeczytanie tego artykułu, który szczegółowo opisuje, czym RethinkDB różni się od niektórych innych baz danych NoSQL.


Skonfiguruj RethinkDB


Zainstaluj RethinkDB

Przejdź tutaj i pobierz odpowiedni pakiet dla swojego systemu. Użyłem Homebrew - $ brew install rethinkdb - pobranie i zainstalowanie kompilacji zajęło prawie dwadzieścia 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


Zainstaluj sterowniki Pythona globalnie

$ sudo pip install rethinkdb

Uwaga: Zainstalowałem Rethink globalnie (poza virtualenv), ponieważ prawdopodobnie będę używał tej samej wersji z wieloma projektami, z wieloma różnymi językami. Będziemy instalować w środowisku virtualenv w dalszej części tego samouczka.



Przetestuj swoją konfigurację

Najpierw uruchommy serwer następującym poleceniem:

$ rethinkdb

Jeśli wszystko jest poprawnie zainstalowane, powinieneś zobaczyć coś podobnego do:

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

Następnie przetestuj połączenie. Otwórz nowe okno w swoim terminalu i wprowadź następujące polecenia:

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

Powinieneś zobaczyć:

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

Wyjdź z powłoki Pythona, ale pozostaw serwer RethinkDB uruchomiony w innym oknie terminala.




Skonfiguruj projekt Basic Flask


Utwórz katalog do przechowywania swojego projektu

$ mkdir flask-rethink
$ cd flask-rethink


Skonfiguruj i aktywuj wirtualne środowisko

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


Zainstaluj Flask i Flask-WTF

$ pip install flask
$ pip install flask-wtf


Utwórz plik wymagań Pip

$ pip freeze > requirements.txt


Pobierz schemat Flask

Znaleziono w katalogu szablonów tego repozytorium. Twoja struktura projektu powinna teraz wyglądać tak:

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


Uruchom aplikację

$ python run.py

Przejdź do http://localhost:5000/ i powinieneś zobaczyć:

Nie próbuj jeszcze niczego przesyłać, ponieważ najpierw musimy skonfigurować bazę danych. Zacznijmy RethinkDB.




Przemyśl konfigurację bazy danych


Zainstaluj RethinkDB

$ pip install rethinkdb


Dodaj następujący kod 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

Sprawdź komentarze, aby uzyskać krótkie wyjaśnienie, co robi każda z funkcji.



Ponownie uruchom serwer

W terminalu powinien pojawić się następujący alert:

Database setup completed

Jeśli zobaczysz ten błąd rethinkdb.errors.RqlDriverError: Could not connect to localhost:28015. Twój serwer RethinkDB nie działa. Otwórz nowe okno terminala i uruchom $ rethinkdb .

Dlatego stworzyliśmy nową bazę danych o nazwie „todo”, która zawiera tabelę o nazwie „todos”.

Możesz to sprawdzić w Administracji RethinkDB. Przejdź do http://localhost:8080/. Administrator powinien się załadować. Jeśli klikniesz „Tabele”, powinieneś zobaczyć utworzoną przez nas bazę danych i tabelę:



Wyświetl listę zadań

W konfiguracji bazy danych dodajmy kod, aby wyświetlić listę rzeczy do zrobienia. Zaktualizuj index() funkcja w „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)

Tutaj wybieramy tabelę „todos”, pobieramy wszystkie dane w formacie JSON i przekazujemy całą tabelę do szablonu.



Dodaj dane ręcznie

Zanim będziemy mogli zobaczyć jakieś rzeczy do zrobienia, musimy je najpierw dodać. Przejdźmy przez powłokę i dodajmy je ręcznie.

>>>
$ 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}
>>>

Połączyliśmy się więc z bazą danych, a następnie wprowadziliśmy do tabeli w bazie danych trzy nowe obiekty. Sprawdź dokumentację API, aby uzyskać więcej informacji.

Uruchom serwer. Powinieneś teraz zobaczyć trzy zadania:



Zakończ formularz

Zaktualizuj index() funkcja ponownie, aby pobrać dane z formularza i dodać je do bazy danych:

@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)

Przetestuj to. Dodaj kilka rzeczy do zrobienia. Zaszalej.




Wnioski i wyzwania

Obecna aplikacja działa, ale możemy zrobić o wiele więcej. Przenieś tę aplikację na wyższy poziom.

Oto kilka pomysłów:

  1. Dodaj login użytkownika.
  2. Utwórz bardziej niezawodny formularz, w którym możesz dodać termin dla każdego zadania, a następnie posortować zadania według tej daty przed wyrenderowaniem ich do DOM.
  3. Dodaj testy funkcjonalne i jednostkowe.
  4. Dodaj możliwość tworzenia podzadań dla każdego zadania.
  5. Przeczytaj dokumentację referencyjną interfejsu API. Baw się różnymi metodami.
  6. Modularyzacja aplikacji.
  7. Zrefaktoruj kod. Pochwal się swoim nowym kodem w RethinkDB.

Co jeszcze chciałbyś zobaczyć? Chcesz zobaczyć część 2? Jak ci się podoba RethinkDB w porównaniu do MongoDB? Podziel się swoimi przemyśleniami poniżej.

Możesz pobrać cały kod z repozytorium. Pozdrawiam!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dzielenie strun:kontynuacja

  2. Jak porównać datę w SQL

  3. Przycinanie tłuszczu dziennika transakcji

  4. Modelowanie baz danych

  5. Nieoczekiwana fragmentacja indeksu klastrowanego