نظام التحكم في المكتبة على Flask-Potion ، الجزء 0: إعداد كل ما تحتاجه

مقدمة


في عملي ، كنت أستخدم Flask-Potion لبعض الوقت الآن ، وهو إطار تتمثل مزاياه الرئيسية في: التكامل المريح للغاية مع نماذج SQLAlchemy ، وتوليد نقاط النهاية التلقائي الخام ، ووجود عميل جرعة (مناسب للغاية إذا كتبت خدمة API ستحتاج إلى استخدامها في برنامج آخر. الخدمة).


لقد لاحظت أنه لا يوجد شيء تقريبًا عن جرعة القارورة باللغة الروسية ، لكنني أعتقد أن هذا الإطار قد يبدو مثيرًا للاهتمام بالنسبة للبعض.


بدلاً من مقالة مراجعة بسيطة حول هذا الإطار ، قررت أن أكتب العديد من المقالات حول إنشاء نظام تحكم لمكتبة Furfur استنادًا إلى Flask-Potion.


يجب أن يكون هذا النظام قادراً على القيام بما يلي:


  • تخزين معلومات حول الكتب (isbn ، العنوان ، الوصف ، المؤلف ، إلخ.)
  • تخزين معلومات المستخدم (القراء وأمناء المكتبات)
  • إصدار كتاب من المكتبة لفترة معينة مع إمكانية التمديد

في هذا النظام ، سوف نستخدم الأدوات التالية:


  • كيو
  • قارورة ، قارورة- SQLAlchemy ، قارورة- JWT ، قارورة جرعة ، قارورة- ترحيل

تدريب


هيكل عظمي


من أجل عدم جمع الهيكل العظمي للمشروع بأنفسنا ، سوف نستخدم قالب Valefor cookiecutter ، والذي يشمل جميع التبعيات المذكورة أعلاه وأكثر من ذلك.


cookiecutter gh:lemegetonx/valefor 

يتضمن هذا القالب تطبيقين:


  1. التطبيق هو الشيء الرئيسي. أنه يحتوي على وظائف معالج jwt ، فصول mixin للموارد جرعة ونماذج sqlalchemy ، وكذلك حزمة مع تكوينات للتطبيق.
  2. المستخدم - في بداية القالب ، يحتوي فقط على طراز المستخدم.

تركيب التبعية


يستخدم القالب الشعر لحل التبعيات ، ولكن النقطة الأخيرة تدعم أيضًا pyproject.toml ، وبالتالي فإن الخيار لك. سأستفيد من الشعر.


 poetry install 

ترتيب


لتكوين مبسط ، يستخدم القالب مكتبة sitri. سنحتاج إلى تعديل إعداد كائن Sitri قليلاً.


  1. تغيير التطبيق / 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"), ) 

ملاحظة: ملاحظة حول ما يحدث فعليًا هنا أسهل في القراءة في الوثائق ، ولكن باختصار ، لقد حددنا الآن من أين سنحصل على بيانات التكوين والتخويل.


  1. نظرًا لأننا قدمنا ​​أساسًا نفس موفري الخدمة ، فمن الأفضل استبدال الشُرَط السفلية في المفاتيح في استدعاء 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

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


All Articles