Database
 sql >> база данни >  >> RDS >> Database

Rethink Flask – прост списък със задачи, поддържан от Flask и RethinkDB

След редица заявки за основен шаблон за Flask и RethinkDB, реших да продължа и да напиша публикация в блога. Това е тази публикация.

BTW:Винаги приветстваме заявки. Ако имате нещо, за което искате да пишем или да изградим, изпратете ни имейл.

Днес ще създадем просто списък със задачи, който ще можете да модифицирате, за да отговори на вашите собствени нужди. Преди да започнете, силно препоръчвам да прочетете тази статия, която подробно описва как RethinkDB се различава от някои от другите бази данни NoSQL.


Настройте RethinkDB


Инсталирайте RethinkDB

Навигирайте тук и изтеглете подходящия пакет за вашата система. Използвах Homebrew - $ brew install rethinkdb - и отне почти двадесет минути, за да изтеглите и инсталирате сборката:

==> 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 да работи в другия терминален прозорец.




Настройте проект Basic 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


Изтеглете шаблона на Flask

Намерено в директорията с шаблони на това репо. Структурата на вашия проект сега трябва да изглежда така:

├── 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 Config


Инсталирайте 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 .

И така, създадохме нова база данни, наречена „todo“, която има таблица, наречена „todos“.

Можете да проверите това в RethinkDB Admin. Отидете до http://localhost:8080/. Админът трябва да се зареди. Ако щракнете върху „Таблици“, трябва да видите базата данни и таблицата, които създадохме:



Показване на задачи

С настройката на базата данни, нека добавим код за показване на задачи. Актуализирайте 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, и предаваме цялата таблица на шаблона.



Добавяне на данни ръчно

Преди да можем да видим каквито и да било задачи, първо трябва да добавим някои. Нека преминем през обвивката и да ги добавим ръчно.

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

И така, ние се свързахме с базата данни, след което въведохме три нови обекта в таблицата в базата данни. Проверете документите на API за повече информация.

Запалете сървъра. Сега трябва да видите трите задачи:



Финализиране на формуляра

Актуализирайте 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)

Тествайте това. Добавете малко задачи. Побъркайте.




Заключение и предизвикателства

Настоящото приложение е функционално, но можем да направим още много. Пренесете това приложение на следващото ниво.

Ето няколко идеи:

  1. Добавете потребителско име за вход.
  2. Създайте по-стабилен формуляр, където можете да добавите краен срок за всяка задача и след това сортирайте задачите по тази дата, преди да ги изобразите в DOM.
  3. Добавяне на функционални и модулни тестове.
  4. Добавете възможност за създаване на подзадачи за всяка задача.
  5. Прочетете справочните документи за API. Играйте с различни методи.
  6. Модуларизирайте приложението.
  7. Рефакторирайте кода. Покажете новия си код на RethinkDB.

Какво друго бихте искали да видите? Интересувате ли се да видите част 2? Как ви харесва RethinkDB в сравнение с MongoDB? Споделете вашите мисли по-долу.

Можете да вземете целия код от репо. Наздраве!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво бих искал да видя в Amazon EC2 за управление на бази данни

  2. Проблеми с конфигурацията на регистъра на транзакциите

  3. Какви са стъпките в дизайна на база данни?

  4. Използване на ODBC със Salesforce и услуги за федерация на Active Directory (ADFS) за единичен вход (SSO)

  5. Използване на Trace Flag 3226 за потискане на регистрирането на архивиране на регистрационни файлове