Sistem kontrol perpustakaan pada Flask-Potion, Bagian 0: menyiapkan semua yang Anda butuhkan

Pendahuluan


Dalam pekerjaan saya, saya telah menggunakan Flask-Potion untuk beberapa waktu sekarang, kerangka kerja yang keunggulan utamanya adalah: integrasi yang sangat nyaman dengan model SQLAlchemy, auto-endpoint crud, keberadaan klien-ramuan (sangat nyaman jika Anda menulis layanan API yang perlu Anda gunakan di tempat lain layanan).


Saya perhatikan bahwa hampir tidak ada apa-apa tentang ramuan labu di Rusia, tetapi saya pikir kerangka kerja ini mungkin tampak menarik bagi sebagian orang.


Alih-alih artikel ulasan sederhana pada kerangka kerja ini, saya memutuskan untuk menulis beberapa artikel tentang membuat sistem kontrol untuk perpustakaan Furfur berdasarkan Flask-Potion.


Sistem ini harus dapat melakukan hal berikut:


  • Menyimpan informasi tentang buku (isbn, judul, deskripsi, penulis, dll.)
  • Simpan informasi pengguna (pembaca dan pustakawan)
  • Untuk menerbitkan buku dari perpustakaan untuk periode tertentu dengan kemungkinan perpanjangan

Dalam sistem ini kita akan menggunakan alat-alat berikut:


  • PostgreSQL
  • Labu, Labu-SQL Alkimia, Labu-JWT, Labu-Ramuan, Labu-Migrasi

Persiapan


Kerangka


Agar tidak mengumpulkan kerangka untuk proyek sendiri, kami akan menggunakan Vale untuk cookiecutter-template, yang mencakup semua dependensi di atas dan bahkan lebih.


cookiecutter gh:lemegetonx/valefor 

Templat ini mencakup dua aplikasi:


  1. aplikasi adalah hal utama. Ini berisi fungsi handler untuk jwt, kelas mixin untuk sumber daya ramuan dan model sqlalchemy, serta paket dengan konfigurasi untuk aplikasi.
  2. pengguna - di awal template, hanya berisi model pengguna.

Instalasi Ketergantungan


Template menggunakan puisi untuk menyelesaikan dependensi, tetapi baru-baru ini pip juga mendukung pyproject.toml , jadi pilihan ada di tangan Anda. Saya akan memanfaatkan puisi.


 poetry install 

Konfigurasi


Untuk konfigurasi yang disederhanakan, templat menggunakan perpustakaan sitri. Kita perlu sedikit memodifikasi pengaturan objek Sitri.


  1. Ubah app / config / provider.py . Kami akan mengganti SystemCredentialProvider dengan YamlCredentialProvider sehingga data otorisasi untuk sistem pihak ketiga diambil dari file credential.yaml , yang tidak akan kami tambahkan ke komitmen:

 from sitri import Sitri from sitri.contrib.yaml import YamlConfigProvider, YamlCredentialProvider configuration = Sitri( config_provider=YamlConfigProvider(yaml_path="./config.yaml"), credential_provider=YamlCredentialProvider(yaml_path="./credential.yaml"), ) 

NB lebih lanjut tentang apa yang sebenarnya terjadi di sini lebih mudah dibaca dalam dokumentasi , singkatnya, sekarang kami hanya memutuskan dari mana kami akan mendapatkan data untuk konfigurasi dan otorisasi.


  1. Karena kami pada dasarnya membuat penyedia yang sama, lebih baik untuk mengganti garis bawah pada tombol-tombol dalam panggilan get_credential dengan titik-titik dalam database.py .

 DB_NAME = configuration.get_credential("db.name", path_mode=True) DB_HOST = configuration.get_credential("db.host", path_mode=True) DB_PASSWORD = configuration.get_credential("db.user.password", path_mode=True) DB_PORT = configuration.get_credential("db.port", path_mode=True) DB_USER = configuration.get_credential("db.user.name", path_mode=True) 

Jadi, file config.yaml sudah ada di template, tetapi credential.yaml harus ditulis sendiri. Dalam kehidupan nyata, file-file tersebut perlu ditambahkan ke .gitignore, tetapi saya akan menambahkan template credential.yaml ke repositori sehingga strukturnya dapat dimengerti oleh siapa saja yang masuk ke proyek.


Base credential.yaml :


 db: name: furfur_db host: localhost port: 5432 user: password: passwd name: admin 

Basis data


Tahap selanjutnya dari persiapan kami adalah penyebaran DBMS, dalam hal ini PostgreSQL. Untuk kenyamanan, saya akan membuat file stack.yaml di mana saya akan menjelaskan peluncuran wadah postgres dengan data yang kita butuhkan.


 version: '3.1' services: db: image: postgres restart: always environment: POSTGRES_PASSWORD: passwd POSTGRES_USER: admin POSTGRES_DB: furfur_db ports: - 5432:5432 

Seperti yang disebutkan sebelumnya, templat valefor mencakup model dasar Pengguna yang diperlukan agar JWT (penangan) berfungsi, sehingga langkah terakhir dalam mempersiapkan database adalah migrasi (membuat tabel pengguna).


Berada di root proyek, kami menjalankan perintah berikut:


 export FLASK_APP=furfur.app flask db init flask db migrate flask db upgrade 

Semuanya, dengan persiapan database, serta dasar umum untuk sistem kami, kami selesai.


Apa selanjutnya


Pada bagian selanjutnya, kita akan berbicara tentang bagaimana mengatur sistem peran sederhana dan otentikasi JWT.


Repositori Proyek: https://github.com/Egnod/furfur
Segala sesuatu yang dinyatakan di bagian ini: https://github.com/Egnod/furfur/releases/tag/0.0.2

Source: https://habr.com/ru/post/id472018/


All Articles