ما هو إطار عمل Frappe؟

فرابي هو إطار عمل ويب شامل ومتكامل ("full stack, batteries-included") مكتوب بلغتي Python و Javascript.

هو الإطار الذي يُشغّل نظام ERPNext. إنه إطار عام جداً ويمكن استخدامه لبناء تطبيقات قائمة على قواعد البيانات.

مدفوع بالبيانات الوصفية (Meta-data driven)

البيانات الوصفية هي عنصر أساسي في Frappe. يتم استخدامها لتوليد جداول قاعدة البيانات، وتصميم النماذج، وتهيئة العديد من الميزات. يتم تخزين البيانات الوصفية في نموذج يُعرف باسم نوع المستند (DocType) في Frappe.

لنأخذ مثالاً على نوع مستند يُسمى ToDo. سيتضمن حقولاً مثل status، و date، و description.

إليك كيف قد يبدو ملف todo.json:

{
  "name": "ToDo",
  "module": "Desk",
  "field_order": ["status", "date", "description"],
  "fields": [
    {
      "default": "Open",
      "fieldname": "status",
      "fieldtype": "Select",
      "in_global_search": 1,
      "in_list_view": 1,
      "in_standard_filter": 1,
      "label": "Status",
      "options": "Open\nClosed"
    },
    {
      "fieldname": "date",
      "fieldtype": "Date",
      "in_standard_filter": 1,
      "label": "Due Date"
    },
    {
      "fieldname": "description",
      "fieldtype": "Text Editor",
      "in_global_search": 1,
      "label": "Description",
      "reqd": 1
    }
  ]
}

تكوين كهذا سيولد جدول قاعدة بيانات قد يبدو هيكله كما يلي:

MariaDB [_baa0f26509a564b6]> desc tabToDo;
+-----------------------+--------------+------+-----+---------+-------+
| Field                 | Type         | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+---------+-------+
| name                  | varchar(140) | NO   | PRI | NULL    |       |
| creation              | datetime(6)  | YES  |     | NULL    |       |
| modified              | datetime(6)  | YES  | MUL | NULL    |       |
| modified_by           | varchar(140) | YES  |     | NULL    |       |
| owner                 | varchar(140) | YES  |     | NULL    |       |
| docstatus             | int(1)       | NO   |     | 0       |       |
| idx                   | int(8)       | NO   |     | 0       |       |
| status                | varchar(140) | YES  |     | Open    |       |
| description           | longtext     | YES  |     | NULL    |       |
| date                  | date         | YES  |     | NULL    |       |
+-----------------------+--------------+------+-----+---------+-------+

واجهة إدارة غنية (Rich Admin Interface)

لا يدير Frappe الواجهة الخلفية (backend) فحسب، بل يأتي أيضًا مع واجهة إدارة غنية بالميزات تُسمى Desk. عندما تنشئ نوع مستند (DocType) في Frappe، يتم إنشاء عدد من العروض (views) له. فيما يلي بعضها:

  • عرض القائمة (List View) يدعم الترقيم، التصفية، الفرز، والتعديل الجماعي للسجلات. List View

  • عرض النموذج (Form View) المستخدم لتحرير السجلات، يدعم أيضًا مرفقات الملفات، تنسيق PDF، التعليقات، البريد الإلكتروني، إلخ. Form View

  • منشئ التقارير (Report Builder) يدعم إضافة الأعمدة، التجميع، التصفية، الفرز وحفظه كتكوين. Report Builder

المستخدمون والأدوار والأذونات (Users, Roles and Permissions)

يأتي Frappe مزودًا بإدارة المستخدمين (Users) و الأدوار (Roles) جاهزة للاستخدام. المستخدم هو شخص يمكنه تسجيل الدخول إلى النظام وأداء الإجراءات المصرح بها مثل إنشاء، تحديث، أو حذف السجلات. الدور هو تعيين لأنواع المستندات والإجراءات المسموح بها عليها. Role Permission Manager

Python و JS و MariaDB

يستخدم Frappe Framework Python للواجهة الخلفية. يأتي مع طبقة تجريد بسيطة وقوية (ORM) للعمليات CRUD. قاعدة البيانات الافتراضية هي MariaDB. يوجد دعم لـ Postgres في مرحلة تجريبية (beta).

مثال على كود Python:

doc = frappe.new_doc('ToDo')
doc.description = 'Buy Eggs'
doc.insert()

الواجهة الأمامية هي تطبيق صفحة واحدة (SPA) مبني باستخدام Javascript (jQuery).

الوقت الحقيقي (Realtime)

يدعم Frappe أيضًا أحداث النشر/الاشتراك في الوقت الحقيقي باستخدام NodeJS و socketio.

مثال على كود الخادم:

# server
frappe.publish_realtime('update_progress', {
    'progress': 42,
    'total': 100
})

مثال على كود العميل:

// client
frappe.realtime.on('update_progress', (data) => {
    console.log(data)
});

المهام في الخلفية (Background Jobs)

يدعم Frappe أيضًا قائمة انتظار المهام في الخلفية بناءً على Python RQ.

frappe.enqueue('frappe.job.run_job', arg1='Test', arg2='Test2')

البريد الإلكتروني (Email)

يدعم Frappe إرسال واستقبال رسائل البريد الإلكتروني، والتي يمكن أيضًا ربطها بمستندات فردية. Email

الطباعة (Printing)

يدعم Frappe إنشاء تنسيقات طباعة PDF بناءً على قوالب Jinja. يأتي أيضًا مع منشئ تنسيقات الطباعة بالسحب والإفلات (drag-and-drop). Print Preview Print Format Builder

شامل ومتكامل (Batteries Included)

يحتوي Frappe على أطنان من الميزات الأساسية لبناء تطبيق حديث ومعقد. يتم تقديم الميزات الأساسية فقط هنا. سيغطي باقي هذا الدليل هذه الميزات وغيرها من الميزات المتقدمة بتفاصيل أدق، لذا تأكد من قراءتها جميعًا.

Discard
Save

On this page

Review Changes ← Back to Content
Message Status Space Raised By Last update on