مقدمة
في عملي ، كنت أستخدم Flask-Potion لبعض الوقت الآن ، وهو إطار تتمثل مزاياه الرئيسية في: التكامل المريح للغاية مع نماذج SQLAlchemy ، وتوليد نقاط النهاية التلقائي الخام ، ووجود عميل جرعة (مناسب للغاية إذا كتبت خدمة API ستحتاج إلى استخدامها في برنامج آخر. الخدمة).
لقد لاحظت أنه لا يوجد شيء تقريبًا عن جرعة القارورة باللغة الروسية ، لكنني أعتقد أن هذا الإطار قد يبدو مثيرًا للاهتمام بالنسبة للبعض.
بدلاً من مقالة مراجعة بسيطة حول هذا الإطار ، قررت أن أكتب العديد من المقالات حول إنشاء نظام تحكم لمكتبة Furfur استنادًا إلى Flask-Potion.
يجب أن يكون هذا النظام قادراً على القيام بما يلي:
- تخزين معلومات حول الكتب (isbn ، العنوان ، الوصف ، المؤلف ، إلخ.)
- تخزين معلومات المستخدم (القراء وأمناء المكتبات)
- إصدار كتاب من المكتبة لفترة معينة مع إمكانية التمديد
في هذا النظام ، سوف نستخدم الأدوات التالية:
- كيو
- قارورة ، قارورة- SQLAlchemy ، قارورة- JWT ، قارورة جرعة ، قارورة- ترحيل
تدريب
هيكل عظمي
من أجل عدم جمع الهيكل العظمي للمشروع بأنفسنا ، سوف نستخدم قالب Valefor cookiecutter ، والذي يشمل جميع التبعيات المذكورة أعلاه وأكثر من ذلك.
cookiecutter gh:lemegetonx/valefor
يتضمن هذا القالب تطبيقين:
- التطبيق هو الشيء الرئيسي. أنه يحتوي على وظائف معالج jwt ، فصول mixin للموارد جرعة ونماذج sqlalchemy ، وكذلك حزمة مع تكوينات للتطبيق.
- المستخدم - في بداية القالب ، يحتوي فقط على طراز المستخدم.
تركيب التبعية
يستخدم القالب الشعر لحل التبعيات ، ولكن النقطة الأخيرة تدعم أيضًا pyproject.toml ، وبالتالي فإن الخيار لك. سأستفيد من الشعر.
poetry install
ترتيب
لتكوين مبسط ، يستخدم القالب مكتبة sitri. سنحتاج إلى تعديل إعداد كائن Sitri قليلاً.
- تغيير التطبيق / config / provider.py . سنستبدل SystemCredentialProvider بـ YamlCredentialProvider بحيث يتم أخذ بيانات التخويل الخاصة بأنظمة الجهات الخارجية من ملف credential.yaml ، والذي لن نضيفه إلى الإلتزامات:
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"), )
ملاحظة: ملاحظة حول ما يحدث فعليًا هنا أسهل في القراءة في الوثائق ، ولكن باختصار ، لقد حددنا الآن من أين سنحصل على بيانات التكوين والتخويل.
- نظرًا لأننا قدمنا أساسًا نفس موفري الخدمة ، فمن الأفضل استبدال الشُرَط السفلية في المفاتيح في استدعاء get_credential بنقاط في 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)
لذلك ، كان ملف config.yaml موجودًا بالفعل في القالب ، ولكن يجب أن تكون مكتوبة من قبل credential.yaml . في الحياة الواقعية ، تتم إضافة هذه الملفات بالضرورة إلى .gitignore ، لكنني سأضيف قالب بيانات الاعتماد إلى المستودع بحيث يكون هيكله مفهومًا لأي شخص يذهب إلى المشروع.
قاعدة بيانات الاعتماد.
db: name: furfur_db host: localhost port: 5432 user: password: passwd name: admin
قاعدة بيانات
المرحلة التالية من إعدادنا هي نشر نظام إدارة قواعد البيانات ، في هذه الحالة PostgreSQL. للراحة ، سأقوم بإنشاء ملف stack.yaml حيث سأصف إطلاق حاوية postgres بالبيانات التي نحتاج إليها.
version: '3.1' services: db: image: postgres restart: always environment: POSTGRES_PASSWORD: passwd POSTGRES_USER: admin POSTGRES_DB: furfur_db ports: - 5432:5432
كما ذكرنا سابقًا ، يتضمن القالب valefor نموذج المستخدم الأساسي اللازم لتشغيل JWT (معالجات) ، وبالتالي فإن الخطوة الأخيرة في إعداد قاعدة البيانات هي الترحيل (إنشاء جدول مستخدم).
في جذر المشروع ، نقوم بتنفيذ الأوامر التالية:
export FLASK_APP=furfur.app flask db init flask db migrate flask db upgrade
كل شيء ، مع إعداد قاعدة البيانات ، وكذلك الأساس العام لنظامنا ، لقد انتهينا.
ما التالي؟
في الجزء التالي ، سنتحدث عن كيفية تنظيم نظام دور بسيط ومصادقة JWT.
مستودع المشروع: https://github.com/Egnod/furfur
كل ما هو مذكور في هذا الجزء: https://github.com/Egnod/furfur/releases/tag/0.0.2