Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Rethink Flask – Daftar Todo Sederhana Didukung oleh Flask dan RethinkDB

Setelah sejumlah permintaan untuk template Flask dan RethinkDB dasar, saya memutuskan untuk melanjutkan dan menulis posting blog. Ini dia postingannya.

BTW:Kami selalu menerima permintaan. Jika Anda memiliki sesuatu yang Anda ingin kami tulis, atau buat, kirimkan email kepada kami.

Hari ini kita akan membuat sederhana daftar todo, yang dapat Anda ubah untuk memenuhi kebutuhan Anda sendiri. Sebelum memulai, saya sangat menyarankan untuk membaca artikel ini, yang merinci perbedaan RethinkDB dari beberapa database NoSQL lainnya.


Siapkan RethinkDB


Instal RethinkDB

Navigasikan di sini dan unduh paket yang sesuai untuk sistem Anda. Saya menggunakan Homebrew - $ brew install rethinkdb - dan butuh hampir dua puluh menit untuk mengunduh dan menginstal build:

==> 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


Instal driver Python secara global

$ sudo pip install rethinkdb

Catatan: Saya menginstal Rethink secara global (di luar virtualenv) karena saya mungkin akan menggunakan versi yang sama dengan sejumlah proyek, dengan sejumlah bahasa yang berbeda. Kami akan menginstal di dalam virtualenv nanti dalam tutorial ini.



Uji penyiapan Anda

Pertama, mari kita mulai server dengan perintah berikut:

$ rethinkdb

Jika semua terpasang dengan benar, Anda akan melihat sesuatu yang mirip dengan:

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

Kemudian uji koneksi. Buka jendela baru di terminal Anda dan masukkan perintah berikut:

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

Anda akan melihat:

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

Keluar dari shell Python tetapi biarkan server RethinkDB berjalan di jendela terminal lainnya.




Menyiapkan proyek Flask Dasar


Buat direktori untuk menyimpan proyek Anda

$ mkdir flask-rethink
$ cd flask-rethink


Siapkan dan aktifkan virtualenv

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


Instal Flask dan Flask-WTF

$ pip install flask
$ pip install flask-wtf


Buat file persyaratan Pip

$ pip freeze > requirements.txt


Unduh boilerplate Flask

Ditemukan di direktori template repo ini. Struktur proyek Anda sekarang akan terlihat seperti ini:

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


Jalankan aplikasi

$ python run.py

Arahkan ke http://localhost:5000/, dan Anda akan melihat:

Jangan mencoba mengirimkan apa pun, karena kita perlu menyiapkan database terlebih dahulu. Ayo jalankan RethinkDB.




Pikirkan kembali Konfigurasi DB


Instal RethinkDB

$ pip install rethinkdb


Tambahkan kode berikut ke “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

Periksa komentar untuk penjelasan singkat tentang fungsi masing-masing.



Mulai server Anda lagi

Anda akan melihat peringatan berikut di terminal Anda:

Database setup completed

Jika Anda melihat kesalahan ini rethinkdb.errors.RqlDriverError: Could not connect to localhost:28015. server RethinkDB Anda tidak berjalan. Buka jendela terminal baru dan jalankan $ rethinkdb .

Jadi, kami membuat database baru bernama “todo”, yang memiliki tabel bernama “todos”.

Anda dapat memverifikasi ini di Admin RethinkDB. Arahkan ke http://localhost:8080/. Admin harus memuat. Jika Anda mengklik “Tabel”, Anda akan melihat database dan tabel yang kami buat:



Tampilkan Todos

Dengan pengaturan database, mari tambahkan kode untuk menampilkan todos. Perbarui index() fungsi di “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)

Di sini kita memilih tabel “todos”, menarik semua data, yang ada di JSON, dan meneruskan seluruh tabel ke template.



Menambahkan data secara manual

Sebelum kita dapat melihat todos apa pun, kita perlu menambahkan beberapa terlebih dahulu. Mari kita lihat shell dan menambahkannya secara manual.

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

Jadi, kami terhubung ke database, lalu memasukkan tiga objek baru ke dalam tabel di dalam database. Periksa dokumen API untuk informasi lebih lanjut.

Jalankan servernya. Anda sekarang akan melihat tiga tugas:



Selesaikan formulir

Perbarui index() berfungsi lagi untuk menarik data dari formulir dan menambahkannya ke database:

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

Uji ini. Tambahkan beberapa todo. Gila.




Kesimpulan &Tantangan

Aplikasi saat ini berfungsi, tetapi masih banyak lagi yang dapat kami lakukan. Bawa aplikasi ini ke level selanjutnya.

Berikut beberapa idenya:

  1. Tambahkan login pengguna.
  2. Buat formulir yang lebih kuat, tempat Anda dapat menambahkan batas waktu untuk setiap tugas, lalu mengurutkan tugas menurut tanggal tersebut sebelum merendernya ke DOM.
  3. Tambahkan pengujian fungsional dan unit.
  4. Tambahkan kemampuan untuk membuat subtugas untuk setiap tugas.
  5. Baca dokumen referensi API. Bermain-main dengan berbagai metode.
  6. Modularisasikan aplikasi.
  7. Perbaiki kode. Pamerkan kode baru Anda ke RethinkDB.

Apa lagi yang ingin Anda lihat? Tertarik untuk melihat bagian 2? Bagaimana Anda menyukai RethinkDB dibandingkan dengan MongoDB? Bagikan pendapat Anda di bawah ini.

Anda dapat mengambil semua kode dari repo. Semangat!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Estimasi Kardinalitas:Menggabungkan Statistik Kepadatan

  2. Mengaktifkan Otentikasi Dua Faktor untuk ScaleGrid DBaaS

  3. Ketik dengan Kuat Parameter Bernilai Tabel itu

  4. Cara Lain untuk Melihat Pembaruan Otomatis pada Statistik

  5. Memigrasikan Cluster Cassandra Anda