基本的なFlaskおよびRethinkDBテンプレートを何度もリクエストした後、私は先に進んでブログ投稿を書くことにしました。これがその投稿です。
ところで:私たちは常にリクエストを歓迎します。私たちに書いてもらいたい、または作成してほしいものがあれば、私たちにメールを送ってください。
今日はシンプルを作成します ToDoリスト。自分のニーズに合わせて変更できます。始める前に、RethinkDBが他のNoSQLデータベースとどのように異なるかを詳しく説明しているこの記事を読むことを強くお勧めします。
RethinkDBを設定する
RethinkDBのインストール
ここに移動して、システムに適切なパッケージをダウンロードします。 Homebrewを使用しました-$ brew install rethinkdb
-ビルドのダウンロードとインストールには約20分かかりました:
==> 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
Pythonドライバーをグローバルにインストールする
$ sudo pip install rethinkdb
注: Rethinkをグローバルに(virtualenvの外で)インストールしました。おそらく、同じバージョンをいくつかのプロジェクトで、いくつかの異なる言語で使用するからです。このチュートリアルの後半で、virtualenv内にインストールします。
セットアップをテストする
まず、次のコマンドでサーバーを起動しましょう。
$ rethinkdb
すべてが正しくインストールされている場合は、次のようなものが表示されます。
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
次に、接続をテストします。ターミナルで新しいウィンドウを開き、次のコマンドを入力します。
>>>$ python
>>> import rethinkdb
>>> rethinkdb.connect('localhost', 28015).repl()
表示されるはずです:
>>><rethinkdb.net.Connection object at 0x101122410>
Pythonシェルを終了しますが、RethinkDBサーバーは他のターミナルウィンドウで実行したままにします。
基本的なFlaskプロジェクトを設定する
プロジェクトを保存するディレクトリを作成します
$ mkdir flask-rethink
$ cd flask-rethink
virtualenvを設定してアクティブ化する
$ virtualenv --no-site-packages env
$ source env/bin/activate
FlaskとFlask-WTFをインストールする
$ pip install flask
$ pip install flask-wtf
Pip要件ファイルを作成する
$ pip freeze > requirements.txt
フラスコボイラープレートをダウンロード
このリポジトリのテンプレートディレクトリにあります。プロジェクト構造は次のようになります。
├── app
│ ├── __init__.py
│ ├── forms.py
│ ├── models.py
│ ├── templates
│ │ ├── base.html
│ │ └── index.html
│ └── views.py
├── readme.md
├── requirements.txt
└── run.py
アプリを実行する
$ python run.py
http:// localhost:5000 /に移動すると、次のように表示されます。
最初にデータベースを設定する必要があるため、まだ何も送信しないでください。 RethinkDBを始めましょう。
RethinkDB構成
RethinkDBのインストール
$ pip install rethinkdb
次のコードを「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
各機能の機能の簡単な説明については、コメントを確認してください。
サーバーを再起動します
ターミナルに次のアラートが表示されます。
Database setup completed
このエラーが表示された場合
rethinkdb.errors.RqlDriverError: Could not connect to localhost:28015.
RethinkDBサーバーが実行されていません。新しいターミナルウィンドウを開き、$ rethinkdb
を実行します 。
そこで、「todos」というテーブルを持つ「todo」という新しいデータベースを作成しました。
これは、RethinkDB管理者で確認できます。 http:// localhost:8080/に移動します。管理者がロードする必要があります。 [テーブル]をクリックすると、作成したデータベースとテーブルが表示されます。
Todoの表示
データベースを設定したら、タスクを表示するコードを追加しましょう。 index()
を更新します 「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)
ここでは、「todos」テーブルを選択し、JSONであるすべてのデータをプルして、テーブル全体をテンプレートに渡します。
手動でデータを追加
ToDoを表示する前に、まずいくつかを追加する必要があります。シェルを調べて、手動で追加してみましょう。
>>>$ 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}
>>>
そこで、データベースに接続し、データベース内のテーブルに3つの新しいオブジェクトを入力しました。 詳細については、APIドキュメントを確認してください。
サーバーを起動します。これで、3つのタスクが表示されます。
フォームを完成させる
index()
を更新します フォームからデータをプルしてデータベースに追加するには、もう一度機能します。
@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)
これをテストしてください。いくつかのtodoを追加します。夢中になる。
結論と課題
現在のアプリは機能していますが、できることはまだまだたくさんあります。このアプリを次のレベルに引き上げましょう。
ここにいくつかのアイデアがあります:
- ユーザーログインを追加します。
- より堅牢なフォームを作成します。このフォームでは、各ToDoの期日を追加し、その日付でToDoを並べ替えてからDOMにレンダリングできます。
- 機能テストと単体テストを追加します。
- タスクごとにサブタスクを作成する機能を追加します。
- APIリファレンスドキュメントをお読みください。さまざまな方法で遊んでください。
- アプリをモジュール化します。
- コードをリファクタリングします。新しいコードをRethinkDBに見せびらかしてください。
他に何を見たいですか?パート2をご覧になりたいですか? MongoDBと比較してRethinkDBはどのように気に入っていますか?以下であなたの考えを共有してください。
リポジトリからすべてのコードを取得できます。乾杯!