اذهب إلى المحتوى

لوحة المتصدرين

  1. Mustafa Suleiman

    Mustafa Suleiman

    الأعضاء


    • نقاط

      6

    • المساهمات

      19010


  2. بلال زيادة

    بلال زيادة

    الأعضاء


    • نقاط

      2

    • المساهمات

      4657


  3. Mehdi Lafdali

    Mehdi Lafdali

    الأعضاء


    • نقاط

      2

    • المساهمات

      29


  4. عمر قره محمد

    عمر قره محمد

    الأعضاء


    • نقاط

      2

    • المساهمات

      4118


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 06/16/23 in أجوبة

  1. اريد الاستفسار عن اذا كان بامكاني ان اتنقل بين اقسام الدورات بدون ترتيب , مثلا هل يمكنني ان اذهب وابدا التعلم في انشاء صفحات الهبوط مباشرة
    2 نقاط
  2. السلام عليكم هل الDOM والBOM لهم اهمية في تطوير التطبيقات باستخدام لغة JS؟ هل تعلم React.js و React Native سوف يغني عنهم ام يجب علي دراستهم والتعمق بهم؟ اذا كانو غير مهمين فما البديل عنهم؟ او كيف يمكنني عندها جلب العناصر وترتيبها وتنسيقها؟ شكرا لكم
    1 نقطة
  3. ضع أمر طباعة بعد storedData لتفقد ما القيمة التي يتم إرجاعها؟ const storedData = localStorage.getItem('data'); console.log(storedData) فإذا كانت قيمة falsy مثل null أو undefined فلم يتم تنفيذ الكتلة الخاصة بـ if. وإذا استمرت المشكلة أرفق مجلد المشروع.
    1 نقطة
  4. إذا كان لديك خبرة في اللغات الأساسية وهي HTML, CSS, JS وتريد التطبيق بشكل مباشر فلا مشكلة، لكن إذا كنت في بداية تعلمك فلا أنصحك بذلك إطلاقًا. فتعلم الأساسيات والتطبيق عليها دون محاولة التخطي سريعًا للتطبيق على مشاريع كاملة هو الطريق الصحيح، فصدقًا ستعاني لو قمت بذلك عليك بالتأني في مرحلة تعلم الأساسيات وهي مرحلة طويلة نسبيًا لكن ستجني ثمار ذلك عند تنفيذ المشاريع على فهم واستيعاب لما تقوم به وستصبح قدرتك على المشاكل التي تواجهك أفضل. وأنصحك مرة أخرى بألا تستعجل في تعلم الأساسيات، حاول التطبيق والتعلم والاستزادة من أكثر من مصدر ولا تكتفي بالدورة فقط، وابحث عما تريد معرفته، وستجد على اليوتيوب مشاريع كثيرة للمبتدأين باللغات الأساسية HTML, CSS, JS. وبخصوص JS يوجد معلومات إضافية في المسار الأول في دورة تطوير التطبيقات باستخدام لغة JavaScript، وجميع المسارات الأولى من الدورات الأخرى متاحة لك بشكل مجاني، وأيضًا على يوتيوب ابحث عن مشاريع جافاسكريبت للمبتدئين وحاول تنفيذها وابحث عما تريد معرفته، سواء على يوتيوب أو على جوجل وتستطيع السؤال هنا وسيتم مساعدتك. وهناك نقاشات مفيدة حاول قراءتها بتأني:
    1 نقطة
  5. في البداية أنت تحاول استدعاء localStorage.getItem('data') للحصول على القيمة المخزنة في الـ localStorage تحت المفتاح "data"، ثم التحقق مما إذا كانت القيمة معرفة بالفعل أم لا باستخدام الشرط localStorage.getItem('data') !== undefined. وإذا كانت القيمة غير معرفة (أي undefined)، فسيتم تعيين قيمة افتراضية فارغة [] للـ data. لكن، قبل تعيين القيمة للـ data، ما يتم هو تحليل القيمة المسترجعة من localStorage كصيغة JSON باستخدام JSON.parse(localStorage.getItem('data')). فإذا كانت القيمة المسترجعة غير صالحة كـ JSON، فيتم إطلاق خطأ بصيغة: SyntaxError: Unexpected token u in JSON at position 0 أو SyntaxError: Unexpected token < in JSON at position 0. ولتجنب حدوذ ذلك عليك بالتحقق من صحة القيمة المسترجعة من localStorage قبل تحليلها كـ JSON. باستخدام الدالة JSON.parse() داخل عبارة try-catch للتعامل مع أي أخطاء تحليل الصيغة، هناك طرق مختلفة لمعالجة المشكلة، ومنها الحل التالي: let initialData = []; const [data, setData] = useState(initialData); const storedData = localStorage.getItem('data'); try { if (storedData) { initialData = JSON.parse(storedData); } } catch (error) { console.error('Error parsing stored data:', error); } وقمت بتخزين القيمة المسترجعة من localStorage في متغير storedData. ثم استخدام عبارة try-catch لمحاولة تحليل الصيغة باستخدام JSON.parse() وتعيين القيمة إلى initialData في حال نجح التحليل، وإذا حدث أي خطأ أثناء التحليل، فسيتم طباعة رسالة الخطأ في وحدة التحكم ويتم تعيين القيمة الافتراضية [] لـ initialData. أخيرًا، تعيين القيمة النهائية للـ data باستخدام useState(initialData).
    1 نقطة
  6. عند تشغيل الامر python odoo-bin -r odoo -w odoo --addons-path=addons تظهر لي عدة اخطاء ويظهر خطأ internal server error ولا يفتح معي الlocal C:\Users\mohammedal-faifi\odoo>python odoo-bin -r odoo -w odoo --addons-path=addons 2023-06-16 16:27:37,348 7272 INFO ? odoo: Odoo version 15.0 2023-06-16 16:27:37,348 7272 INFO ? odoo: addons paths: ['C:\\Users\\mohammedal-faifi\\odoo\\odoo\\addons', 'c:\\users\\mohammedal-faifi\\appdata\\local\\openerp s.a\\odoo\\addons\\15.0', 'c:\\users\\mohammedal-faifi\\odoo\\addons', 'c:\\users\\mohammedal-faifi\\odoo\\odoo\\addons'] 2023-06-16 16:27:37,348 7272 INFO ? odoo: database: odoo@default:default 2023-06-16 16:27:37,700 7272 INFO ? odoo.addons.base.models.ir_actions_report: You need Wkhtmltopdf to print a pdf version of the reports. 2023-06-16 16:27:37,868 7272 WARNING ? py.warnings: C:\Users\mohammedal-faifi\odoo\odoo\addons\base\models\ir_mail_server.py:22: DeprecationWarning: 'urllib3.contrib.pyopenssl' module is deprecated and will be removed in urllib3 v2.1.0. Read more in this issue: https://github.com/urllib3/urllib3/issues/2680 File "C:\Users\mohammedal-faifi\odoo\odoo-bin", line 8, in <module> odoo.cli.main() File "C:\Users\mohammedal-faifi\odoo\odoo\cli\command.py", line 61, in main o.run(args) File "C:\Users\mohammedal-faifi\odoo\odoo\cli\server.py", line 179, in run main(args) File "C:\Users\mohammedal-faifi\odoo\odoo\cli\server.py", line 173, in main rc = odoo.service.server.start(preload=preload, stop=stop) File "C:\Users\mohammedal-faifi\odoo\odoo\service\server.py", line 1300, in start load_server_wide_modules() File "C:\Users\mohammedal-faifi\odoo\odoo\service\server.py", line 1210, in load_server_wide_modules odoo.modules.module.load_openerp_module(m) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\module.py", line 403, in load_openerp_module __import__('odoo.addons.' + module_name) File "c:\users\mohammedal-faifi\odoo\addons\web\__init__.py", line 4, in <module> from . import controllers File "c:\users\mohammedal-faifi\odoo\addons\web\controllers\__init__.py", line 4, in <module> from . import main File "c:\users\mohammedal-faifi\odoo\addons\web\controllers\main.py", line 34, in <module> from odoo.addons.base.models.ir_qweb import render as qweb_render File "C:\Users\mohammedal-faifi\odoo\odoo\addons\base\__init__.py", line 5, in <module> from . import models File "C:\Users\mohammedal-faifi\odoo\odoo\addons\base\models\__init__.py", line 23, in <module> from . import ir_mail_server File "C:\Users\mohammedal-faifi\odoo\odoo\addons\base\models\ir_mail_server.py", line 22, in <module> from urllib3.contrib.pyopenssl import PyOpenSSLContext 2023-06-16 16:27:38,300 7272 INFO ? odoo.service.server: HTTP service (werkzeug) running on MOHAMMEDAL-2E50.localdomain:8069 2023-06-16 16:27:48,630 7272 INFO ? odoo.http: HTTP Configuring static files 2023-06-16 16:27:48,689 7272 ERROR odoo odoo.sql_db: bad query: CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1 ERROR: permission denied for schema public 2023-06-16 16:27:48,689 7272 ERROR odoo odoo.modules.registry: Failed to load registry Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] ~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] ~~~~~~^^^^^ KeyError: 'odoo' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ psycopg2.errors.InsufficientPrivilege: permission denied for schema public 2023-06-16 16:27:48,689 7272 INFO odoo odoo.http: Generating nondb routing 2023-06-16 16:27:48,705 7272 ERROR odoo odoo.sql_db: bad query: CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1 ERROR: permission denied for schema public 2023-06-16 16:27:48,720 7272 ERROR odoo odoo.modules.registry: Failed to load registry Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] ~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] ~~~~~~^^^^^ KeyError: 'odoo' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1482, in dispatch odoo.registry(db).check_signaling() ^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\__init__.py", line 104, in registry return modules.registry.Registry(database_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 63, in __new__ return cls.new(db_name) ^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ psycopg2.errors.InsufficientPrivilege: permission denied for schema public During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] ~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] ~~~~~~^^^^^ KeyError: 'odoo' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ psycopg2.errors.InsufficientPrivilege: permission denied for schema public 2023-06-16 16:27:48,720 7272 INFO odoo werkzeug: 127.0.0.1 - - [16/Jun/2023 16:27:48] "GET / HTTP/1.1" 500 - 6 0.016 0.065 2023-06-16 16:27:48,742 7272 ERROR odoo werkzeug: Error on request: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] KeyError: 'odoo' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1482, in dispatch odoo.registry(db).check_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\__init__.py", line 104, in registry return modules.registry.Registry(database_name) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 63, in __new__ return cls.new(db_name) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) psycopg2.errors.InsufficientPrivilege: permission denied for schema public During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] KeyError: 'odoo' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1469, in _dispatch_nodb result = request.dispatch() File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 815, in dispatch r = self._call_function(**self.params) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 368, in _call_function return checked_call(self.db, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\service\model.py", line 92, in wrapper if odoo.registry(dbname)._init and not odoo.tools.config['test_enable']: File "C:\Users\mohammedal-faifi\odoo\odoo\__init__.py", line 104, in registry return modules.registry.Registry(database_name) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 63, in __new__ return cls.new(db_name) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) Exception The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\werkzeug\serving.py", line 319, in run_wsgi execute(self.server.app) File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\werkzeug\serving.py", line 308, in execute application_iter = app(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\service\server.py", line 482, in app return self.app(e, s) File "C:\Users\mohammedal-faifi\odoo\odoo\service\wsgi_server.py", line 112, in application return application_unproxied(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\service\wsgi_server.py", line 87, in application_unproxied result = odoo.http.root(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1305, in __call__ return self.dispatch(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1271, in __call__ return self.app(environ, start_wrapped) File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\werkzeug\middleware\shared_data.py", line 287, in __call__ return self.app(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1498, in dispatch result = _dispatch_nodb() File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1471, in _dispatch_nodb return request._handle_exception(e) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 759, in _handle_exception return super(HttpRequest, self)._handle_exception(exception) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 301, in _handle_exception raise exception.with_traceback(None) from new_cause psycopg2.errors.InsufficientPrivilege: permission denied for schema public - - - 2023-06-16 16:27:49,390 7272 ERROR odoo odoo.sql_db: bad query: CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1 ERROR: permission denied for schema public 2023-06-16 16:27:49,390 7272 ERROR odoo odoo.modules.registry: Failed to load registry Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] ~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] ~~~~~~^^^^^ KeyError: 'odoo' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ psycopg2.errors.InsufficientPrivilege: permission denied for schema public 2023-06-16 16:27:49,390 7272 ERROR odoo odoo.sql_db: bad query: CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1 ERROR: permission denied for schema public 2023-06-16 16:27:49,398 7272 ERROR odoo odoo.modules.registry: Failed to load registry Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] ~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] ~~~~~~^^^^^ KeyError: 'odoo' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1482, in dispatch odoo.registry(db).check_signaling() ^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\__init__.py", line 104, in registry return modules.registry.Registry(database_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 63, in __new__ return cls.new(db_name) ^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ psycopg2.errors.InsufficientPrivilege: permission denied for schema public During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] ~~~~~~~~~~~~~~^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] ~~~~~~^^^^^ KeyError: 'odoo' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ psycopg2.errors.InsufficientPrivilege: permission denied for schema public 2023-06-16 16:27:49,398 7272 INFO odoo werkzeug: 127.0.0.1 - - [16/Jun/2023 16:27:49] "GET / HTTP/1.1" 500 - 6 0.008 0.008 2023-06-16 16:27:49,414 7272 ERROR odoo werkzeug: Error on request: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] KeyError: 'odoo' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1482, in dispatch odoo.registry(db).check_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\__init__.py", line 104, in registry return modules.registry.Registry(database_name) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 63, in __new__ return cls.new(db_name) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) psycopg2.errors.InsufficientPrivilege: permission denied for schema public During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 61, in __new__ return cls.registries[db_name] File "C:\Users\mohammedal-faifi\odoo\odoo\tools\func.py", line 71, in wrapper return func(self, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\tools\lru.py", line 34, in __getitem__ a = self.d[obj] KeyError: 'odoo' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1469, in _dispatch_nodb result = request.dispatch() File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 815, in dispatch r = self._call_function(**self.params) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 368, in _call_function return checked_call(self.db, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\service\model.py", line 92, in wrapper if odoo.registry(dbname)._init and not odoo.tools.config['test_enable']: File "C:\Users\mohammedal-faifi\odoo\odoo\__init__.py", line 104, in registry return modules.registry.Registry(database_name) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 63, in __new__ return cls.new(db_name) File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 84, in new registry.setup_signaling() File "C:\Users\mohammedal-faifi\odoo\odoo\modules\registry.py", line 616, in setup_signaling cr.execute("CREATE SEQUENCE base_registry_signaling INCREMENT BY 1 START WITH 1") File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 90, in check return f(self, *args, **kwargs) File "C:\Users\mohammedal-faifi\odoo\odoo\sql_db.py", line 311, in execute res = self._obj.execute(query, params) Exception The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\werkzeug\serving.py", line 319, in run_wsgi execute(self.server.app) File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\werkzeug\serving.py", line 308, in execute application_iter = app(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\service\server.py", line 482, in app return self.app(e, s) File "C:\Users\mohammedal-faifi\odoo\odoo\service\wsgi_server.py", line 112, in application return application_unproxied(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\service\wsgi_server.py", line 87, in application_unproxied result = odoo.http.root(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1305, in __call__ return self.dispatch(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1271, in __call__ return self.app(environ, start_wrapped) File "C:\Users\mohammedal-faifi\AppData\Local\Programs\Python\Python311\Lib\site-packages\werkzeug\middleware\shared_data.py", line 287, in __call__ return self.app(environ, start_response) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1498, in dispatch result = _dispatch_nodb() File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 1471, in _dispatch_nodb return request._handle_exception(e) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 759, in _handle_exception return super(HttpRequest, self)._handle_exception(exception) File "C:\Users\mohammedal-faifi\odoo\odoo\http.py", line 301, in _handle_exception raise exception.with_traceback(None) from new_cause psycopg2.errors.InsufficientPrivilege: permission denied for schema public - - -
    1 نقطة
  7. السلام عليكم ورحمة الله وبركاته .. هل يمكن تنزيل الفيديوهات وكيف ؟؟ نظرا لأني لا أملك باقة كافية .. للإنترنت .. وبِحُكم إني محمل البرامج للتطبيق ف تتبقى الفيديوهات ..
    1 نقطة
  8. عند استخدام React.js و React Native، فإنك لن تحتاج إلى التعامل مباشرة مع DOM و BOM بنفس الطريقة التقليدية. وفي React.js، يستخدم Virtual DOM (DOM افتراضي) لتمثيل الهيكل الشجري للعناصر المرئية في التطبيق، وتقوم React بإدارة تحديثات الـ DOM بشكل فعال ويقوم بإعادة رسم المكونات فقط عند الحاجة، مما يوفر أداءً محسّنًا، لذلك، لا تحتاج إلى التعامل مباشرة مع DOM الحقيقي في معظم الحالات عند استخدام React.js. ومن الأفضل لك فهم الـ DOM بشكل جيد، وإلا ستعاني في فهم ما يحدث، أو البعض يتغاضى عن ذلك ويستخدم التنقية بدون فهم، وأنا لا أنصحك بذلك أبدًا. بالنسبة لـ React Native، فهي تتيح لك بناء تطبيقات محمولة باستخدام JavaScript وتقوم بترجمة الكود إلى عناصر واجهة المستخدم الأصلية للمنصة التي تعمل عليها التطبيق، وبناء وتنسيق العناصر المرئية بدلاً من التعامل المباشر مع DOM و BOM. لكن فهم أساسيات DOM و BOM لا غنى عنه إذا أردت أن تصبح مطور ويب جيد وليس مستخدم للتقنيات فقط، ونصيحتي إليك هي بالتركيز على تعلم الأساسيات في أي شيء ثم انتقل لتعلم التقنيات مثل React وغيرها.
    1 نقطة
  9. DOM هو اختصار لـ Document Object Model وهو نموذج كائن المستند الذي يمكنك من خلاله الوصول إلى جميع عناصر مستند الـ HTML. BOM هو اختصار لـ Browser Object Model وهو نموذج كائن المستعرض الذي يمكّن JavaScript من التحدث مع المستعرض. في حالة تطوير تطبيقات الهاتف المحمول باستخدام لغة JavaScript، فإن الـ DOM والـ BOM ليس لهما أهمية كبيرة في React Native إذ يتم استخدام DOM و BOM مختلفين عن تلك الخاصة بالمتصفح ويجب عليك تعلم كيفية التعامل مع هذه الخصائص بالفعل. أما بالنسبة لـ ReactJS فهي مكتبة JavaScript لبناء واجهات المستخدم. وبما أنّ منطق المكوّنات مكتوب باستخدام JavaScript بدلًا من HTML، فبإمكانك تمرير الكثير من البيانات عبر تطبيقك بسهولة وإبقاء الحالة بعيدة عن DOM. ولكن، يجب على مطور الواجهات الأمامية أن يتعلم عن الـ DOM والـ BOM لأن ReactJS تعتمد على نظام DOM في كثير من المجالات.
    1 نقطة
  10. هل يجرى الاختبار بعد انتهاء كامل الدورة أو يكون بعد كل فصل؟
    1 نقطة
  11. تأكد من كتابة المسار بشكل صحيح: import {Butnave} from "src/Buttons/Butnave.js"
    1 نقطة
  12. لتصبح مهندس برمجيات في مجال الذكاء الاصطناعي، هناك عدة خطوات يمكنك اتباعها: اكتساب المعرفة الأساسية: يبدأ المسار عادة بفهم المفاهيم الأساسية في الذكاء الاصطناعي، مثل التعلم الآلي، والشبكات العصبية الاصطناعية، ومعالجة اللغة الطبيعية، والرؤية الحاسوبية، وغيرها. يمكنك البدء بدراسة المصادر التعليمية عبر الإنترنت، مثل الكورسات والمواقع والكتب المتخصصة. تعلم اللغات البرمجية: Python هي لغة برمجة شائعة جدًا في مجال الذكاء الاصطناعي، وتستخدم في تطبيقات تعلم الآلة ومعالجة البيانات وبناء النماذج الذكية. إذا كنت تعرف Python بالفعل، فهذا خطوة جيدة. ومع ذلك، فإن تعلم لغات أخرى مثل C++ يمكن أن يكون مفيدًا أيضًا، خاصة إذا كنت تعمل مع تنفيذ الخوارزميات المتقدمة على مستوى الأجهزة أو تطوير البرمجيات المحسَّنة للأداء. تعميق مهاراتك في تعلم الآلة وعلوم البيانات: يعتبر تعلم الآلة وعلوم البيانات جزءًا أساسيًا من مجال الذكاء الاصطناعي. ينصح بتعلم الخوارزميات والتقنيات الشائعة في تعلم الآلة، والتعرف على الأدوات والمكتبات المستخدمة في تحليل البيانات وبناء النماذج التنبؤية. التطبيق العملي والمشاريع العملية: قم بتطبيق المفاهيم والتقنيات التي تعلمتها عن طريق إنشاء مشاريع عملية. يمكنك بناء نماذج تعلم آلي، وتطوير تطبيقات تفاعلية، ومعالجة وتحليل البيانات. قم بإنشاء محفظة عمل تظهر مهاراتك وقدراتك في هذا المجال. متابعة التطورات والابتكارات: يواجه مجال الذكاء الاصطناعي تقنيات وأدوات جديدة بشكل مستمر. لذا، من المهم متابعة التطورات والأبحاث والابتكارات في هذا المجال من خلال قراءة المقالات العلمية ومشاركة في المجتمعات المتخصصة وحضور المؤتمرات والندوات. في النهاية، من المهم الاستمرار في التعلم وتطوير مهاراتك باستمرار في مجال الذكاء الاصطناعي، حيث يتطلب هذا المجال متابعة سريعة للابتكارات والتقنيات الجديدة.
    1 نقطة
  13. يفضل استخدام مكتبة Joi في المشاريع التي تحتوي على بيانات حساسة أو تطبيقات تتعامل مع البيانات الحساسة، مثل بيانات المستخدمين أو المعلومات المالية. يتم استخدام Joi للتحقق من صحة البيانات والتأكد من أن البيانات المدخلة تلبي المتطلبات اللازمة. يمكن استخدام Joi للتحقق من البيانات المدخلة في العديد من الأمور، مثل التحقق من البريد الإلكتروني الصحيح، التحقق من الأسماء، التحقق من رقم الهاتف والعناوين. من الأمثلة التي يمكن فيها استخدام Joi: تطبيق يتطلب إدخال بيانات المستخدم مثل الاسم والبريد الإلكتروني ورقم الهاتف، ويحتاج إلى التحقق من صحة هذه البيانات. تطبيق يتطلب إدخال معلومات مالية مثل الرقم السري للبطاقة الائتمانية، ويحتاج إلى التحقق من أن هذه المعلومات صحيحة. تطبيق يتطلب إدخال مواقع الويب أو العناوين الإلكترونية للتأكد من صحتها. من الجوانب الأخرى، ليس من الضروري استخدام Joi في كل المشاريع، وخاصة في المشاريع الصغيرة التي لا تتطلب التحقق من صحة البيانات بشكل كبير. بالإضافة إلى ذلك، يمكن استخدام بعض الحلول البديلة لـ Joi، مثل: مكتبة express-validator: تمكنك من تحقق الطلبات الواردة في تطبيق Node.js الخاص بك والتأكد من صحتها. مكتبة Yup: تستخدم للتحقق من صحة البيانات في React.js ويمكن استخدامها في تطبيقات الويب الأخرى. مكتبة Ajv: تستخدم للتحقق من صحة البيانات في JSON Schema. بشكل عام، يمكن استخدام Joi في المشاريع التي تتطلب التحقق من صحة البيانات بشكل كبير، ويمكن الاستعانة بالبدائل المذكورة أعلاه في المشاريع الصغيرة أو المشاريع التي لا تتطلب التحقق من صحة البيانات بشكل كبير.
    1 نقطة
  14. مكتبة Joi تعتبر سهلة الاستخدام وتوفر واجهة برمجة تطبيق (API) بسيطة وواضحة، وهي خيار جيد إذا كنت معتاد على استخدامها. لكن هنا مكتبة Yup أيضًا توفر واجهة برمجة سهلة الاستخدام وتحقق من البيانات بشكل مشابه لـ Joi، وإذا كنت تعمل على تطبيق React في نفس الوقت، فالأفضل استخدام Yup فهى أكثر تكاملاً مع بيئة العمل تلك. الفرق الرئيسي هو أن Joi هي مكتبة مستقلة تمامًا وتستخدم بشكل شائع في تطبيقات Node.js، في حين أن Yup هي مكتبة تستخدم على نطاق واسع في تطبيقات React وتدعم أيضًا استخدامها في Node.js. فإذا كنت تعمل على تطبيق React، فقد يكون استخدام Yup أكثر تكاملاً وسهولة مع بيئة العمل تلك، حيث أنها تتكامل بشكل أفضل مع نظام التحكم في النماذج الخاص بـ React وتوفر تعبيرًا أكثر سهولة عند تحديد قواعد التحقق. وإليك مثال: import React, { useState } from 'react'; import { useFormik } from 'formik'; import * as Yup from 'yup'; // تعريف مخطط التحقق باستخدام Yup const validationSchema = Yup.object().shape({ name: Yup.string().required('يرجى إدخال الاسم'), email: Yup.string().email('صيغة البريد الإلكتروني غير صحيحة').required('يرجى إدخال البريد الإلكتروني'), password: Yup.string().min(6, 'يجب أن تحتوي كلمة المرور على الأقل على 6 أحرف').required('يرجى إدخال كلمة المرور'), }); const MyForm = () => { const formik = useFormik({ initialValues: { name: '', email: '', password: '', }, validationSchema: validationSchema, onSubmit: (values) => { // إجراء عند تقديم النموذج بنجاح console.log(values); }, }); return ( <form onSubmit={formik.handleSubmit}> <div> <label htmlFor="name">الاسم:</label> <input type="text" id="name" name="name" onChange={formik.handleChange} onBlur={formik.handleBlur} value={formik.values.name} /> {formik.touched.name && formik.errors.name && <div>{formik.errors.name}</div>} </div> <div> <label htmlFor="email">البريد الإلكتروني:</label> <input type="email" id="email" name="email" onChange={formik.handleChange} onBlur={formik.handleBlur} value={formik.values.email} /> {formik.touched.email && formik.errors.email && <div>{formik.errors.email}</div>} </div> <div> <label htmlFor="password">كلمة المرور:</label> <input type="password" id="password" name="password" onChange={formik.handleChange} onBlur={formik.handleBlur} value={formik.values.password} /> {formik.touched.password && formik.errors.password && <div>{formik.errors.password}</div>} </div> <button type="submit">تأكيد</button> </form> ); }; export default MyForm; الكود يقوم باستخدام Yup لتعريف مخطط التحقق (validationSchema) الذي يحتوي على قواعد التحقق من صحة البيانات، ويطبق ذلك المخطط على النموذج الذي تم تعريفه باستخدام useFormik، وعرض الأخطاء في حالة عدم صحة البيانات في الوقت الفعلي، و تنفيذ الإجراء المحدد عند تقديم النموذج بنجاح. وإذا أردت الإطلاع على مكتبات أخرى يوجد Ajv وهي مكتبة تحقق من بيانات JSON تدعم معيار JSON Schema، توفر مرونة كبيرة في تحديد قواعد التحقق والتصفية وتدعم تخصيصات متقدمة.
    1 نقطة
  15. مكتبة Joi هي مكتبة شهيرة في عالم Node.js تستخدم للتحقق من صحة وتحليل وتنسيق البيانات. توفر Joi مجموعة قوية من الأدوات والوظائف للتحقق من البيانات والتأكد من تطابقها مع قواعد وشروط محددة. تحظى Joi بشعبية كبيرة في مجتمع Node.js للعديد من الأسباب. إليك بعض الحالات التي يفضل فيها استخدام مكتبة Joi: التحقق من صحة البيانات: إذا كان لديك بيانات تدخل إلى تطبيقك، مثل بيانات المستخدم المرسلة عبر نماذج أو طلبات API، فإن استخدام Joi يساعد في التحقق من صحة تلك البيانات وضمان أنها تفي بالمتطلبات المحددة. التحقق من بنية البيانات: يمكن استخدام Joi للتحقق من تنسيق وبنية البيانات، مثل التأكد من أن البيانات هي كائن JSON صحيح، أو أن السلسلة هي بريد إلكتروني صالح، أو أن رقم الهاتف مطابق لنمط محدد، وما إلى ذلك. توثيق البيانات: Joi يمكن استخدامه لإعداد وثائق توثيقية لبنية البيانات في التطبيق، مما يسهل فهم كيفية بناء البيانات وما هي المتطلبات المتوقعة. التحقق من البيانات في الموديلات: إذا كنت تستخدم إطار عمل مثل Express.js وتستخدم نماذج لتمثيل بيانات الموديلات، فيمكنك استخدام Joi للتحقق من صحة بيانات الموديلات قبل حفظها في قاعدة البيانات. بشكل عام، يعد استخدام Joi أمرًا مفيدًا وقويًا للتحقق من البيانات في تطبيقات Node.js. إذا كان لديك حاجة للتحقق من صحة البيانات أو توثيقها أو تنسيقها، فإن استخدام Joi قد يكون اختيارًا جيدًا وقد يساعد في تحسين جودة وموثوقية تطبيقك.
    1 نقطة
  16. المكتبة Joi هي مكتبة جيدة للتحقق من صحة البيانات في Node.js. يحبذ استخدام هذه المكتبة في المشاريع التي تحتاج إلى التحقق من البيانات المدخلة بشكل دقيق، مثل تطبيقات الويب التي تتعامل مع بيانات المستخدم. لتوضيح استخدام المكتبة، يمكنني إعطائك مثال بسيط على كيفية استخدامها. في المثال التالي، سنقوم بإنشاء مجموعة من القواعد للتحقق من صحة البيانات المدخلة: const Joi = require('joi'); const userInput = { username: 'mohammed', password: '123456', email: 'mohammed@example.com' }; const schema = Joi.object({ username: Joi.string() .alphanum() .min(3) .max(30) .required(), password: Joi.string() .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')) .required(), email: Joi.string() .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net', 'io'] } }) .required() }); const { error, value } = schema.validate(userInput); if (error) { console.log(error.details[0].message); } else { console.log('Validation successful!'); } في هذا المثال، يتم استخدام Joi للتحقق من صحة البيانات المدخلة من المستخدم. يتم تحديد القواعد باستخدام دوال مثل `alphanum` و `min` و `max` و `required` و `pattern` و `email`. يمكن استخدام هذه القواعد للتحقق من صحة بيانات المدخلات مثل اسم المستخدم وكلمة المرور والبريد الإلكتروني. إذا كانت البيانات التي تم إدخالها صحيحة ستظهر الرسالة "Validation successful!" في وحدة تحكم(console). وإذا كان هناك خطأ، سيتم عرض رسالة الخطأ المناسبة. يوجد العديد من الفوائد التي تقدمها مكتبة Joi لتحقق من صحة البيانات، ومن بين هذه الفوائد: 1. زيادة الأمان والموثوقية: يتيح استخدام Joi التحقق من صحة البيانات تجنب الأخطاء التي قد تحدث بسبب إدخال بيانات غير صحيحة أو غير متوقعة من قبل المستخدمين، مما يجعل التطبيق أكثر أمانًا. 2. توفير الوقت والجهد: توفر Joi الوقت والجهد اللازمين للتحقق من صحة البيانات يدويًا، حيث أنها تساعد على تحديد القيود والقواعد المطلوبة لتحقق من صحة البيانات بدقة وسرعة (من خلال الدوال الجاهزة الخاصة بها). 3. توفير الكود: تساعد Joi على توفير الكود المطلوب لتحقق من صحة البيانات، حيث أنها توفر واجهة برمجة التطبيقات (API) بسيطة وسهلة الاستخدام لتحديد القيود والقواعد المطلوبة. 4. تقليل الأخطاء: باستخدام Joi، يمكن تقليل الأخطاء التي قد تحدث بسبب إدخال بيانات غير صحيحة أو غير متوقعة من قبل المستخدمين، مما يساعد في تجنب المشاكل والأخطاء التي يمكن أن تتسبب في تعطيل التطبيق أو تسبب أضرارًا للمستخدمين. 5. تحسين تجربة المستخدم: تحسن Joi تجربة المستخدم في التطبيقات، حيث يتم تجنب إرسال البيانات الغير صحيحة أو الغير متوقعة، مما يجعل التطبيق أكثر سهولة ويسرًا في الاستخدام. 6. مرونة وقابلية التخصيص: يمكن تعديل Joi بسهولة لتحقيق الاحتياجات الخاصة بالتطبيق، حيث يمكن تحديد القيود والقواعد المطلوبة بناءً على نوع البيانات المطلوب تحققها، مما يساعد في تحقيق المرونة والقابلية للتخصيص.
    1 نقطة
  17. يمكن استخدامها في كل المشاريع التي تحتاج validation حيث ان وظيفة المكتبة الرئيسية هي التحقق من البيانات الواردة في الطلبات (scheme validation). وهذا مثال على كيفية استخدامها : const Joi = require('joi'); const schema = Joi.object({ username: Joi.string() .alphanum() .min(3) .max(30) .required(), password: Joi.string() .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')), repeat_password: Joi.ref('password'), access_token: [ Joi.string(), Joi.number() ], birth_year: Joi.number() .integer() .min(1900) .max(2013), email: Joi.string() .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } }) }) .with('username', 'birth_year') .xor('password', 'access_token') .with('password', 'repeat_password'); schema.validate({ username: 'abc', birth_year: 1994 }); // -> { value: { username: 'abc', birth_year: 1994 } } schema.validate({}); // -> { value: {}, error: '"username" is required' } // Also - try { const value = await schema.validateAsync({ username: 'abc', birth_year: 1994 }); } catch (err) { }
    1 نقطة
  18. يُستخدم ‪‎wordpress‬ على نطاق واسع في المدونات، مواقع المجلات، وبعض المواقع الإخبارية، يعمل استنادًا على PHP و MYSQL، ويتميز بسهولته، وانتشار الدعم له بشكل كبير للغاية (من ناحية الإضافات والقوالب). إذا كنت تنوي إنشاء مدوّنة أو مجلة، أو موقع محتوى (إخباري، تقني، تعليمي) فأنصحك بهذا الخيار. مواده التعليمية كثيرة ومنها ما هو متوفر على الأكاديمية، ويدعم العربية. أما Drupal فيُستخدم للمواقع الأكبر والأكثر تقدمًا، والتي تملك عادةً مُبرمجًا يعمل على تطوير وتخصيص Drupal بالأسلوب الذي يلائمها، وفي الحقيقة يصعب استخدامه على المدونين والكتّاب أو الفئات غير التقنية والأشخاص من خلفيات غير تقنية/برمجية، لا سيما مع قلّة عدد الإضافات والقوالب الجاهزة التي يُمكن تثبيتها عليه مقارنةً مع ووردبريس.
    1 نقطة
×
×
  • أضف...