ملاحظة: لا يزال قيد التطوير!
الإصدار الحالي: 0.0.0
بيتا
لا يزال Flask-BDA قيد التطوير الأولي ويتم اختباره باستخدام إصدار Python 3.8.6.
خريطة الطريق الحالية وخطة المشروع رفيعة المستوى: https://trello.com/b/uu4HNPBh/flask-bda-features-roadmap
سوف يتبع Flask-BDA الإصدار الدلالي لإصداراته، مع مخطط {major}.{minor}.{patch}
لأرقام الإصدارات، حيث:
سيتم الاحتفاظ بحالات الإيقاف في مكانها لثلاثة إصدارات ثانوية على الأقل، بعد الإصدار 0.0.1
حلول أخرى مثل Tableau وPower BI وAmazon QuickSight، على الرغم من أنها أدوات رائعة، إلا أنها تركز على إعداد التقارير ولكنها لا تسمح لك بتحرير البيانات أو إضافتها إلى الأنظمة الأساسية عند الحاجة، مما يعني أنك تحتاج إلى حلول أو برامج إضافية لتحقيق أهداف عملك
يمكن للجميع الوصول إلى حلول مثل Excel وتمنحك كل المرونة التي قد تحتاجها. ومع ذلك، فإن بياناتك متناثرة ولا تسمح بسهولة بمصدر مشترك للحقيقة لفريقك وعملائك، ومن السهل جدًا أن تكون مستندات Excel غير متزامنة أو حتى مشتركة، مما يعرض شركتك لمخاطر أمنية.
يساعدك Flask-BDA من خلال تزويدك بالتحكم لتقديم تطبيقات سريعة وآمنة ومتكاملة أسرع بمقدار 2-5 مرات (2-5 مرات). مع عدم وجود بائع أو بيئة مغلقة على الإطلاق.
Flask عبارة عن "إطار عمل صغير" مفتوح المصدر كتبه Armin Ronacher والذي يسمح لك ببناء تطبيقات الويب في Python. يوفر شحن مجموعة أساسية صغيرة فقط من الميزات قاعدة قابلة للتوسيع تسمح للمطورين باختيار الأدوات الإضافية التي سيحتاجونها لتطبيقاتهم.
على الرغم من تسميته بإطار عمل صغير، إلا أن Flask مناسب تمامًا لبناء تطبيقات الويب الصغيرة والكبيرة. تم استخدام Flask في أنظمة الإنتاج من قبل شركات كبيرة مثل Twilio وPinterest وLyft وLinkedIn وUber.
يساعدك Flask-BDA على التطوير بشكل أسرع من خلال تزويدك ببنية تطبيق القارورة الموجودة مسبقًا والتي تسمح لك بما يلي:
التعامل تلقائيًا مع الجوانب المملة التي تؤدي إلى إبطاء تطوير البرامج
- إنشاء وإدارة جميع اتصالات قاعدة البيانات والاستعلامات المعقدة.
- أمان التطبيق من خلال التحكم في الوصول المستند إلى المستخدم والدور
- عمليات التدقيق التلقائي على كل إجراء
Flask-BDA عبارة عن منصة منخفضة التعليمات البرمجية (بمعنى أننا سنساعدك من خلال كتابة الكثير من التعليمات البرمجية لك) توفر الأدوات للشركات لتطوير ونشر التطبيقات الآمنة التي تعمل على أي جهاز بسرعة.
نحن نغير الطريقة التي يتم بها إنشاء البرامج حتى تتمكن من إنشاء ونشر التطبيقات الهامة بسرعة من أي حجم والتي تتطور مع عملك مما يوفر لك الوقت والمال.
يمكن للمطورين إنشاء ونشر مجموعة كاملة من التطبيقات - بدءًا من تطبيقات المستهلك وحتى أنظمة الأعمال الداخلية المهمة - المصممة لمساعدة المطورين على تقديم تطبيقات آمنة بسرعة وكفاءة، بحيث يتم تسليم التطبيقات في أسابيع وحتى أيام.
يوفر Flask-BDA تطويرًا كاملاً من؛ واجهة المستخدم والعمليات التجارية والمنطق المخصص ونماذج البيانات لإنشاء تطبيقات متعددة الأنظمة الأساسية خارج الصندوق. تزويدك بسقالة يمكنك إضافة الكود المخصص الخاص بك عند الحاجة. مع عدم وجود قفل على الإطلاق.
من خلال بيئات التطوير التي تم تكوينها مسبقًا، نقوم بتقليل المعاناة (والتكلفة) للوصول إلى السوق، مما يتيح لك المرونة في اختيار مكان وكيفية النشر.
Flask-BDA مجاني وصديق للمطورين، وهو أداة مجانية لتطوير التطبيقات ومتاحة المصدر مع ترخيص صديق للمطورين.
Flask-BDA مجاني تمامًا للاستخدام في المشاريع التجارية والشخصية.
ومع ذلك، فإن تطوير البرمجيات دائمًا ما يكون عملية مكلفة:
- ستحتاج إلى الدفع لواحد أو أكثر من مطوري البرامج ومحللي الأعمال والمصممين ومديري المشاريع وأعضاء الفريق الآخرين لبناء منتجك.
- منتجك لم يكتمل أبدًا. سيحتاج مشروع البرنامج دائمًا إلى التطوير المستمر.
- عندما تقوم بتسليم منتج ما، فإن منافسيك يعملون بالفعل على ميزات جديدة ومحسنة، ويجب أن تكون قادرًا على البقاء في المقدمة أو على الأقل مواكبة ذلك، وإلا سينتقل المستخدمون إلى منافسيك.
- بمجرد البدء في استخدام منتجك، ستفكر أنت وفريقك في ميزات جديدة ستجعله أفضل وتحسن عملياتك.
- الصيانة المستمرة. أثناء استخدام المستخدمين للمنتج، سيجدون طرقًا لكسره لم تفكر بها من قبل، ويجب إصلاحها.
حجم المشروع | التكلفة الأولية | التكلفة المستمرة |
---|---|---|
المشاريع الصغيرة (2 - 6 أسابيع من التطوير) | 11250 دولار | 563 دولارًا - 1125 دولارًا (±10%) / شهريًا |
مشاريع متوسطة الحجم (2 - 4 أشهر من التطوير) | 33750 دولارًا | 1563 دولارًا أمريكيًا - 3375 دولارًا أمريكيًا (±10%) / شهريًا |
مشاريع كبيرة الحجم (من 6 إلى 18 شهرًا أو أكثر من التطوير) | 156250 دولارًا | 3375 دولارًا - 15625 دولارًا (±10%) / شهريًا |
حجم المشروع | التكلفة الأولية | التكلفة المستمرة |
---|---|---|
المشاريع الصغيرة (1 - 3 أسابيع من التطوير) | 3750 دولارًا | 188 دولارًا - 375 دولارًا (±10%) / شهريًا |
مشاريع متوسطة الحجم (1 - 3 أشهر من التطوير) | 11250 دولار | 375 دولارًا - 1125 دولارًا (±10%) / شهريًا |
مشاريع كبيرة الحجم (من 2 إلى 6 أشهر أو أكثر من التطوير) | 52084 دولارًا | 1125 دولارًا أمريكيًا - 5208 دولارًا أمريكيًا (±10%) / شهريًا |
مع Flask-BDA، لن تفقد أيًا من مرونة "التطوير العادي" لأنه يستخدم أنماط تطوير موحدة وتقنيات مجربة ومختبرة.
يستخدم Flask-BDA العديد من التقنيات مفتوحة المصدر ويستفيد من مجموعات التكنولوجيا الحالية بحيث يمكنك بسهولة العثور على مطورين آخرين يستخدمون نفس التقنيات. ونتيجة لذلك، لا يتعين عليك دفع رسوم الترخيص الباهظة أو تكاليف البيئة بغض النظر عن مقدار الإيرادات التي تحققها شركتك أو مكان وجودك في عملك.
ابدأ عملك ببيئة تطوير سريعة وسهلة تم تكوينها مسبقًا في دقائق.
لا يتطلب أي إعداد معقد. مطلوب فقط لغة بايثون (المقترح 3.8.6).
قم بتحديث التكوينات الخاصة بك: اتصالات قاعدة البيانات وإعدادات التطبيق.
قم بإنشاء الوحدات النمطية وهياكل البيانات الخاصة بك (نموذج البيانات) مما يسمح لك باستخدام قواعد بيانات مختلفة.
تم إنشاؤها تلقائيًا بكامل طاقتها:
- صفحات
Admin
Mobile
REST APIs
مع واجهة Swagger الأماميةGraphQL API
مع واجهة GraphiQL الأمامية يمكن إدارتها بسهولة لكل وحدة.
قم بتكوين الصفحات وفقًا لاحتياجاتك المحددة وشاركها بسهولة مع فريقك وعملائك.
اكتب التعليمات البرمجية المخصصة الخاصة بك في وحدة نمطية معزولة، حتى لا تؤثر على الوحدات الأخرى،
دمج الوحدات بسهولة عبر المشاريع المختلفة.
استخدم نفس قاعدة التعليمات البرمجية للنشر إلى:
- سطح المكتب
- ويب
- متحرك
البيئات تشمل:
- عامل ميناء
- AWS بدون خادم
- المحيط الرقمي
- هيروكو
- استضافة مشتركة.
pip
(يجب تثبيت النقطة بالفعل لأنها تأتي مع أحدث إصدارات python) وفي حالة عدم تثبيتها، يرجى تثبيتها من هنا: https://pip.pypa.io/en/stable/installing/python -m pip --version
ملاحظة: تفترض هذه الوثائق أنك تقوم بتشغيل
pip3
كـpip
، حيث أن كافة التعليمات مكتوبة بـpip
. إذا كنت ترغب في تشغيلpip3
عند الاتصالpip
، من جهازك الطرفي، يمكنك إنشاء رابط رمزي إلىpip3
منpip
:
pip install --upgrade pip
sudo
على سبيل المثال: sudo pip install --upgrade pip
nano ~ /.bash_profile
في الملف، الصق ما يلي:
alias pip= ' pip3 '
alias python= ' python3 '
ملاحظة: قد تحتاج إلى إزالة python 2.7 على نظام MacOS لأنه مثبت مسبقًا على توزيعاتي، وكان هذا مفيدًا جدًا لتحقيق ذلك:
sudo rm -rf /Library/Frameworks/Python.framework/Versions/2.7
sudo rm -rf " /Applications/Python 2.7 "
ls -l /usr/local/bin | grep ' ../Library/Frameworks/Python.framework/Versions/2.7 '
ثم قم بتشغيل الأمر التالي لإزالة كافة الروابط:
cd /usr/local/bin/
ls -l /usr/local/bin | grep ' ../Library/Frameworks/Python.framework/Versions/2.7 ' | awk ' {print $9} ' | tr -d @ | xargs rm
بمجرد تثبيت Python و
pip
، ستحتاج إلى تثبيت تبعية لوظائف سطر أوامر Flask-BDA لتعمل بشكل صحيح:
pip install click
تتضمن التبعيات الأخرى التي قد ترغب في تثبيتها عالميًا (ولكن يجب تشغيلها تلقائيًا عند إنشاء مشروع) ما يلي:
pip install virtualenv
pip install flaskwebgui
pip install pyinstaller
للبدء في إنشاء مشروعك الأول باستخدام Flask-BDA، اتبع الخطوات البسيطة أدناه لإنشاء بيئة التطوير الخاصة بك والتي تم تكوينها مسبقًا وتشغيلها خلال دقائق.
في هذه البداية السريعة، سنقوم بإنشاء مشروع يسمى
"My Awesome Project"
. ومع ذلك، يمكنك استدعاء المشروع أي شيء تريده.
create_project.py
المطلوب وتشغيله لمساعدتك في بدء المشروع"My Awesome Project"
curl -L https://raw.githubusercontent.com/RyanJulyan/Flask-BDA/main/create_project_git.py --ssl-no-revok -o create_project_git.py
python create_project_git.py --project= " My Awesome Project "
create_project.py
المطلوب وتشغيله لمساعدتك في بدء المشروع"My Awesome Project"
curl -L https://raw.githubusercontent.com/RyanJulyan/Flask-BDA/main/create_project_git.py --ssl-no-revok -o create_project_git.py
python create_project_git.py --project= " My Awesome Project "
ملاحظة: إذا لم تقم بملء اسم مشروع صالح، فستتم مطالبتك بذلك:
- املأ اسم مشروعك عندما يُطلب منك ذلك، على سبيل المثال:
- الرجاء التأكد من وضع علامات الاقتباس حول اسم المشروع الخاص بك لمنع الأخطاء، على سبيل المثال:
"My Awesome Project"
Invalid Project Name !
Please enter a valid project name :
"My Awesome Project"
ملاحظة: ستلاحظ أن هذا يؤدي إلى إنشاء مجلد في نفس مسار الملف: "create_project_git.py". سيكون هذا المجلد بأحرف صغيرة وسيقوم بإزالة جميع الأحرف الخاصة واستبدال المسافات بشرطات سفلية، على سبيل المثال:
my_awesome_project
ملاحظة: أثناء التطوير، قد ترغب في استخدام فرع آخر أو الريبو بالكامل. يمكن أن يساعد هذا في الاختبار أو إذا انفصلت عن مشروع Flask-BDA الأساسي.
- يمكنك تحديد
Owner
Repo
Branch
عند إنشاء مشروع جديد.
curl - L https : // raw . githubusercontent . com / RyanJulyan / Flask - BDA / RyanJulyan - Dev / create_project_git . py - - ssl - no - revok - o create_project_git . py
python create_project_git . py - - project = "My Awesome Project" - - owner = "RyanJulyan" - - repo = "Flask-BDA" - - branch = "RyanJulyan-Dev" - - create_venv = True
ملحوظة: لا يزال يتعين اختباره لجميع أنواع الاتصال!
اتصالات قاعدة البيانات سريعة وسهلة في Flask-BDA. يمكن أن يكون لديك قاعدة بيانات واحدة أو عدة قواعد بيانات، ويمكن أن يكون لدى المستأجرين المختلفين اتصالات قاعدة البيانات الخاصة بهم بالإضافة إلى نوع قاعدة البيانات الخاصة بهم (SQLite، وMySQL، وSQL Server، وPostgreSQL)
بشكل افتراضي، يحتوي Flask-BDA على قاعدة بيانات SQLite. هذا حقًا لأنك لا تحتاج إلى بنية تحتية إضافية لإعداده والبدء فيه، مما يجعل SQLite خيارًا سريعًا وسهلاً.
لتغيير قاعدة البيانات الافتراضية:
flaskbda
) والمستخدم ( flaskbda_user
) وكلمة المرور ( password
)config.py
DATABASE_ENGINE
لـ SQLite، وقم بالتعليق في mysql DATABASE_ENGINE
.DATABASE_NAME
لـ SQLite، وقم بالتعليق في الخلية:DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
SQLALCHEMY_DATABASE_URI
لـ SQLite، وقم بالتعليق في mysql SQLALCHEMY_DATABASE_URI
. ##########
# SQLite #
##########
# DATABASE_ENGINE = 'sqlite:///'
# DATABASE_NAME = os.path.join(BASE_DIR, 'databases/sqlite/default.db')
# SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_NAME
#########
# MySQL #
#########
DATABASE_ENGINE = 'mysql://'
DATABASE_HOST = ''
DATABASE_PORT = '1433'
DATABASE_USERNAME = ''
DATABASE_PASSWORD = ''
DATABASE_NAME = ''
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME
DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
DATABASE_HOST = 'localhost'
DATABASE_PORT = '3306'
DATABASE_USERNAME = 'flaskbda_user'
DATABASE_PASSWORD = 'password'
DATABASE_NAME = 'flaskbda'
لتغيير قاعدة البيانات الافتراضية:
flaskbda
) والمستخدم ( flaskbda_user
) وكلمة المرور ( password
)config.py
import pyodbc
.DATABASE_DRIVER
.DATABASE_ENGINE
لـ SQLite، وعلى سبيل المثال قم بالتعليق في SQLServer DATABASE_ENGINE
.DATABASE_NAME
لـ SQLite، وقم بالتعليق في SQLServer:DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
SQLALCHEMY_DATABASE_URI
لـ SQLite، وقم بالتعليق في try
except
SQLServer SQLALCHEMY_DATABASE_URI
.ملاحظة: إذا كنت تقوم بتشغيل وتحاول الاتصال بـ
SQLEXPRESS
. الرجاء إلغاء التعليق على متغير SQLServerSQLEXPRESS
. سيتم التعامل مع هذا فيtry
except
إنشاءSQLALCHEMY_DATABASE_URI
الصحيح
ملاحظة: إذا كنت تريد مصادقة Windows. الرجاء إلغاء التعليق على متغير SQLServer
TRUSTED_CONNECTION
. سيتم التعامل مع هذا فيtry
except
إنشاءSQLALCHEMY_DATABASE_URI
الصحيح
##########
# SQLite #
##########
# DATABASE_ENGINE = 'sqlite:///'
# DATABASE_NAME = os.path.join(BASE_DIR, 'databases/sqlite/default.db')
# SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_NAME
#############
# SQLServer #
#############
import pyodbc # noqa: E402
DATABASE_ENGINE = 'mssql+pyodbc://'
# SQLEXPRESS = '\SQLEXPRESS' # for SQLEXPRESS
# TRUSTED_CONNECTION = 'yes' # for windows authentication.
DATABASE_DRIVER = 'SQL+Server+Native+Client+11.0' # for windows authentication.
DATABASE_HOST = ''
DATABASE_PORT = '1433'
DATABASE_USERNAME = ''
DATABASE_PASSWORD = ''
DATABASE_NAME = ''
try :
if SQLEXPRESS == ' \ SQLEXPRESS' :
try :
if TRUSTED_CONNECTION == 'yes' :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '?trusted_connection=' + TRUSTED_CONNECTION + '&driver=' + DATABASE_DRIVER
else :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
try :
if TRUSTED_CONNECTION == 'yes' :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME + '?trusted_connection=' + TRUSTED_CONNECTION + '&driver=' + DATABASE_DRIVER
else :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
DATABASE_HOST = 'MSSQLSERVER'
DATABASE_PORT = '1433'
DATABASE_USERNAME = 'flaskbda_user'
DATABASE_PASSWORD = 'password'
DATABASE_NAME = 'flaskbda'
تأكد من أن مثيل MS-SQL الخاص بك لديه حقوق الاتصال عن بعد التي تم إعدادها وتمكينها (هنا)[https://knowledgebase.apexsql.com/configure-remote-access-connect-remote-sql-server-instance-apexsql-tools/ ]:
تأكد من تكوين إعدادات "إدارة تكوين خادم SQL" بشكل صحيح
ملاحظة: سيتطلب التثبيت الخاص بك
Client Tools Connectivity
، إذا لم تتمكن من العثور على "إدارة تكوين خادم SQL"، فقد تحتاج إلى تعديل التثبيت الخاص بك ليشملClient Tools Connectivity
- إذا لم تتمكن من العثور على "" فقد تحتاج إلى استخدام أداة "استخدام إدارة الكمبيوتر" بدلاً من ذلك. للوصول إليه.
- يبدو أن هذه مشكلة في نظام التشغيل Windows 10
Multitenancy عبارة عن بنية برمجية يتم فيها تشغيل نسخة واحدة من البرنامج على خادم وتخدم العديد من المستأجرين (العملاء). يتيح برنامج Multitenant تشغيل مثيلات مستقلة متعددة لتطبيق واحد أو عدة تطبيقات في بيئة مشتركة.
يدعم Flask-BDA تعدد الإيجارات المقسمة بشكل صحيح. التقسيم العمودي يعني أن كل مستأجر لديه قاعدة بيانات مختلفة (وسلسلة اتصال قاعدة البيانات).
بشكل افتراضي، يتصل Flask-BDA بمستأجر يسمى
default
. يتم ذلك باستخدام كائنSQLALCHEMY_BINDS
(الموجود فيconfig.py
)، والذي يجب أن يحتوي على تفاصيل الاتصال المحددة التي تحتاجها لكل مستأجر. يتم دمج تفاصيل الاتصال الافتراضية في سلسلة تسمىSQLALCHEMY_DATABASE_URI
، والتي كانت تهدف إلى السماح بإعداد مستأجر واحد سريع وسهل.
يمكنك استخدام نفس البنية، ومع ذلك، للحصول على عدة مستأجرين، يمكنك إضافتهم بسرعة إلى كائن
SQLALCHEMY_BINDS
. لإضافة مستأجر جديد، ببساطة:
SQLALCHEMY_BINDS
، مع اسم المستأجر وتفاصيل سلسلة الاتصال SQLALCHEMY_BINDS = {
"default" : SQLALCHEMY_DATABASE_URI ,
"client1" : 'sqlite:///databases/sqlite/client1.db' ,
}
يمكنك الآن التفاعل مع قاعدة بيانات مستأجرين معزولة عن طريق إضافة الوسيطة
organization=
إلى عنوان URL الخاص بك، على سبيل المثال:example.com?organization=client1
حيثclient1
هو الاسم الذي قمت بإضافته في كائنSQLALCHEMY_BINDS
.
يعمل هذا عن طريق اعتراض
@app.before_request
فيapp/_init_.py
وتغيير ربط محرك قاعدة البيانات باستخدامdb.choose_tenant(g.organization)
منapp/mod_tenancy/multi_tenant.py
باستخدام المتغير العامg.organization
الذي يحصل على تم تعيينه عن طريق جلبorganization
وسيطة URL. يسمح هذا باستخدام نفس الرمز الموجود في التطبيق بواسطة قاعدة بيانات كل مستأجر مع الحفاظ على فصل البيانات.
في بعض الأحيان تحتاج إلى التفاعل مع قواعد بيانات مختلفة في وظيفة واحدة (خاصة عند دمج الأنظمة، أو قراءة البيانات من مصادر مختلفة).
بشكل افتراضي، سيتم استيراد
MultiBindSQLAlchemy
لجميع وحدات التحكم.
# import multiple bindings
from app . mod_tenancy . multi_bind import MultiBindSQLAlchemy
يوجد ضمن الاستيراد رمز تم التعليق عليه يهدف إلى مساعدتك في التنفيذ السريع للارتباط بقواعد بيانات مختلفة في وظيفة واحدة. أولاً، يجب إضافة ربط قاعدة البيانات إلى كائن
SQLALCHEMY_BINDS
. قم بالرجوع إلى قواعد البيانات المعزولة بنفس الوظيفة لفهم كيفية إضافة قواعد بيانات جديدة إلى كائنSQLALCHEMY_BINDS
بشكل أفضل.
يمكنك بعد ذلك إنشاء كائن جديد مرتبط بكائن
db
متبعًا هيكلdb.<binding>
على سبيل المثال:db.first
حيث يكونfirst
هو الاسم الذي تريد الرجوع إليه للربط في بقية التعليمات البرمجية. يمكنك بعد ذلك تعيين هذا المتغير إلىMultiBindSQLAlchemy
، على سبيل المثال:db.first = MultiBindSQLAlchemy('first')
.
يتيح لك هذا الآن استدعاء تعليمات برمجية مخصصة تسمح لك بالوصول إلى ربط قاعدة البيانات الجديدة بالإضافة إلى المستأجر الرئيسي في وظيفة واحدة، على سبيل المثال:
db.first.execute(...)
حيث يمكنك تنفيذ تعليمات SQL البرمجية الأولية.
db . first = MultiBindSQLAlchemy ( 'first' )
##################################################
## this will only work for the execute function ##
##################################################
db . first . execute (...)
**ملاحظة: ** سيعمل هذا فقط مع وظيفة
execute
، وهناك بعض التقنيات المتقدمة للاستمرار في استخدام SQLAlchemy ORM والتي يمكن العثور عليها هنا: البرنامج التعليمي لتنفيذ SQLAlchemy
الوحدة هي مكون قائم بذاته، مما يسهل إدارته مع نمو البرنامج. تساعدك الوحدات النمطية الموجودة في Flask-BDA على إنشاء: نموذج البيانات والمسارات والوظائف المرتبطة بها للتحكم في المنطق وطرق العرض.
عندما تقوم بإنشاء وحدة CRUD جديدة، يتم نسخ جميع العناصر من المجلد
create_module_template
إلى دليل التطبيق وإعادة تسميتها إلى اسم الوحدة التي تقدمها عن طريق استبدال جميع قيمxyz
باسم الوحدة الخاصة بك وإضافة معلومات نموذج بيانات إضافية كما هو موضح أدناه
<Path To>/<my_awesome_project>/create_module_json.py
<Path To>/<my_awesome_project>/
هو المسار إلى المشروع الذي قمت بإنشائه cd < Path To > / < my_awesome_project > /
python create_module_json . py - - module = Projects
Create new field Name (type the string : 'STOP_CREATING_FIELDS' to exit ): "name"
What datatype is name
Choose one of the following options
( 'String'
, 'Int'
, 'Float'
, 'Numeric'
, 'Text'
, 'Date'
, 'DateTime'
, 'Boolean'
, 'BigInt'
, 'Enum'
, 'JSON'
, 'LargeBinary' ): "String"
String Length ( 1 - 256 ): 256
Is name nullable ( 'True' , 'False' ): False
Is name unique ( 'True' , 'False' ): True
Does the name have a Relationship with another Data Model ? ( 'True' , 'False' ): False
Default value :
ملاحظة: سيستمر هذا في التكرار حتى تكتب الكلمات نفسها وترسلها: "STOP_CREATING_FIELDS".
يتيح لك ذلك إنشاء حقول متعددة لوحدتك بسرعة وسهولة.
يجب أن تظهر الحقول المذكورة أعلاه أن لديك أنواعًا مختلفة من الحقول تتفاعل وتنشئ حقولًا متعددة.
ملاحظة: سيتم دائمًا إجراء العلاقات على
id
النموذج المقدم.يتم إنشاء مفتاح خارجي في الحقل، بالإضافة إلى علاقة بطيئة بين حقل
id
المقدم للنموذج
Create new field Name (type the string : 'STOP_CREATING_FIELDS' to exit ): STOP_CREATING_FIELDS
Create module logic from Data Model ? ( 'True' , 'False' ): True
ملاحظة: يمكنك أيضًا إنشاء وحدة نمطية من ملف JSON في "app/generated_config/models//models.json"، حيث يوجد اسم الوحدة النمطية التي تدخلها للقيام بذلك، افتح الملف وقم بتشغيله:
<Path To>/<my_awesome_project>/create_module.py
* حيث<Path To>/<my_awesome_project>/
هو المسار إلى المشروع الذي قمت بإنشائه * املأ التعليمات على سبيل المثال:
cd < Path To > / < my_awesome_project > /
python create_module . py - - module = projects
سيؤدي هذا بعد ذلك إلى إنشاء الملفات والمجلدات المطلوبة كما هو موضح أدناه في تغييرات التطبيق
يتم إنشاء الملفات والمجلدات من المجلد
create_module_template
لوحدةProjects
ثم يتم إضافتها إلى مجلدapp
سيؤدي هذا إلى إنشاء عروض CRUD للمشرف، وواجهة برمجة تطبيقات REST (مع إدراج وتحديث مجمع)، وواجهة برمجة تطبيقات GraphQL، وطرق عرض ومنطق عامة للسماح لك بالتفاعل الفوري مع الوحدة التي أنشأتها.
من لوحة الإدارة، ستتمكن من تنفيذ الإجراءات التالية: إنشاء وقراءة وتحديث وحذف ("CRUD") لوحدتك الجديدة.
تسمح طرق العرض العامة للمستخدمين الضيوف (المستخدمين الذين لم يقوموا بتسجيل الدخول) برؤية عرض للمعلومات المقدمة
└── `my_awesome_project`
└── app
├── generated_config
│ └── models
│ └── `projects`
│ └── models.json
└── `mod_projects`
├── templates
│ ├── mobile
│ │ └── `projects`
│ │ ├── admin
│ │ │ ├── create.html
│ │ │ ├── edit.html
│ │ │ ├── index.html
│ │ │ └── show.html
│ │ └── public
│ │ └── public_list.html
│ └── `projects`
│ ├── admin
│ │ ├── create.html
│ │ ├── edit.html
│ │ ├── index.html
│ │ └── show.html
│ └── public
│ └── public_list.html
├── api_controllers.py
├── controllers.py
├── forms.py
├── models.py
└── types.py
سيوفر لك إنشاء وحدة نمطية جديدة ثلاث طرق للتفاعل مع نظامك الجديد
Public
وAdmin
وREST API
وGraphQL API
.
للوصول إلى هذه العناصر، سيتطلبون تشغيل التطبيق على بيئة ما.
العرض
Public
هو عرض غير مصادق عليه للبيانات المتوفرة في الوحدة.
xyz
هو اسم الوحدة):../xyz/
public_list
تعد طرق عرض
Admin
طريقة عرض موثقة للبيانات المتوفرة في الوحدة.
xyz
هو اسم الوحدة):../admin/xyz/
index
../admin/xyz/create
create
../admin/xyz/store
store
../admin/xyz/show/{id}
show
../admin/xyz/edit/{id}
edit
../admin/xyz/update/{id}
update
../admin/xyz/destroy/{id}
destroy
طرق عرض
API
هي قائمة بنقاط نهاية REST API والوثائق المرتبطة وملعب التنفيذ.
يستخدم Flask BDA SwaggerUI لتقديم REST API إلى مستخدم/عميل.
يسمح SwaggerUI لأي شخص - سواء كان فريق التطوير لديك أو المستهلكين النهائيين - بتصور موارد واجهة برمجة التطبيقات (API) والتفاعل معها دون وجود أي منطق للتنفيذ. وبدلاً من ذلك، يتم إنشاؤه تلقائيًا من مواصفات OpenAPI (المعروفة سابقًا باسم Swagger)، مع التوثيق المرئي الذي يسهل التنفيذ الخلفي والاستهلاك من جانب العميل.
للوصول إلى SwaggerUI:
<base_URL>/api/docs
للوصول إلى SwaggerUI REST API، على سبيل المثال: http://localhost:5000/api/docs
.للوصول إلى REST API بدون SwaggerUI:
<base_URL>/
../api/xyz
XyzListResource
> get
../api/xyz
XyzListResource
> post
../api/xyz/{id}
XyzResource
> get
../api/xyz/{id}
XyzResource
> update
../api/xyz/{id}
XyzResource
> delete
../api/xyz/bulk
XyzBulkListResource
> post
../api/xyz/bulk
XyzBulkListResource
> update
../api/xyz/aggregate
XyzAggregateResource
> get
طرق عرض
graphql
هي طرق عرض GraphiQL ونقاط نهاية API والوثائق المرتبطة وملعب التنفيذ.
يستخدم Flask BDA graphene-python وGraphiQL لتقديم واجهة برمجة تطبيقات GraphQL إلى المستخدم/العميل، مما يوفر واجهة برمجة تطبيقات بسيطة ولكنها قابلة للتوسيع لتسهيل حياة المطورين.
GraphQL هي لغة استعلام بيانات توفر بديلاً لـ REST وبنيات خدمة الويب المخصصة.
للوصول إلى GraphiQL:
<base_URL>/graphql
للوصول إلى GraphiQL وGraphQL API، على سبيل المثال: http://localhost:5000/graphql
.للوصول إلى واجهة برمجة تطبيقات GraphQL بدون GraphiQL:
<base_URL>/
../graphql
mod_graphql
> query
> Query
> all_xyz
../graphql
mod_graphql
> mutation
> Mutation
> createXyz
يوجد حاليًا 7 بيئات جاهزة مدعومة (مع خطط لدعم المزيد قريبًا) مع إرشادات حول كيفية تكوين كل منها لنظام Windows / Linux / Mac
، ويمكنك تشغيلها في نفس الوقت إذا كنت تريد ذلك.
لإنشاء تطبيق محلي وتطويره، نستخدم virtualenv. أداة لإنشاء بيئات بايثون افتراضية معزولة.
pip install --upgrade pip
cd <Path To>/my_awesome_project
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
venv S cripts a ctivate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
set FLASK_APP=app
set FLASK_ENV=development
flask run --port 5000
pip install --upgrade pip
sudo
على سبيل المثال: sudo pip install --upgrade pip
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
export FLASK_APP=app
export FLASK_ENV=development
flask run --port 5000
توفر بعض خدمات الاستضافة المشتركة إمكانية تشغيل تطبيقات بايثون على خوادمها. أنا شخصياً استخدمت A2hosting. لقد كان دعمهم مذهلاً، وسعر الميزات هو أحد أفضل ما صادفته.
ملحوظة: أنت لا تقتصر على A2 كخيار استضافة مشترك. ومع ذلك، هذا هو المكان الذي اختبرت فيه Flask-BDA ولدي خبرتي في تحميل خيار الاستضافة المشتركة وتشغيله. إذا كان خيار الاستضافة المشتركة الخاص بك يوفر مجموعة مماثلة من الميزات، فلا تتردد في استخدامها.
بالنسبة إلى A2، ستحتاج إلى إعداد الخادم الخاص بك لتشغيل تطبيق python والذي قد يتطلب بعض التكوين على سبيل المثال.
لكي يعمل تطبيقك المخصص:
ملحوظة: في بيئة
Linux
لن يعمل متطلبpyodbc
افتراضيًا. ولهذا السبب، ونظرًا لكونك بيئة مشتركة - فقد لا يكون لديك حقوق لإضافة المتطلبات لجعلها تعمل، فإن أسهل طريقة لضمان عدم فشل التثبيت هي التعليق على هذا المطلب على الخادم.
requirements.txt
، وابحث عن pyodbc
ثم ضع #
مع مسافة قبل اسم الحزمة. # pyodbc==4.0.30
requirements.txt
SSH
التي قمت بتسجيل الدخول إليها في الخطوة السابقة pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
Setup Python App
مرة أخرىApplication startup file
إلى run_shared_server.py
لإنشاء تطبيق في حاوية ونشره، نستخدم Docker، الذي يساعد المطورين وفرق التطوير على إنشاء التطبيقات وشحنها. بالإضافة إلى ذلك، يتم استخدام Docker لبناء ومشاركة التطبيقات والخدمات الصغيرة الموجودة في حاويات.
ملاحظة: إذا كنت تستخدم Github وقمت بتثبيت عامل الإرساء (تفاصيل حول كيفية التثبيت لاحقًا في الوثائق)، فستحصل على صورة جديدة تم إنشاؤها في كل مرة تقوم فيها
push
أو إجراءpull_request
على Github، والذي تم إعداده في الملف:docker-image.yml
ولكن إذا كنت تريد القيام بذلك يدويًا، فيرجى اتباع الخطوات التالية:
cd < Path To > /my_awesome_project
docker build -t flask_app:latest .
docker run -p 5000:5000 flask_app
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl start docker
cd < Path To > /my_awesome_project
docker build -t flask_app:latest .
docker run -it -p 5000:5000 flask_app
ملاحظة: لا يزال قيد التطوير
لإنشاء تطبيق بدون خادم ونشره، نستخدم The Serverless Framework، الذي يسمح بالتطوير بدون خادم بدون أي احتكاك، مما يسمح لك بسهولة إنشاء تطبيقات قابلة للتوسع تلقائيًا بتكلفة منخفضة، والبنية التحتية السحابية من الجيل التالي.
إطار العمل بدون خادم هو أداة مفتوحة المصدر توفر سهولة تطوير ونشر YAML + CLI إلى AWS وAzure وGoogle Cloud وKnative والمزيد.
ملاحظة: قد تحتاج إلى ضبط سلاسل قاعدة البيانات الافتراضية قبل del=polying لأن الخادم لا يدعم "SQLite" لأن الوظيفة لا تحتفظ بالحالة.
لتحديث سلاسل قاعدة البيانات، يرجى الرجوع إلى [التكوين]
npm update -g serverless
npm update -g serverless
choco install serverless
ملاحظة: إذا لم يتم تثبيت الحزمة، فقد تحتاج إلى تشغيل الأمر كمسؤول.
اضغط على مفتاح "Windows" ثم اكتب "cmd" ثم "انقر بزر الماوس الأيمن" على كلمة "Command Prompt" وحدد خيار "Run as Administrator" ثم اتبع الخطوات السابقة مرة أخرى
serverless
cd < Path To > /my_awesome_project
sls plugin install -n serverless-python-requirements
sls plugin install -n serverless-wsgi
serverless deploy
curl -o- -L https://slss.io/install | bash
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl start docker
cd < Path To > /my_awesome_project
sls plugin install -n serverless-python-requirements
sls plugin install -n serverless-wsgi
serverless deploy
ملاحظة: لا يزال قيد التطوير
Digital Ocean عبارة عن منصة كخدمة (PaaS). قم بتطوير تطبيقاتك وإدارتها وتوسيع نطاقها على النظام الأساسي السحابي الكامل لـ DigitalOcean. توفر لك Digital Ocean أسعارًا بسيطة ويمكن التنبؤ بها. يمكنك الإنشاء والإصدار بكل ثقة باستخدام منتجات حوسبة قابلة للتطوير في السحابة، وقواعد بيانات مُدارة بالكامل، وخيارات تخزين عالية التوفر وقابلة للتطوير، والمزيد. من خلال الأجهزة الافتراضية التي تحتوي على قدر كبير من الذاكرة المضبوطة لاستضافة التطبيقات وقواعد البيانات وتوسيع نطاقها، تقدم Digital Ocean حلولاً بسيطة للمشكلات المعقدة.
لإنشاء تطبيق ونشره على Heroku من المحطة، ستحتاج إلى:
138.197.67.25
ملاحظة: إذا لم تكن متصلاً عبر SSH، فيجب أن تتلقى
password
عبر البريد الإلكتروني الذي قمت بتسجيل الحساب به، لـ Digital Ocean.
cd < Path To > / < my_awesome_project > /
scp -r < my_awesome_project > root@ < ip_address > :/
ssh root@ < ip_address >
حيث
<Path To>/<my_awesome_project>/
هو المسار إلى المشروع الذي قمت بإنشائه وحيث<ip_address>
هو القطرات <ip_address> على سبيل المثال:138.197.67.25
ملاحظة: اتبع أي مطالبات تعود إليها SSH مثل السماح بالوصول من الخادم البعيد.
بمجرد تسجيل الدخول ، يجب أن تكون قادرًا على رؤية محطة مع:
root@ < droplet_name > :
cd < Path To > / < my_awesome_project > /
chmod +x setup.sh
bash setup.sh
virtualenv venv
source venv/bin/activate
sudo pip install --upgrade pip
sudo pip install --no-cache-dir -r requirements.txt
sudo pip install uwsgi
sudo ufw allow 5000
export FLASK_APP=app
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
حيث
5000
هو رقم المنفذ
و<droplet_name>
هو الاسم
cd < Path To > / < my_awesome_project > /
scp -r < my_awesome_project > root@ < ip_address > :/
ssh root@ < ip_address >
حيث
<Path To>/<my_awesome_project>/
هو المسار إلى المشروع الذي قمت بإنشائه وأين<ip_address>
هو القطرات <ip_address> على سبيل المثال:138.197.67.25
ملاحظة: اتبع أي مطالبات تعود إليها SSH مثل السماح بالوصول من الخادم البعيد.
بمجرد تسجيل الدخول ، يجب أن تكون قادرًا على رؤية محطة مع:
root@ < droplet_name > :
cd < Path To > / < my_awesome_project > /
chmod +x setup.sh
bash setup.sh
virtualenv venv
source venv/bin/activate
sudo pip install --upgrade pip
sudo pip install --no-cache-dir -r requirements.txt
sudo pip install uwsgi
sudo ufw allow 5000
export FLASK_APP=app
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
حيث
5000
هو رقم المنفذ
و<droplet_name>
هو الاسم
ملاحظة: لا يزال قيد التطوير
Heroku هي منصة كخدمة (PAAS). يتيح لك Heroku البدء بالالتزام الصفري ، ودفع كما تذهب بدون قفل. يمكن للمطورين والفرق والشركات من جميع الأحجام استخدام Heroku لنشر التطبيقات وإدارتها وتوسيع نطاقها. سواء كنت تبني نموذجًا أوليًا بسيطًا أو منتجًا مهمًا للأعمال ، فإن منصة Heroku التي تديرها بالكامل تمنحك طريقًا بسيطًا لتقديم التطبيقات بسرعة.
لإنشاء تطبيق ونشره على Heroku من المحطة ، ستحتاج إلى تنزيل وتثبيت Heroku CLI. للتحقق من التثبيت ، يمكنك التحقق من إصدار Heroku من المحطة:
heroku --version
ملاحظة: تأكد من أنك قمت بتغيير اتصال قاعدة البيانات الخاص بك ، لأن Heroku لا يقترح استخدام SQLite ، حيث قد تضيع البيانات على الملفات. تقدم Heroku قاعدة بيانات Postgres مجانية. انظر خططهم واختر الخطة المناسبة لك لأن هناك حدود على الخطط المختلفة.
cd < Path To > /my_awesome_project
heroku login
<my_awesome_project-flask-bda-app>
، حيث <my_awesome_project-flask-bda-app>
هو الاسم الذي أعطيته مشروعك.heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
هو الاسم الذي أعطيته مشروعك. cd < Path To > /my_awesome_project
sudo snap install --classic heroku
heroku login
<my_awesome_project-flask-bda-app>
، حيث <my_awesome_project-flask-bda-app>
هو الاسم الذي أعطيته مشروعك.heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
هو الاسم الذي أعطيته مشروعك. cd < Path To > /my_awesome_project
brew tap heroku/brew && brew install heroku
heroku login
<my_awesome_project-flask-bda-app>
، حيث <my_awesome_project-flask-bda-app>
هو الاسم الذي أعطيته مشروعك.heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
هو الاسم الذي أعطيته مشروعك. بالنسبة لتطبيقات الأجهزة المحمولة الأصلية ، نحن نستخدم React-Itist. على وجه التحديد ، نستخدم Expo كإطار ومنصة لتطبيقات React Universal. إنها مجموعة من الأدوات والخدمات المبنية حول منصات React Native و Native التي تساعدك على تطوير تطبيقات JavaScript/Typemcript ، وتكرارها ، وتكرارها بسرعة على نظام التشغيل iOS و Android و Web من نفس قاعدة كود JavaScript/TypeScript.
لدينا إشعارات دفع مسبقًا ، لذلك ليس عليك ذلك. هذا يعني أنه أسرع وأسهل بالنسبة لك للبدء وتشغيل. بالإضافة إلى ذلك ، فإننا نستفيد من حزمة عدم التعرف على المعرض الافتراضي ، مما يسمح بتنفيذ ونهج مبسطين.
تشمل المزايا أسرع من مهام سير العمل/العمليات البناء والاختبار ، والاختبار عن بُعد أثناء التطور مع تحديثات Air (OTA) مع تغييرات مرئية على الادخار أثناء التطوير.
ومع ذلك ، هناك بعض العيوب والقيود معرض المعرض يدركها ويصفها جيدًا. نقترح مراجعة هذه القيود قبل استخدام طريقتنا المدمجة مسبقًا.
قم بإنشاء مشروع واحد يعمل أصلاً على جميع أجهزة المستخدمين.
cd < Path To > /my_awesome_project_mobile_app
npm install -g expo-cli
npm install
cd < Path To > /my_awesome_project_mobile_app
npm install -g expo-cli
npm install
نظرًا لأن Flask BDA لا تملي المكان الذي يجب أن تستضيفه موقع الويب الخاص بك ، فستحتاج إلى إخبار تطبيق الهاتف المحمول الخاص بك إلى أين تذهب.
في مثال QuickStart ، أنشأنا مشروعًا بعنوان
"My Awesome Project"
. ومع ذلك ، ربما تكون قد وصفت المشروع بشيء آخر. كان هذا قد أنشأ مجلد حيث يكون الاسم في العلبة السفلية وتجريد جميع الأحرف الخاصة ، واستبدال المساحات بالرسومات السفلية ، على سبيل المثال:my_awesome_project
.
بالنسبة للجوال ، سنقوم تلقائيًا بإنشاء مجلد
"_mobile_app"
منفصل حيث تكون بادئة المجلد هي اسم مشروعك ، على سبيل المثالmy_awesome_project_mobile_app
. هذا هو منع المشكلات معpackage.json
التكوينServerless
.
إذا كنت لا تزال قيد التطوير و/أو لم تختر مزود خدمة للاستضافة حتى الآن ، فيمكنك استخدام: NGROK لإنشاء عنوان URL للتطوير العام المؤقت الذي أنفق على بيئتك المحلية. تكشف NGROK الخوادم المحلية خلف NATS وجدران الحماية إلى الإنترنت العام عبر أنفاق آمنة. يتيح لك ذلك تجريبي مواقع الويب على عنوان URL العام واختبار تطبيقات الهاتف المحمول المتصلة بالواجهة الخلفية التي تعمل محليًا دون نشرها.
ابدأ خادم التطوير المحلي باتباع تعليمات البيئة المحلية
إذا لم تكن قد سجلت Ngrok من قبل:
إذا كنت قد سجلت بالفعل ولكن لم يتم تثبيتها:
بمجرد فتح محطة NGROK ، قم بإنشاء نفق من الخادم المحلي إلى NGROK
5000
، فاستبدل الرقم بعد http
للسماح بإنشاء النفق الصحيح. ngrok http 5000
ngrok by @inconshreveable
(Ctrl+C to quit)
Session Status online
Session Expires 1 hour, 59 minutes
Version 2.3.40
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://573d4ec93267.ngrok.io - > http://localhost:5000
Forwarding https://573d4ec93267.ngrok.io - > http://localhost:5000
Connections
ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
ملاحظة: يحافظ الإصدار المجاني على هذا الخادم فقط على قيد الحياة لمدة ساعتين ، لذلك قد تحتاج إلى متابعة هذه العملية في المستقبل ، وإذا دفعت عنوان URL هذا إلى "الريبو" ، فقد لا يعمل للشخص التالي.
my_awesome_project_mobile_app
app.json
وتحرير السطر 2 "server_base_url": "https://github.com/RyanJulyan/Flask-BDA"
عن طريق استبدال https://github.com/RyanJulyan/Flask-BDA
اسم الخادم.expo
على هاتفك المحمول عن طريق البحث عن "Expo" على متجر Apple أو Google Play:iOS
اذهب إلى: https://apps.apple.com/app/apple-store/id982107779Android
انتقل إلى: https://play.google.com/store/apps/details؟id=host.exp.exponentبمجرد تثبيت التطبيق على هاتفك ، يمكنك بدء تشغيل خادم تطوير على جهازك المحلي.
cd < Path To > /my_awesome_project_mobile_app
expo start
cd < Path To > /my_awesome_project_mobile_app
expo start
سيؤدي ذلك إلى فتح صفحة ويب مع رمز الاستجابة السريعة عليه. سيتيح لك ذلك استخدام تطبيق Expo إذا كنت على Android أو تستخدم الكاميرا إذا كنت على iOS لمسح الرمز وفتح تطبيقك مباشرة من خادم التطوير.
ملاحظة: إذا كنت ترغب في ألا يتمكن الأشخاص على شبكتك من مسح التطبيق واختباره عن بُعد ، فاضغط على زر
tunnel
TAB أعلى رمز QR.
جزء من التوصيات هو ضمان تحسين الصور. للقيام بهذا المعرض ، أوصى باقة تحسين المعرض والتي يمكن أن تساعد في تحسين الصور. بالإضافة إلى ذلك ، يمكن أن يؤدي تحسين الصور إلى تحسين تطبيقك الأصلي TTI (أو وقت التفاعل) ، مما يعني وقتًا أقل على شاشات الرش والتسليم الأسرع على اتصالات الشبكة السيئة.
cd < Path To > /my_awesome_project_mobile_app
npm install -g sharp-cli
npx expo-optimize --quality 0.9
cd < Path To > /my_awesome_project_mobile_app
npm install -g sharp-cli
npx expo-optimize --quality 0.9
لإنشاء وتطوير تطبيق سطح المكتب ، نحن نستخدم FlaskWebGui. أداة لإنشاء وتشغيل تطبيق Flask Web الخاص بك في غلاف Chrome. لتوزيع تطبيق سطح المكتب ، نستخدم pyinstaller. تجميد Pyinstaller (الحزم) تطبيقات Python في التنفيذيين المستقلين تحت Windows و GNU/Linux و Mac OS X و FreeBSD و Solaris و AIX.
يجب إنشاء كل نشر على النظام الأساسي المحدد الذي ترغب في تشغيله. لقد أنشأنا برامج نصية تتيح لك إدارة هذه عمليات النشر عن طريق وضع مجلدات
build
وdist
في مجلدات الوالدين للمنصة المعنية. سيتم بادئة هذه المجلدات معdesktop_
متبوعًا بالمنصة. يتم ذلك فقط للسماح لك بإدارة التوزيع وبناء عمليات للمنصات المحددة وليس الكتابة فوقها عند البناء على منصات مختلفة.
للسماح بتصدير سطح المكتب للعمل بشكل صحيح ، نطلب بعض التغييرات في التعليمات البرمجية. بشكل افتراضي ، تم تصميم Flask-BDA لتطوير الويب والجوال ، وقد قمنا بتنفيذ معدل تقديمي على الموقع. لسوء الحظ ، أنت تطلب من الخادم تقييم الحد ، وبما أنك تقوم بتصدير النظام إلى تطبيق سطح المكتب ، فإنه لا يعمل خادمًا.
على هذا النحو ، تحتاج إلى إزالة جميع الإشارات إلى المحدد. يمكن العثور عليها في
app/__init__.py
. للقيام بذلك ، افتح الملف في محرر نصوص والتعليق على الأسطر التالية:
# from flask_limiter import Limiter
# from flask_limiter.util import get_remote_address
# limiter = Limiter(
# app,
# key_func=get_remote_address,
# default_limits=app.config['DEFAULT_LIMITS']
# )
ملاحظة: إذا قمت بإضافة محدد مخصص ، فابحث عن
@limiter.limit
، والذي سيتم العثور عليه في وحدات التحكم الخاصة بك. ستحتاج إلى التعليق على كل هذه المراجع ومراجع الاستيراد ، على سبيل المثال:from app import limiter
سيتيح لك ذلك تصدير التطبيق كملف قابل للتنفيذ لسطح المكتب بدون أخطاء.
pip install --upgrade pip
cd <Path To>/my_awesome_project
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
venv S cripts a ctivate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_windows.py
pip install --upgrade pip
sudo
على سبيل المثال: sudo pip install --upgrade pip
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_lunix.py
pip install --upgrade pip
sudo
على سبيل المثال: sudo pip install --upgrade pip
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_mac.py
سيؤدي ذلك إلى فتح نافذة مُصورة تعمل مثل تطبيق سطح المكتب العادي. سيستخدم هذا متصفح Chrome المثبت محليًا لخدمة المحتوى.
بشكل افتراضي ، سيتم تقديم هذا التطبيق على المنفذ
7000
. ومع ذلك ، يمكنك تحرير المنفذ في ملفrun_desktop.py
إذا كان ذلك يتعارض مع أي تطبيقات موجودة.
إذا قمت بتضمين حزم Python إضافية في مشروعك ، فلا تنس تشغيل
pip freeze
من محطةك للتأكد من حصولك على الحزم الصحيحة لنشراتك
pip freeze > requirements.txt
ملاحظة: يُقترح أن تقوم بتثبيت وتجميد حزم Python إضافية من بيئة افتراضية بدلاً من عالمي. هذا يحافظ على
requirements.txt
صغير ويقتصر على الحزم التي تستخدمها في مشروعك المحدد.
يستخدم Flask BDA Swaggerui افتراضيًا لمساعدة واجهة برمجة التطبيقات وتقديم واجهة برمجة التطبيقات للمستخدم/العميل.
يسمح Swaggerui لأي شخص - سواء كان فريق التطوير الخاص بك أو مستهلكيك النهائيين - لتصور وتفاعل موارد API دون وجود أي من منطق التنفيذ. بدلاً من ذلك ، يتم إنشاؤه تلقائيًا من مواصفات OpenAPI (المعروفة سابقًا باسم Swagger) ، حيث تجعل الوثائق المرئية من السهل على التنفيذ الخلفي والاستهلاك من جانب العميل.
للوصول إلى Swaggerui:
<base_URL>/api/docs
للوصول إلى API Swaggerui ، على سبيل المثال: http://localhost:5000/api/docs
يفضل العديد من المطورين ساعي البريد على Swaggerui لاختبار ودمج واجهات برمجة التطبيقات مع رمزهم. لقد ساعدنا من خلال توفير تصدير مجموعة مباشرة لرجل البريد.
لاستيراد المجموعة على ساعي البريد:
Import...
(Ctrl+O)Link
من علامات التبويب<base_URL>/api/postman
على سبيل المثال: http://localhost:5000/api/postman
<base_URL>/aswagger.json
على سبيل المثال: http://localhost:5000/swagger.json
واستيراد ذلك مباشرة إلى رجل البريدhttps://learning.postman.com/docs/getting-started/importing-and-exporting-data/#converting-postman-collections-from-v1-to-v2
npm install -g postman-collection-transformer
postman-collection-transformer convert -i <path to the input Postman collection file> -o <path to the downloaded Postman file> -j 1.0.0 -p 2.0.0 -P
<path to the input Postman collection file>
و <path to the downloaded Postman file>
هي مسارات ملفات فعلية على الجهاز المحلي الخاص بك.Continue
Import
سيؤدي ذلك إلى استيراد مجموعة Postman التي ستصبح متوفرة على الجانب الأيسر كمجلد (مع المجلدات الفرعية من كل من نقاط النهاية التي قمت بإنشائها).
يمكنك إنشاء رمز للعديد من الممرات والأطر المختلفة باستخدام ساعي البريد. تشمل هذه اللغات على سبيل المثال لا الحصر:
السماح لك بدمج واجهة برمجة التطبيقات التي تم إنشاؤها حديثًا مع المشاريع الحالية
في بعض الأحيان ، تحتاج إلى تقديم طلبات خارجية (على سبيل المثال إلى واجهة برمجة تطبيقات خارجية). يمكنك التعامل مع هذا باستخدام طلبات AJAX ، ولكن في بعض الأحيان تحتاج إلى تقديم هذه الطلبات من جانب الخادم ، على سبيل المثال ، إذا كنت ترغب في تحديث تحويلات العملة تلقائيًا. عندما ترغب في الوصول إلى واجهات برمجة التطبيقات الخارجية من خلال الخادم ، فأنت لا ترغب في الاعتماد على المستخدم بنشاط على صفحة الويب لإرسال الأمر. بدلاً من ذلك ، تريد أن يكون الخادم قادرًا على تنشيط هذا التعليق. لتحقيق ذلك ، نستخدم وحدة الطلبات.
import requests
requests . methodname ( params )
import requests
params = { "model" : "Mustang" }
x = requests . get ( 'https://w3schools.com/python/demopage.php' , params = params )
print ( x . status_code )
print ( x . text )
import requests
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . post ( 'https://w3schools.com/python/demopage.php' , data = data , headers = headers )
print ( x . status_code )
print ( x . text )
import requests
import json
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . post ( 'https://w3schools.com/python/demopage.php' , json = data , headers = headers )
print ( x . status_code )
print ( x . text )
# use this to load JSON returned as a python dictionary
return_data = json . loads ( x . text )
import requests
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . put ( 'https://w3schools.com/python/demopage.php' , data = data , headers = headers )
print ( x . status_code )
print ( x . text )
import requests
import json
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . put ( 'https://w3schools.com/python/demopage.php' , json = data , headers = headers )
print ( x . status_code )
print ( x . text )
# use this to load JSON returned as a python dictionary
return_data = json . loads ( x . text )
import requests
x = requests . delete ( 'https://w3schools.com/python/demopage.php' )
print ( x . status_code )
print ( x . text )
طلبات AJAX ، عادةً طلب HTTP الذي تم تقديمه بواسطة (متصفح-عميل) في JavaScript يستخدم XML/JSON لطلب البيانات و/أو بيانات الاستجابة من نظام داخلي أو خارجي. يتم تقديم طلبات AJAX باستخدام </> HTMX افتراضيًا.
HTMX هي مكتبة خالية من التبعية تتيح لك الوصول إلى Ajax و CSS التحولات و WebSockets وأحداث Server-Sent مباشرة في HTML ، باستخدام السمات بحيث يمكنك إنشاء واجهات المستخدم الحديثة مع بساطة وقوة النص التشعبي. للحصول على تفاصيل حول كيفية استخدام HTMX ، يرجى الرجوع إلى المستندات وللتراجع الكامل حول الوظيفة ، يرجى الرجوع إلى https://htmx.org/reference/
يمكنك استخدام HTMX لتنفيذ العديد من أنماط UX الشائعة ، مثل البحث النشط:
< input type =" text " name =" q "
hx-get =" /trigger_delay "
hx-trigger =" keyup changed delay:500ms "
hx-target =" #search-results "
placeholder =" Search... " />
< div id =" search-results " > </ div >
سيصدر هذا المدخلات المسماة Q طلبًا إلى /trigger_delay
500 مللي ثانية بعد حدث مفتاح إذا تم تغيير الإدخال وإدراج النتائج في DIV مع نتائج البحث عن الهوية.
على الرغم من مزايا التشفير المتماثل ، هناك عيب في هذه الطريقة التي تسمح للأفراد غير المصرح لهم بالوصول إلى المفاتيح السرية للرسالة.
واحدة من أكثر الطرق فعالية لمنع الوصول غير المصرح به إلى المفاتيح السرية للرسالة هو من خلال تنفيذ وظيفة في اتجاه واحد مثل خوارزمية Diffie-Hellman. تتيح هذه الطريقة فقط للمرسل والمستقبل فك تشفير الرسالة.
يتم تنفيذ الوظائف أحادية الاتجاه عادةً باستخدام نوع من الخوارزمية التي تسمح لها بحساب الإخراج لكل إدخال تم استلامه. ومع ذلك ، فإن هذه الطريقة ليست ممكنة لاستخلاص النتيجة الدقيقة من مفتاح عشوائي.
يعد الاختبار جزءًا حيويًا من ضمان تشغيل المشروع بنجاح
هناك 3 جوانب للاختبار المقدمة في Flask BDA:
ملاحظة: لتشغيل Python
unittest
يدويًا ، تأكد من تثبيت البيئات المحلية
cd < Path To > /my_awesome_project
venv S cripts a ctivate
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 . --count --exit-zero --max-complexity=11 --max-line-length=127 --statistics
cd < Path To > /my_awesome_project
source venv/bin/activate
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
ملاحظة: لتشغيل Python
unittest
يدويًا ، تأكد من تثبيت البيئات المحلية
cd < Path To > /my_awesome_project
venv S cripts a ctivate
python -m unittest discover
cd < Path To > /my_awesome_project
venv/bin/activate
python -m unittest discover
تشغيل ملف واحد وإعداد
مشروع Flask Starter ، الذي يبني بنية مجلد المشروع مع
992px
500px
@mobile_template
، مما يتيح أن يتم تخصيص مشاهدات القالب لتجربة أفضل للهاتف المحمول إذا لزم الأمر.{% if request.MOBILE %}True{% else %}False{% endif %}
config.py
للوصول السريع وإدارة متغيرات البيئة والبيئة وعمليات تحسين محركات البحث الافتراضيةconfig.py
قم بإنشاء ملفات ومجلدات مخصصة تتناسب مع بنية مشروع Flask من ملف create_module.py
مع مطالبات لإنشاء ما يلي:
public_list
index
create
store
show
edit
update
destroy
get
post
get
update
delete
before
التغييرات after
على event listeners
النموذجية لـ:Insert
Update
Delete
public_list
index
create
store
show
edit
update
destroy
get
url ../api/xyz [عناصر القائمة]post
url ../api/Xyz [عنصر واحد]get
update
delete
post
url ../api/xyz/bulk [عناصر متعددة]update
get
على url ../api/xyz/aggregate [عودة واحدة ، من عناصر متعددة مجمعة]public_list.html
(عناصر قائمة)index.html
(عناصر قائمة)create.html
(نموذج عنصر واحد)show.html
(عنصر واحد)edit.html
(نموذج عنصر واحد)api/docs
(URL)دعم المتصفح (آخر إصدار رئيسي لم يمت)
└── `project_name`
├── .github
│ └── workflows
│ ├── docker-image.yml
│ └── run_tests.yml
├── app
│ ├── generated_config
│ │ ├── model_editor
│ │ └── models
│ │ ├── hierarchies
│ │ │ └── models.json
│ │ └── organisations
│ │ └── models.json
│ ├── mod_audit
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ └── models.py
│ ├── mod_users
│ │ ├── templates
│ │ │ ├── mobile
│ │ │ │ └── auth
│ │ │ │ ├── admin
│ │ │ │ │ ├── create.html
│ │ │ │ │ ├── edit.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── show.html
│ │ │ │ └── public
│ │ │ │ └── public_list.html
│ │ │ ├── email
│ │ │ │ ├── activate.html
│ │ │ │ └── reset.html
│ │ │ └── users
│ │ │ ├── admin
│ │ │ │ ├── create.html
│ │ │ │ ├── edit.html
│ │ │ │ ├── index.html
│ │ │ │ └── show.html
│ │ │ └── public
│ │ │ └── public_list.html
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ ├── forms.py
│ │ └── models.py
│ ├── mod_email
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ └── models.py
│ ├── mod_file_upload
│ │ ├── templates
│ │ │ └── file_upload
│ │ │ └── upload.html
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ ├── forms.py
│ │ └── models.py
│ ├── static
│ │ ├── css
│ │ ├── images
│ │ ├── js
│ │ ├── manifest.json
│ │ └── sw.js
│ ├── templates
│ │ ├── admin
│ │ │ └── index.html
│ │ ├── email
│ │ │ └── auth
│ │ │ ├── activate.html
│ │ │ └── reset.html
│ │ ├── mobile
│ │ ├── public
│ │ │ └── index.html
│ │ ├── 403.html
│ │ ├── 404.html
│ │ └── index.html
│ └── __init__.py
├── create_module_template
│ ├── generated_config
│ │ └── models
│ │ └── xyz
│ │ └── models.json
│ └── mod_xyz
│ ├── templates
│ │ ├── mobile
│ │ │ └── xyz
│ │ │ ├── admin
│ │ │ │ ├── create.html
│ │ │ │ ├── edit.html
│ │ │ │ ├── index.html
│ │ │ │ └── show.html
│ │ │ └── public
│ │ │ └── public_list.html
│ │ └── xyz
│ │ ├── admin
│ │ │ ├── create.html
│ │ │ ├── edit.html
│ │ │ ├── index.html
│ │ │ └── show.html
│ │ └── public
│ │ └── public_list.html
│ ├── api_controllers.py
│ ├── controllers.py
│ ├── forms.py
│ └── models.py
├── databases
│ └── sqlite
│ ├── core.db
│ └── default.db
├── .dockerignore
├── .gitignore
├── config.py
├── create_all_models_json.py
├── create_desktop_installer_lunix.py
├── create_desktop_installer_mac.py
├── create_desktop_installer_windows.py
├── create_module.py
├── create_module_json.py
├── Dockerfile
├── FLASK-BDA LICENSE
├── LICENSE
├── package.json
├── package-lock.json
├── Procfile
├── README.md
├── requirements.txt
├── run.py
├── run_desktop.py
├── run_shared_server.py
└── serverless.yml
الوحدة النمطية هي جزء من البرنامج. تتكون البرامج من وحدات واحدة أو أكثر تم تطويرها بشكل مستقل ، عند دمجها ، قم بإنشاء البرنامج.
الوحدة النمطية هي مكون مستقل ذاتيًا ، مما يسهل إدارته مع نمو البرنامج.
تساعدك الوحدات النمطية الموجودة في Flask-BDA على إنشاء: نموذج بيانات وطرق ووظائف مرتبطة بالتحكم في المنطق والطرق
يمكن أن تجمع المنطق المتعلق بتعاملات مع المنطق للطلب في فئة واحدة. على سبيل المثال ، قد تتعامل فئة UserController مع جميع الطلبات الواردة المتعلقة بالمستخدمين ، بما في ذلك إظهار المستخدمين وإنشاء وتحديث وحذف المستخدمين.
قم بإنشاء وقراءة وتحديث وحذف ("Crud")
Linting هو التدقيق الآلي للرمز المصدر الخاص بك للأخطاء البرمجية والأسلوبية. يتم ذلك باستخدام أداة LINT (المعروفة باسم Linter). أداة LINT هي محلل رمز ثابت أساسي.
Lint ، أو Linter ، هي أداة تحليل رمز ثابت تستخدم لعلامة أخطاء البرمجة ، والأخطاء ، والأخطاء الأسلوبية ، والبنيات المشبوهة.
في برمجة الكمبيوتر ، اختبار الوحدة هو طريقة اختبار البرمجيات يتم من خلالها اختبار الوحدات الفردية من التعليمات البرمجية المصدر - مواقع واحدة أو أكثر من وحدات برنامج الكمبيوتر جنبا إلى جنب مع بيانات التحكم المرتبطة بها ، وإجراءات الاستخدام ، وإجراءات التشغيل - لتحديد ما إذا كانت مناسبة للاستخدام .
توفر منصة تطوير الرمز المنخفض بيئة تطوير لإنشاء برنامج للتطبيق من خلال واجهات وتكوينات المستخدم البرمجية أو الرسومية بدلاً من برمجة الكمبيوتر التقليدية باليد.
سنكون سعداء إذا ساهمت في المشروع بطريقة واحدة أو كل هذه الطرق:
عرض معلومات الترخيص لـ Python 3. (https://docs.python.org/3.8/license.html) والاتفاقيات القانونية الأخرى (https://www.python.org/about/legal/)
عرض معلومات الترخيص لـ Docker. (https://www.docker.com/legal/components-licenses) والاتفاقيات القانونية الأخرى (https://www.docker.com/legal)
كما هو الحال مع جميع صور Docker ، فمن المحتمل أيضًا أن تحتوي على برامج أخرى قد تكون تحت التراخيص الأخرى (مثل Bash ، وما إلى ذلك ، من التوزيع الأساسي ، إلى جانب أي تبعيات مباشرة أو غير مباشرة للبرنامج الأساسي الذي يتم احتوائه).
يمكن العثور على بعض معلومات الترخيص الإضافية التي يمكن اكتشافها تلقائيًا في دليل/ دليل مستودع REPO-Info.
بالنسبة لأي استخدام للصور المُصمم مسبقًا ، فإن مسؤولية مستخدم الصورة هي التأكد من أن أي استخدام لهذه الصورة يتوافق مع أي تراخيص ذات صلة لجميع البرامج الموجودة في الداخل.
عرض معلومات الترخيص لـ Serverless Framework والاتفاقيات القانونية الأخرى (https://app.serverless.com/legal/terms).
تقع على عاتق المستخدم مسؤولية التأكد من الالتزام بسياسة الاستخدام المقبولة (https://app.serverless.com/legal/aup)
عرض معلومات الترخيص لإطار المعرض والاتفاقيات القانونية الأخرى (https://github.com/expo/expo/blob/master/license).
يتم إنشاء Flask-BDA وتوزيعه تحت رخصة Flask-BDA الصديقة للمطور. يتم اشتقاق ترخيص Flask-BDA من ترخيص Apache 2.0 الشهير.
ترخيص Flask-BDA هو الشرط القانوني لك أو لشركتك لاستخدام وتوزيع Flask-BDA وأعمال مشتقة مثل التطبيقات التي تقدمها معها. يمكن أن يكون لطلبك أو مشروعك ترخيصًا مختلفًا ، لكنه لا يزال بحاجة إلى الامتثال للرسالة الأصلية.
إدراج إشعار الرخصة وحقوق الطبع والنشر
يتطلب ترخيص Flask-BDA أن تتضمن إشعار الترخيص وحقوق الطبع والنشر مع جميع نسخ Flask-BDA وفي أي أعمال مشتقة تم إنشاؤها باستخدام Flask-BDA. الأمر متروك لك لتقرير كيف ترغب في توزيع الترخيص والإشعار. فيما يلي بعض الأمثلة على كيفية القيام بذلك:
حقوق الطبع والنشر 2021 Flask-BDA ، Ryan Julyan مرخصة بموجب إصدار ترخيص Flask-BDA 0.1 ("الترخيص") ؛ لا يجوز لك استخدام Flask-BDA
إلا في الامتثال للترخيص. يمكنك الحصول على نسخة من الترخيص ، على الموقع https://github.com/RyanJulyan/Flask-BDA/blob/main/LICENSE
ما لم يكن مطلوبًا بموجب القانون المعمول به أو يتم الموافقة عليه ، يتم توزيع البرامج الموزعة بموجب الترخيص على ". كما هو "الأساس ، بدون ضمانات أو شروط من أي نوع ، إما صريحة أو ضمنية. راجع ترخيص الأذونات والقيود التي تحكم اللغة المحددة بموجب الترخيص.