لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 09/18/21 في كل الموقع
-
لدي جدول في صفحة html وأريد تحويله إلى ملف اكسيل, كيف يمكنني تحقيق ذلك؟3 نقاط
-
حاولت أن أقوم بإرجاع رد response عبارة عن خطأ Forbidden من خلال الكود التالي: raise HttpResponseForbidden() ولكن ظهر لي الخطأ التالي: exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden كيف أقوم بإرجاع خطأ Forbidden في جانغو Django؟3 نقاط
-
أحاول أن أقوم بإرسال طلب من نوع post من خلال Ajax في jQuery، لكن كل الطلبات تعيد نفس الخطأ وهو: [18/Sep/2021 21:58:29] "POST /comments/ HTTP/1.1" 403 2332 أنا متأكد من أنني هناك شيئًا ما مفقود، لكنني لا أعرف ما هو، لأنني متأكد من أن الطلبات التي أرسلها إلى الخادم صحيحة. كيف أحل هذا الخطأ؟2 نقاط
-
عندما انشئ منشورات كثيره و احذف اولهم مثلا او من المنتصف يبقي ال id لكل المنشورات التي بعده بنفس ال id القديم الخاص بها و أنا لا أريد ذلك أنا أريد إن يكون ال id على حسب الترتيب الفعلي لهم كيف ذلك2 نقاط
-
يقوم برنامج تحميل الملفات بإنشاء صورتين منفصلتين في مجلد الإنشاء الخاص بي. أحدهما هو الاسم الصحيح ويتم حفظه في المسار الصحيح ، والآخر يتم تخزينه في الإنشاء وليس البناء و هو 0 بايت هذا هو الملف الذي يتم ربطه في ملف index.html النهائي في مجلد البناء. لقد حددت كلاً من outputPath و publicPath. يبدو أن publicPath لا تفعل أي شيء في الواقع ، بغض النظر عما أضعه هناك. هل أنا أسيء فهم ما يفعله؟ module.exports = { entry: { index: './app/main.js', vendor: './app/vendor.js' }, output: { path: path.resolve(__dirname, './build'), filename: '[name].[contenthash].js', }, module: { rules: [ { test: /\.js$/, exclude: [/node_modules/, /api/, /tests/, /coverage/], use: 'babel-loader' }, { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, { test: /\.html$/, use: 'html-loader' }, { test: /\.(svg|png|jpg|gif)$/, use:{ loader: 'file-loader', options: { name: '[name].[hash].[ext]', outputPath: 'images/', publicPath: 'images/' } } }, ] }, plugins: [ new HtmlWebpackPlugin({ template: './app/index.html' }), new CleanWebpackPlugin() ] }; <img src="465107fe07e3ec18a463.png">2 نقاط
-
سنتعرف في هذا المقال على مفهوم واجهة برمجية التطبيقات Application Programming Interface، هذا المصطلح السهل المعقد حيث سنحاول فهمه وكيفية بناء مواقع الويب والتطبيقات الحديثة في يومنا هذا بالاعتماد على الواجهات البرمجية ونجيب على سؤال مهم وهو كيف ترتبط الواجهة الأمامية مع الواجهة الخلفية لتطبيق الويب أو الموقع الإلكتروني. هذا المقال هو جزء من سلسلة مقالات حول الواجهة البرمجية API وكيفية الاستفادة منها في بناء تطبيق ويب: مدخل إلى الواجهات البرمجية API الاتصال بواجهة زد البرمجية وفهم عملية الاستيثاق والتصريح أمثلة عملية لاستخدام واجهة برمجة متاجر زد zid API تطوير تطبيق عملي يزيد من احتفاظ العملاء عبر واجهة زد البرمجية مفهوم الواجهة البرمجية للتطبيقات API قبل أن ندخل في أية تفاصيل تقنية عن موضوعنا اليوم، سأحكي لك يومًا في حياة علي. علي هو مبرمج تطبيقات ويب يعمل في إحدى الشركات التقنية العربية، علي يحب تجربة المأكوﻻت المختلفة، بحيث يجرب في كل يوم أكلة جديدة في المطاعم المحيطة وإن سمع بافتتاح مطعم جديد بالقرب من مكان عمله، فإنه ﻻ يتوانى في زيارته وتذوق مختلف اﻷطباق التي يقدمها. ذهب علي ﻷحد المطاعم التي فتحت أبوابها مؤخرا، واختار مكانا هادئًا ونادى النادل يسأله عن اﻷطباق التي يقدمونها من أجل أن يأخذ طلبيته إلى الطباخ لتحضير ما طلبه علي. دوَّن النادل ما يريد علي تناوله من مأكوﻻت وذهب بها إلى الطباخ من أجل تحضيرها، بعد مدة وجيزة، عاد النادل إلى علي وهو يحمل كل ما طلبه وقدمها متمنيا أنه يعجبه اﻷكل، تذوق علي المأكوﻻت وأبدى إعجابه اﻷولي بها، وبدأ في اﻷكل إلى أن أنهى كل ما في الصحون، دفع الحساب، وخرج من المطعم شاكرا النادل على حسن اﻷستقبال. هل تتساءل اﻵن، ما علاقة هذه القصة بالواجهات البرمجية؟ وهل تساءلت يومًا عن طريقة عمل تطبيقات الهواتف الذكية، وكيف تتصل بخوادم الشركات المطورة لها، هل استطعت الوصول إلى إجابات كافية عن ذلك؟ سأبين لك ما العلاقة بين المثال السابق والواجهات البرمجية وكيف أن الواجهات البرمجية ماهي إﻻ تطبيق لمثالنا باختلاف بسيط وهو مكان التطبيق فقط، فمثالنا هو من الواقع الذي نعيشه يوميًا ونراه دائمًا حتى تعودنا عليه حتى أصبحنا ﻻ ندركه، أما الواجهات البرمجية، فقد أصبحت جزءًا ﻻ يتجزأ من حياة مبرمج المواقع وتطبيقات الويب المهنية. كنت قد نوهتك ﻷن تسأل نفسك عن طريقة ربط تطبيقات الهواتف الذكية مع خوادم الشركات. هنالك طريقتين لربط تطبيقات الهواتف الذكية مع خوادم الشركات المطورة، الطريقة اﻷقدم تسمى SOAP وهي اختصار لجملة Simple Object Access Protocol، أما الطريقة اﻷحدث فهي الواجهة البرمجيةللتطبيقات API وهي اختصار لجملة Application Programming Interface، وهي التي سأركز عليها، ولكن باختصار، API هي طريقة لتواصل البرمجيات في ما بينها باستخدام صيغة JavaScript Object Notation والتي تعرف اختصارا بـ JSON. لن أدخل في التفاصيل التاريخية وسأبقى مركزا على الجانب التقني فقط، لهذا أتوقع منك أن تحاول البحث عن تاريخ ابتكار وتطوير تقنية API والتقنية المكملة لها REST والتي هي اختصار لجملة REpresentational State Transfer. مصطلحات وجب معرفتها سنسرد بعض المصطلحات باللغة الإنجليزية والعربية الضروري على كل مطور ويب أن يعرفها: Backend: الواجهة الخلفية، هي المسؤولة عن العمليات المنطقية للنظام، تتعامل مع الملفات أيضا ومع قواعد البيانات. Frontend: الواجهات الأمامية، كل ما يراه المستخدم ويتعامل معه بشكل مباشر، ويتم ربطها مع النظم الخلفية بما يعرف بالواجهة البرمجية للتطبيقات API. API: الواجهة البرمجية للتطبيقات، هي حلقة الوصل ما بين النظم أو الواجهة الخلفية والواجهات الأمامية. Request: الطلب الذي يرسله العميل (قد تكون الواجهة الأمامية) إلى الخادم Server الموجود في الواجهة الخلفية. Header: ترويسة الطلب Request المرسل والذي يحوي بعض البيانات الوصفية التي تصف الطلبية وحالها وأية معلومات إضافية مطلوبة. Body: جسم أو متن الطلب المرسل والذي يحوي غالبًا على البيانات المتبادلة في الطلبية. Response: استجابة أو رد الخادم وهي المعلومات الراجعة من الخادم إلى العميل مقدم الطلب ردًا على طلبه. تحوي المعلومات الراجعة من الخادم إلى العميل على ترويسة Header وأيضا على متن Body. Endpoint: نقطة الوصول، وهي نقطة اتصال الواجهات الأمامية مع موقع محدد في الواجهة الخلفية أي نقطة محددة تتصل عبرها الواجهة الأمامية مع الواجهة الخلفية لغرض محدَّد. HTTP Client Software: عميل خادم HTTP وهو برنامج يساعد على تسريع التعامل مع الواجهات البرمجية بتوفير آلية واضحة في عملية إرسال واستقبال الطلبيات والردود. هل تعرفت على أي من المصطلحات التي ذكرناها قبل قليل؟ لا بأس إن لم تفعل، فسنشرحها لك حتى تكون لديك معرفة مبدئية بموضوع الواجهات البرمجية. لماذا نستخدم الواجهات البرمجية للتطبيقات APIs وما هي فائدتها؟ تُعَد الواجهات البرمجية للتطبيقات طبقة الحماية الأولى First Security Layer للبرمجية الموجودة على خادم الويب، بسبب أنها تفصل ما بين النظم الخلفية والعمليات الجارية على قواعد البيانات عن الواجهات الأمامية سواءً كانت صفحات ويب عادية أو تطبيقات هواتف ذكية. أي أن أي تطبيق ويب أو موقع اليوم يتألف من واجهة خلفية وواجهة أمامية وواجهة برمجية تعد وصلة وصل بينهما. أما الواجهة الخلفية، فتحوي على كامل العمليات والإجراءات والخدمات التي يوفرها التطبيق أو الموقع مثل معالجة صورة أو بيانات أو حتى تقديم خدمة الطقس. أما الواجهة الأمامية فهي الواجهة التي يراها المستخدم والمسؤولة عن عرض البيانات القادمة من الواجهة الخلفية للمستخدم بصورة مناسبة ومتناسقة مع إرسال البيانات من المستخدم إلى الخادم بالشكل الذي يطلبها، فالبيانات المتبادلة تلك تكون بشكلها الخام (تستعمل غالبًا صيغة JSON أو حتى صيغة XML)، أما الواجهة البرمجية للتطبيقات API فهي صلة الوصل كما ذكرنا ووظيفتها استلام البيانات من الواجهة الأمامية وتسلميها للواجهة الخلفية وإرسال البيانات من الواجهة الخلفية إلى الأمامية بطريقة وأسلوب موحد أي هي التي تؤمن عملية التفاهم بين الواجهة الأمامية والخلفية لتأمين التخاطب فيما بينهما. كيف تعمل الواجهات البرمجية للتطبيقات API سأحاول قدر اﻹمكان تبسيط آلية عمل الواجهات البرمجية بمثال عملي من حياتنا اليومية، وليكن مثلا منصة فيسبوك. كما تعلم أنه بإمكانك الدخول إلى حسابك في فيسبوك من أي جهاز تريد، سواءً من هاتفك الذكي أو من جهازك اللوحي أو من جهاز الحاسوب بل بإمكانك الدخول منها مجتمعة وفي نفس الوقت، وهنا يجب أن تطرح سؤاﻻ مهمًا، كيف تتم مزامنة حسابك في كل تلك اﻷجهزة؟ هنا تأتي أهمية الواجهة البرمجية، بحيث أن كل تلك اﻷجهزة متصلة بنظام خلفي واحد وكلها تتصل بالواجهة البرمجية التي تكون حلقة الوصل ما بين كل اﻷجهزة المتصلة و النظام الخلفي. سنأخذ مثاﻻ من حياتنا اليومية وهو موقع فيسبوك، سنقوم بالدخول إلى حسابنا باستخدام الأجهزة التي بحوزتنا، إن لم تكن لديك أجهزة غير جهاز الحاسوب، افتح أكثر من متصفح، ليس نفس المتصفح، مثلا متصفح كروم Google Chrome ومتصفح فايرفوكس Mozilla Firefox، في هذه الحالة يمكنك فتح حسابك 4 مرات باستخدام التصفح الخفي، في متصفح كروم يسمى Incognito Mode أما في متصفح فايرفوكس فيسمى Private Mode. هل قمت بذلك؟ كيف تستطيع إرسال رسائل إلى أصدقائك من أي متصفح وتشاهدها في نفس الوقت من بقية المتصفحات؟ قم بالدخول إلى حسابك على فيسبوك من هاتفك الذكي، من التطبيق الرسمي أو من المتصفح، هل تستطيع أن ترى الرسائل التي قمت بإرسالها على هاتفك أيضا، كيف يحدث ذلك؟ كيف تستطيع الدخول إلى حسابك من أماكن مختلفة في نفس الوقت؟ سأشرح العملية بأكملها بشكل بسيط وبالمقارنة مع مثالنا في بداية المقال وبدون الدخول في التفاصيل الدقيقة في الوقت الحالي. عند دخول علي مطور الويب إلى المطعم، كان عليه أن يختار طاولة محددة برقم حتى يعلم النادل موقعه وأنه يريد تناول الطعام وبالتالي يستطيع تقديم مختلف الخدمات التي يعرضها المطعم. هنا الطاولة وتفاصيلها (من رقم وحجم وغيرهما) تعتبر المكان المتفق عليه من أجل اﻹستفادة من خدمات المطعم، ويمكن القول أنها نقطة الوصول إلى خدمات المطعم Endpoint. في حالة موقع فيسبوك، وعند قيامك فتح التطبيق مثلا، سيتصل تطبيقك بخادم الشركة، في نقطة متفق عليها ومحددة مسبقًا في التطبيق وفيها فقط يستطيع الخادم أن يقدم خدماته للتطبيق. جاء النادل إلى عليٍ والذي يسمى العميل client ليأخذ الطلبات منه، ودون أية ملاحظات أو أي خدمات أخرى، وبعدها ذهب إلى المطبخ ليخبر الطباخ بالطلبات من أجل تحضيرها. هنا نسمي العملية: إرسال طلب Send Request من العميل علي إلى الطباخ في المطعم مقدمة الخدمة. في حالة موقع فيسبوك، أقرب عملية لذلك المثال عملية تسجيل الدخول حيث تُدخل اسم المستخدم الخاص بك مع كلمة المرور، تأخذ الواجهة الأمامية منك هذه المعلومات وترسلها للواجهة الخلفية لموقع فيسبوك لتتحقق منها ومن الطلب الخاص بك، طلب تسجيل الدخول. يستلم الطباخ الطلبية ويتأكد من أنها طلبية صالحة ويمكنك تحضيرها (أي ليست طلبية شراء ملابس مثلًا) ثم يبدأ بتحضيرها وعندما ينتهي منها، يعطيها للنادل الذي يرتبها بدوره في صينية ويأخذها إلى علي ليضعها على طاولته حتى يتسنى له البدء في تذوقها. هذه العملية تسمى: اﻹستجابة Send Response أي استجاب الطباخ لطلبية علي وقدم له ما يريد. وفي حالة موقع فيسبوك، إن كانت المعلومات المقدمة صالحة، سيقوم خادم فيسبوك بالسماح لك بالدخول واستعراض مختلف الصفحات واﻷجزاء الخاصة به والاستفادة من خدمته التي يقدمها. هل اتضحت الصورة العامة اﻵن؟ ببساطة، الواجهة البرمجية تنفذ عمل النادل في المطعم، حيث أن النادل يقوم بأخذ طلبات الزبائن إلى الطباخ وفريقه لتحضيرها وبعد ذلك، يقوم بأخذ تلك استجابة الطباخ لتلك الطلبات إلى أصحابها، أي أن الواجهة البرمجية تأخذ الطلبات من المستخدمين (الواجهة الأمامية) إلى النظام الخلفي لتقوم بعمل محدد ومن ثم تعيد النتائج المتحصل عليها إلى طالبيها أي تعيدها للواجهة الأمامية مرةً أخرى. خاتمة تعرفنا على ماهية الواجهة البرمجية للتطبيقات وأهم المصطلحات فيها وكيف يستفيد منها المطورون في بناء تطبيقات الويب الحديثة واستثمارها في التواصل ما بين الواجهة الأمامية والخلفية لتطبيقات الويب والمواقع الحالية، فالتعامل مع الواجهة البرمجية للتطبيقات ضروري لأي مبرمج متخصص في تطوير الويب، وعليه أن يعي مفهوم الواجهة البرمجة تمامًا إذ أصبح هذا المفهوم هو المفهوم الحديث في التواصل ما بين الواجهة البرمجية الخلفية والأمامية للمواقع وتطبيقات الويب، أضف إلى ذلك أن الكثير من الخدمات والمواقع أصبحت تتيح واجهتها البرمجية (مثل الواجهة البرمجية للمطورين من فيسبوك وتويتر وغيرهما) للاستفادة منها أو حتى هنالك واجهة برمجية مخصصة فقط لتقديم خدمات محددة (مثل واجهة برمجية للحصول على معلومات الطقس) وتقدمها للمطورين للاستفادة من تلك الخدمات في مختلف المشاريع. اقرأ أيضًا المقال التالي: الاتصال بواجهة زد البرمجية وفهم عملية الاستيثاق والتصريح كيفية إنشاء متجر إلكتروني متكامل باستعمال منصة زد الواجهة البرمجية Fetch API في جافاسكريبت1 نقطة
-
أهلًا بكم في الدرس الثاني من سلسلة تعليم بوتستراب 5، سنتعلم في هذا الدرس كيف ننشئ شريط تنقّل باستخدام بوتستراب من خلال موقع بسيط جدًا وظيفته توضيح هذه الفكرة، ومن ثمّ سنعمل على دعم اللغة العربية من خلال جعل جهة الموقع من اليمين إلى اليسار. سنركّز على النقاط التالية في هذا الدرس: تجهيز البنية التحتية للمشروع معاينة الموقع ضمن خادوم تجريبي لبُّ الموضوع: شريط التنقّل في بوتستراب تعديل الموقع ليدعم الاتجاه من اليمين إلى اليسار تجهيز البنية التحتية للمشروع لنعمل على تجهيز البنية التحتية لمشروعنا الخاص ببيع الدورات التعليمية "نبيه". أنشئ مجلّدًا جديدًا في المكان الذي ترغبه وسمّه nabih. انتقل بعد ذلك إلى Visual Studio Code واختر من القائمة File الأمر Open Folder ثم انتقل إلى المجلّد الذي أنشأته توًّا ثم اختر Select Folder لفتحه. أصبحت الآن جاهزًا للبدء بإضافة ملفات المشروع. ستلاحظ في الجهة اليسرى من نافذة Visual Studio ظهور المجلّد الذي اخترناه قبل قليل مع توفّر إمكانية إضافة ملفات أو مجلّدات أخرى إليه كما في الشكل التالي: أضف الملف index.html الذي سيمثّل ملف الواجهة الرئيسية في موقعنا. أضف أيضًا المجلدين التاليين: css الخاص بملفات التنسيق و images المجلّد الذي سنضع فيه الصور المستخدمة بالموقع (سنحتاج إليه في دروس لاحقة). أضف أيضًا الملف styles.css ضمن المجلّد css. سيكون هذا الملف في درسنا هذا فارغًا، ولكن سنعمل على استخدامه في دروس لاحقة. ستحصل في النهاية على شكل شبيه بالتالي: افتح الملف index.html بالنقر المزدوج عليه ثم انسخ الكود التالي إليه: <!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <title>السلام على الجميع!</title> </head> <body> <h1>Hello, world!</h1> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> </body> </html> احفظ التغييرات الأخيرة. وبهذا يصبح الملف index.html جاهزًا للمعاينة. معاينة الموقع ضمن خادوم تجريبي إذا كنت تذكر في المقال الأول من هذه السلسلة، فقد أضفنا الإضافة Live Server إلى Visual Studio Code. سنستخدم هذه الإضافة الآن لمعاينة الصفحة index.html ضمن المتصفّح الإفتراضي. انقر بزر الفأرة الأيمن على الملف index.html ثم اختر الأمر Open with Live Server. سيؤدي ذلك إلى فتح نافذة أو لسان من المتصفّح الافتراضي على حاسوبك، وسترى الآن الصفحة index.html وقد ظهرت محتوياتها ضمن نافذة المتصفّح. ستحصل على شكل شبيه بما يلي: يعد هذا مؤشرًا على أنّ الأمور تجري على ما يرام. لاحظ العنوان الظاهر في شريط العنوان في نافذة المتصفّح من الشكل السابق: 127.0.0.1:5501 العنوان 127.0.0.1 هو عنوان IP للجهاز المحلّي. أمّا المنفذ 5501 فهو المنفذ الذي تُصغي فيه الإضافة Live Server للطلبات الواردة من المتصفح، يمكن بطبيعة الحال أن يختلف هذا الرقم على حاسوبك. شريط التنقل في بوتستراب تمتلك معظم المواقع على الإنترنت شريطًا رئيسيًا يتموضع عادةً في الجزء العلوي من الصفحة. يحتوي هذا الشريط على روابط تساعد في التنقّل السريع بين أجزاء الموقع. من الممكن أن تكون بعض هذه الروابط على شكل أزرار. يمكن أن يؤدي النقر على بعض هذه الأزرار إلى ظهور قائمة منسدلة مثلًا تحتوي على أوامر أخرى. كما ويمكن أن يحتوي هذا الشريط على مربع نص يسمح للمستخدمين بالبحث ضمن الموقع، وغيرها من المتطلّبات الأخرى. يدعم بوتستراب شريط القائمة هذا بصورة ممتازة. فعند ضبط بعض أصناف التنسيق القليلة ستحصل على شريط تنقّل عصري يلبّي احتياجاتك المتنوّعة. شريط تنقل بسيط لنبدأ بتشكيل شريط تنقّل بسيط. الكود التالي هو نسخة معدّلة عن الكود الموجود في صفحة التوثيق الخاصة الخاصة بشريط التنقّل في بوتستراب. انسخ الكود التالي إلى الملف index.html وضعه مكان العنصر <h1> الذي يحتوي على رسالة الترحيب التي رأيناها في الفقرة السابقة: <nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="#">نبيه</a> <ul class="navbar-nav me-auto"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="#">رابط فعال</a> </li> <li class="nav-item"> <a class="nav-link" href="#">عادي1</a> </li> <li class="nav-item"> <a class="nav-link" href="#">عادي2</a> </li> <li class="nav-item"> <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">غير فعال</a> </li> </ul> </div> </nav> غيّر أيضًا عنوان الصفحة (ضمن الوسم title) ليصبح "دورات نبيه". بعد حفظ التغييرات ستحصل على الشكل التالي في المتصفح (إذا لم تظهر التغييرات فورًا، يمكنك تحديث الصفحة ضمن المتصفّح): شرح الكود السابق سنتحدّث بشيء من الإسهاب عن الكود السابق كونه أساسي في بناء أشرطة التنقّل في بوتستراب. إذا نظرت إلى الكود السابق سترى أنّ العنصر الأساسي المستخدم هنا هو nav وهو عنصر HTML يُستخدم عادةً عندما نريد بناء شريط تنقل في صفحات الويب. يمكن أيضًا استخدام عنصر div عادي بدلًا من العنصر nav، ولكن عندها سنحتاج إلى بعض التعديلات الطفيفة. لذلك سنبقي على العنصر nav. لاحظ أيضًا أصناف التنسيق المستخدمة مع العنصر nav التي تأتي مع بوتستراب: navbar navbar-expand-lg navbar-light bg-light سنتحدّث هنا قليلًا عن هذه الأصناف الأربعة: الصنف navbar فهو يمنح العنصر nav هيئة شريط التنقّل مباشرةً. حيث يصبح متجاوبًا مع قياسات الشاشات المختلفة، ويقبل احتواء العناصر المفيدة الأخرى مثل العلامة التجارية branding الخاصة بالموقع، وروابط التنقّل، وإمكانية ضم الأزرار ضمن قائمة مطوية واحدة تفتح بزر collapsing للحد من عرض الشريط في حال الشاشات الصغيرة كما سنرى ذلك فيما بعد. يحتاج الصنف navbar كي يعمل بطريقة صحيحة إلى الصنف navbar-expand-lg وأخواته navbar-expand-{-sm|-md|-lg|-xl|-xxl} . ووظيفة هذه الأصناف هي السماح بنشر محتويات شريط التنقّل بشكل أفقي. جرب أن تزيل هذا الصنف، لتجد أنّ محتويات شريط التنقّل قد أصبحت مكدّسة عموديًا. بالنسبة للصنف navbar-light فهو يتحكم بالنمط theme يوجد ثلاثة أنماط رئيسية في بوتستراب هي: النمط الفاتح navbar-light والنمط الغامق navbar-dark والنمط الرئيسي navbar-primary. تتحكم هذه الأصناف بلون الخط للعناصر الموجودة ضمن شريط التنقّل nav. تعمل الأصناف الثلاثة السابقة مع الصنف الذي يتحكم بلون الخلفية لشريط التنقّل وهو عبارة عن مجموعة من الأصناف مثل: bg-light و bg-dark و bg-primary و bg-success و bg-warning. لكي تحصل على أفضل النتائج استخدم الصنف bg-light مع الصنف navbar-light والصنف bg-dark مع الصنف navbar-dark. الحرفان bg من الصنف bg-light أو الصنف bg-dark أو غيرهما، يعبّران عن الكلمة background أي الخلفية. يجعل الصنف bg-light خلفية شريط التنقّل ذا لون فاتح. كما أنّ الصنف bg-dark يجعل الخلفية تبدو غامقة، وهكذا. بالنسبة للأصناف الباقية، جرّب استخدام مزيج من أصناف التنسيق مع أصناف الخلفية لكي تختار منها ما يناسبك. جرب مثلًا النمط الغامق navbar-dark مع bg-success وهكذا. يدعم شريط التنقّل في بوتستراب (ومحتوياته أيضًا) الشكل المرن أو المتدفق Fluid في التصميم. بمعنى أنّ شريط التنقّل ينتشر أفقيًا ليحاول تعبئة عرض الشاشة المتاح. يمكن استخدام أي حاوية Container تراها مناسبة للتحكّم في مدى الانتشار الأفقي. هذا ما يبرّر استخدامنا لعنصر div مع الصنفcontainer-fluid الموجود ضمن العنصر nav مباشرةً (انظر الكود السابق). في هذه الحالة استخدمنا هذه الحاوية لضبط الانتشار الأفقي لمحتويات شريط التنقّل. على العموم يمكننا استخدام نفس التقنية تمامًا مع العنصر nav نفسه. سنتحدث عن الحاويات لاحقًا في هذه السلسلة. ولكن إذا أردت معرفة فائدة وجود هذه الحاوية. أزل صنف التنسيق container-fluid من عنصر div الذي يأتي ضمن العنصر nav مباشرةً لترى كيف يؤثّر وجودها على محتويات شريط التنقّل. سنضع ضمن عنصر div (الذي يحوي الصنف container-fluid) محتويات شريط التنقّل. والتي تنحصر في مثالنا هذا على اسم الموقع، بالإضافة إلى أربعة عناصر توضّح أنواع الروابط التي يمكن وضعها ضمن شريط التنقّل. قطعة الكود التالية موجودة ضمن عنصر div ذا الصنف container-fluid من الكود السابق: <a class="navbar-brand" href="#">نبيه</a> <ul class="navbar-nav me-auto"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="#">رابط فعال</a> </li> <li class="nav-item"> <a class="nav-link" href="#">عادي1</a> </li> <li class="nav-item"> <a class="nav-link" href="#">عادي2</a> </li> <li class="nav-item"> <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">غير فعال</a> </li> </ul> نضع عادةً اسم الموقع ضمن عنصر الارتباط التشعبي a. سيكون لهذا العنصر التنسيق navbar-brand ليُنسّق على شكل علامة تجارية أو أيقونة واضحة للموقع. يمكن بالطبع إضافة صورة لاسم الموقع بإضافة عنصر صورة كما سنرى فيما بعد. بعد عنصر الارتباط التشعبي وضعنا عنصر القائمة غير المرتبة ul وهي التي ستحوي الروابط الرئيسية على شريط التنقّل. لاحظ كيف وضعنا الصنف navbar-nav لهذه القائمة كي تنسجم مع شريط التنقل الموضوعة ضمنه. ولاحظ أيضًا وجود صنف آخر هو me-auto. أول حرفين من اسم هذا الصنف يشيران إلى الكلمتين margin end، وتعنيان الهامش من النهاية. مع الكلمة -auto يعني ذلك أنّنا سنجعل الهامش من الطرف النهائي تلقائي أي أنّه سيأخد أكبر هامش ممكن من الطرف النهائي، وهذا ما سيجعل عنصر القائمة يُزاح كاملًا نحو اليسار (نحو البداية) بجوار اسم الموقع (جرب إزالة هذا الصنف وانظر ماذا سيحدث). قد تتسائل عن سبب استخدام تعبير "الهامش من النهاية" في حين أنّه كان من الممكن استخدام التعبير "الهامش من اليمين" فحسب! الجواب على ذلك بسيط. باستخدام هذا التعبير الرائع نستطيع إكساب موقعنا قابلية الاتجاه من اليمين إلى اليسار بكل بساطة. فعندما يكون اتجاه موقعنا من اليسار إلى اليمين تكون البداية من اليسار والنهاية من اليمين أمًا عندما يكون اتجاه موقعنا من اليمين إلى اليسار يحدث العكس! بمعنى آخر أنّه يمكن تعديل اتجاه موقعنا البسيط كاملًا ليصبح من اليمين إلى اليسار (بدلًا من الوضع الحالي) وذلك بتعديل بسيط جدًا في الموقع كما سنرى ذلك بعد قليل. قبل الإصدار 5 من بوتستراب، كان من الممكن الوصول إلى نفس النتيجة من خلال استخدام الصنف mr-auto وهو اختصار للكلمات: margin right auto، وتعني أنّ الهامش من الطرف الأيمن سيكون تلقائي. من الواضح أنّ هذا الصنف مفيد عندما عندما يكون اتجاه الصفحة من اليسار إلى اليمين. ولكن عندما يكون اتجاه الصفحة من اليمين إلى اليسار، سيكون استخدام هذا الصنف غير مناسب كما هو واضح. هذا ما كان يجبر المطورين على إنشاء قالبين منفصلين لصفحات الموقع في حال كان هناك حاجة لدعم لغتين باتجاهين مختلفين (مثل اللغة العربية، واللغة الانجليزية). وصلنا الآن إلى عناصر القائمة li. في الحقيقة هي عناصر بسيطة يحمل كل منها الصنف nav-item، ويحوي كل منها عنصر ارتباط تشعبي a. ولكل عنصر ارتباط تشعبي منها الصنف nav-link. العنصر الأوّل الذي يحوي النص "رابط فعال" سيكون له بالإضافة للصنف nav-link الصنف active للإشارة إلى أنّ الرابط الحالي يُشير إلى الصفحة الحالية التي تُعرض أمام المستخدم. وهذا أمر مفيد كما هو واضح. أمّا العنصران الثاني والثالث اللذان يحملان النص "عادي1" و "عادي2" على الترتيب فهما عنصران عاديان افتراضيان على شريط التنقّل. أمّا العنصر الأخير: "غير فعّال" فقد نحتاج أحيانًا إلى جعل أحد الارتباطات على شريط التنقّل غير فعّالة، وهذا يمكن الحصول عليه بتطبيق الصنف disabled كما هو واضح. هذا كل شيء! في الفقرة التالية سنحوّل الموقع السابق إلى الاتجاه الذي يناسب اللغة العربية. تعديل الموقع ليدعم الاتجاه من اليمين إلى اليسار بقي علينا إضافة بعض اللمسات الأخيرة لكي نُكسب الموقع الاتجاه المناسب لدعم اللغة العربية. في البداية أود أن أشير إلى أنّ ميزة الاتجاه من اليمين إلى اليسار RTL هي ميزة تجريبية في بوتستراب حتى وقت كتابة هذا المقال. ولكن ذلك لا يمنع بالطبع من استخدامها لأنّه من المتوقّع في الفترة القريبة القادمة أن تصبح نهائية بعد التأكّد من استقرارها. نحتاج لاستخدام الاتجاه من اليمين إلى اليسار RTL إلى إجراء ثلاثة تعديلات بسيطة ضمن الملف index.html: 1- استبدال القيمة ar بالقيمة en للسمة lang ضمن الوسم html. 2- إضافة سمة جديدة للوسم html وهي السمة dir وهي مسؤولة عن تحديد اتجاه الصفحة. سنسند القيمة rtl لها. 3- استبدال العنصر التالي بالعنصر link المسؤول عن استيراد مكتبة التنسيق الخاصة ببوتستراب: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.rtl.min.css" integrity="sha384-gXt9imSW0VcJVHezoNQsP+TNrjYXoGcrqBZJpry9zJt8PCQjobwmhMGaDHTASo9N" crossorigin="anonymous"> هذه نسخة من مكتبة بوتستراب التي تدعم (لاحظ اسمها bootstrap.rtl.min.css). يجب أن يكون الكود النهائي الموجود ضمن الملف index.html مماثلًا لما يلي: <!doctype html> <html lang="ar" dir="rtl"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.rtl.min.css" integrity="sha384-gXt9imSW0VcJVHezoNQsP+TNrjYXoGcrqBZJpry9zJt8PCQjobwmhMGaDHTASo9N" crossorigin="anonymous"> <link href="/css/styles.css" rel="stylesheet" /> <title>دورات نبيه</title> </head> <body> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="#">نبيه</a> <ul class="navbar-nav me-auto"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="#">رابط فعال</a> </li> <li class="nav-item"> <a class="nav-link" href="#">عادي1</a> </li> <li class="nav-item"> <a class="nav-link" href="#">عادي2</a> </li> <li class="nav-item"> <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">غير فعال</a> </li> </ul> </div> </nav> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> </body> </html> عاين الملف index.html باستخدام الإضافة Live Server لتحصل على شكل شبيه بما يلي: لاحظ أنّنا لم نمس كود HTML مطلقًا. وذلك بسبب استخدمنا لأصناف تنسيقية تصلح للاستخدام في طريقتي العرض يمين إلى يسار RTL أو يسار إلى يمين LTR. ففي حالتنا هذه استخدمنا الصنف me-auto المسؤول عن سلوك الهامش من النهاية، والذي أصبح في هذه الحالة من جهة اليسار بدلًا من جهة اليمين كما في الفقرة السابقة. يمكنك تنزيل شيفرة المقال من الملف hsoub-bootstrap5-ch02.zip. خاتمة أرجو أن تكون قد استمتعت بهذا الدرس! لقد تعلّمنا الكثير في هذا الدرس حول شريط التنقّل في بوتستراب. حيث بنينا شريط تنقّل بسيط، وأسهبنا في الشرح حول أجزاء هذا الشريط، وكيفية الإستفادة من التقنيات الجديدة في بوتستراب 5 لتحويل اتجاه الصفحة لتصبح من اليمين إلى اليسار. وفي الدرس التالي سنتحدّث عن بنية صفحة الويب باستخدام بوتستراب. اقرأ أيضًا 10 أخطاء شائعة عند استخدام إطار العمل Bootstrap بناء قائمة شجرية باستخدام البوتستراب تصميم صفحة موقع باستخدام 3 Bootstrap - الجزء الأول1 نقطة
-
حاولت بشتى الوسائل والطرق تثبيت yacine tv للكمبيوتر ولكن دون جدوى. هل من طريقة استطيع من خلالها تحميل تطبيق Yassine Tv للويندوز الخاص بي أفيدوني من فضلكم ؟1 نقطة
-
إن كنت مطور ويب أو أحد المهتمين بتطوير الأنظمة المعلوماتية المختلفة في بيئة الويب، فإنك تعلم حجم التنوع الكبير للغات البرمجة المستخدمة في تطوير مواقع الويب وخدماته، ولربما كنت أحد مطوري هذه الخدمات وترغب بأن تكون خدماتك سريعة الانتشار وسهلة الاستخدام من قبل التطبيقات المختلفة ، وكما تعلم فإن كثرة لغات البرمجة المستخدمة في تطوير خدمات الويب تجعل من الصعب التواصل والتكامل بين هذه التطبيقات. إن المصطلح REST وهو اختصار لـ Representational state transfer يعبر عن المعمارية المستخدمة في تطوير خدمات الويب، التي تهدف إلى وضع معايير تضبط إدارة موارد الأنظمة resources وتحدد كيفية عنونتها ونقلها عبر بروتوكل HTTP إلى طيف واسع من التطبيقات المختلفة بغض النظر عن لغات البرمجة التي طورت بها تلك التطبيقات، وتعد معمارية REST أكثر معماريات تصميم الويب هيمنة خلال السنوات الماضية وذلك لسهولة استخدامها والتعامل معها. بعد التعرف على RESTful ستكون قادر على الانطلاق لتصميم الخدمة الخاصة بك دون القلق بشأن من سيستخدم الخدمة الخاصة بك.1 نقطة
-
هل يمكن ربط مشروع ريكت على الارفيل انا املك تصميم ريكت ولا اعلم كيف اضيفه الى منصة عمل لارفيل1 نقطة
-
1 نقطة
-
يمكنك أن تقوم بذلك من خلال إستخدام التابع group في الكائن console بدلًا من التابع log، كالتالي: console.group('Group 1'); console.log('Message One'); console.log('Message Two'); // Nested Groups console.group('Child Group'); console.log('Message One'); console.log('Message Two'); console.group('Grand Child Group'); console.log('Message One'); console.log('Message Two'); console.groupEnd(); console.groupEnd(); console.groupEnd(); لاحظ أن المجموعة group يجب أن يتم إغلاقها من خلال التابع groupEnd (بحرف E كبير). أيضًا يمكنك أن تقوم بطباعة هذه المجموعات مغلقة بشكل إفتراضي collapsed من خلال إستخدام التابع groupCollapsed بدلًا من التابع group، كالتالي: console.groupCollapsed('Group 1'); console.log('Message One'); console.log('Message Two'); // Nested Groups console.groupCollapsed('Child Group'); console.log('Message One'); console.log('Message Two'); console.groupCollapsed('Grand Child Group'); console.log('Message One'); console.log('Message Two'); console.groupEnd(); console.groupEnd(); console.groupEnd(); ستلاحظ أن المجموعات تظهر بشكل إفتراضي، وأنها تغلق من خلال التابع groupEnd أيضًا.1 نقطة
-
أحاول تنفيذ دالة updateOne من Mongodb على NEXTJS. ولكن لا يتم تحديثه ، من console.log (req.body) يمكن الحصول على المعلومات. handler.patch(async (req, res) => { if (!req.user) { res.status(401).end(); return; } const { name, bio } = req.body; await req.db.collection('users').updateOne( { _id: req.user._id }, { $set: { ...(name && { name }), bio: bio || '', }, }, ); res.json({ user: { name, bio } }); }); console.log(req.body) Content-Disposition: form-data; name="name" Firstname Lastname ------WebKitFormBoundaryPwuAfw4FvUzDe8uP Content-Disposition: form-data; name="bio" xx ------WebKitFormBoundaryPwuAfw4FvUzDe8uP--1 نقطة
-
أقوم بتحميل نموذج مدرب مسبقاً لاستخدامه في إنشاء توقعات لصور معينة لكن أحصل على خطأ دوماً: # الكود mymodel =load_model('safedrive.h5') image =load_img("reta.png", target_size=(200, 200)) img2array = img_to_array(image) img2array = tf.expand_dims(img2array, 0) predect = model.predict(img2array) printpredect() # الخطأ """ Traceback (most recent call last): img2array = img_to_array(image, dtype=None) return img_to_array(image, data_format=data_format, **kwargs) x = np.asarray(img, dtype=dtype) return array(a, dtype, copy=False, order=order) TypeError: __array__() takes 1 positional argument but 2 were given """ ما المشكلة؟ علماً أنني استخدم إصدار حديث من PIL وهو الإصدار 8.3.01 نقطة
-
أحاول اكتشاف طريقة مناسبة لإجراء المصادقة و المصادقة الخاصة بي بسيطة أقوم بتخزين رمز JWT في session أرسله إلى خادم مختلف للموافقة عليه. إذا عدت إلى true فإننا نستمر إذا عدت false فإنه يمسح session ويذهب في الصفحة الرئيسية. function isAuthenticated(req, res, next) { //checks go here //if (req.user.authenticated) // return next(); res.redirect('/'); } server.get('/p/:id', isAuthenticated, (req, res) => { const actualPage = '/post' const queryParams = { id: req.params.id } app.render(req, res, actualPage, queryParams) }) هذا يعمل على النحو المصمم. إذا قمت بتحديث الصفحة / p / 123 ، فستتم إعادة التوجيه إلى /. ومع ذلك ، إذا ذهبت إلى هناك عبر Link فلن يحدث ذلك الذي أعتقد أنه لا يستخدم express في هذه المرحلة ولكن التوجيه المخصص ل next. هل هناك طريقة يمكنني من خلالها إجراء فحص لكل انتقال ل Link أتمكن من التأكد من تسجيل المستخدم للدخول؟1 نقطة
-
طيب منكن تشرح لى هذه الدوال الستة ووظيفة كل دالة 1.Ready function 2.Load function 3.Full height function 4.droopy function 5.Chat App function 6.Resize function1 نقطة
-
لقد اتبعت برنامجًا تعليميًا حول NextJS وحاولت الآن تعديله قليلاً. أردت تضمين ملف data.json في الصفحة. لكنني أتلقى دائمًا رسالة الخطأ Unexpected token < in JSON at position 0 أعلم أنه يجب علي تحويل ملف JSON إلى سلسلة نصية كيف علي أن أفعل ذلك؟ let res = await fetch(`${server}/data`); const articles = await res.json(); return { props: { articles, }, }; }1 نقطة
-
مرحبا, احاول حل تلك المسالة ولكن لم اوفق, هل من الممكن ان يساعدني احد؟ https://codeforces.com/problemset/problem/160/A1 نقطة
-
Yacine TV هو تطبيق يعمل على الأجهزة التي تعمل بنظام أندرويد فقط، وكل التطبيقات التي تعمل بنظام آندرويد لايمكنها أن تعمل ضمن بيئات الأنظمة الأخرى (مثل ويندوز ولينوكس وماك..إلخ). لكن هناك طريقة لتشغيل أي تطبيق أندرويد على هذه الأنظمة وهي تثبيت محاكي (محاكي آندرويد). مثلاً إذا كان جهازك يعمل بنظام ويندوز يمكنك تثبيت المحاكي "BlueStacks". حيث أن بلوستاكس هو برنامج محاكٍ لنظام أندرويد، يسمح لمستخدمي نظام ويندوز أوماك بتشغيل تطبيقات الاندرويد على الحاسوب. https://www.bluestacks.com/download.html فقط قم بتنزيله ثم ثبت عليه أي تطبيق أندرويد ترغب بتشغيله. وهو سهل الاستخدام.1 نقطة
-
السلام عليكم : لي ساعتبن أحاول أحمل ملف مدير الحزم Choco ، ولا أستطيع أكبر مشكلة تواجهني دائماً مع أي دورة هي تحميل الملفات وتهيئة بيئة العمل ، أريد تحميله أرجو المساعدة حاولت كثير ، بس أريد أحد يشرح بيئة العمل مع روابط مع الشكر لكم أنا من اليوم أحاول ، أعتذر إذا سؤالي في المكان الخطأ ملاحظة : لما إشتريت دورة تطوير تطبيقات الجوال بتقنيات الويب ، ظهرت كل الدورات مفتوحة لدي ؟ هل هذا عرض من الموقع المهم حبيت أنبه مع الشكر الكبير لكم .1 نقطة
-
1 نقطة
-
هو ليس برنامج تنزله كملف. بعد نسخ السكربت إلى cmd اضغط Enter عندها سيحمل الأداة وينسخ الملفات من الانترنت ويعرض لك حالة التقدم. أطلعني بالمستجدات وفي حال أي مشكلة قم بعمل لقطة شاشة لنفاذة cmd وأرفقها مع التعليق لنحل المشكلة شكراً لك1 نقطة
-
لتحميل choco نتبع الخطوات التالية الموجودة في موقعهم الرسمي: نقوم بتشغيل cmd مع صلاحيات الأدمن (اكتب cmd في بحث ويندوز ثم اختر run as administrator) ننسخ محتوى تعليمة التنصيب من موقعهم ونفذها في cmd @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" الرابط الخاص بالتوثيق: installing-chocolatey#cmd بالنسبة للدورات، فقط المسار الأول من باقي الدورات مفتوح وهذه الميزة عامة لجميع الطلاب تمكنهم من الإطلاع على باقي الدورات والاستفادة من مسار الأساسيات من دورة أخرى عند اللزوم.1 نقطة
-
أنت لا تحتاج الى برمجيات وسيطة "middleware" لتنفيذه لمرة واحدة, تريد تنفيذ التعليمات البرمجية في العناوين ذات المستوى الأعلى الموجودة في الملف urls.py. يتم استيراد هذه الوحدة وتنفيذها مرة واحدة, في ملف urls.py from django.confs.urls.defaults import * from my_app import one_time_startup urlpatterns = ... one_time_startup()1 نقطة
-
في الماضي كان هناك طريقة للحصول على عنوان URL الخاص بأي كائن object في لوحة التحكم وذلك من خلال اسم ملف العرض view مع دالة reverse كالتالي: reverse('django.contrib.admin.views.main.change_stage', args=['My App', model_name, id_]) لكن يبدو أن هذه الطريقة لم تعد تعمل في الإصدار الحالي من جانغو Django، وأنا أحاول التحديث إلى أحدث إصدار من جانغو Django، وهذه إحدى العقبات التي واجهتها ،لا أجد طريقة للحصول على عنوان URL الخاص بلوحة التحكم تعمل بعد الآن. كيف يمكنني الحصول على عنوان URL الخاص بلوحة التحكم لكائن معين في جانغو Django؟1 نقطة
-
المشكلة لديك في عناوين url ذات التنسيق القديم في ملف urls.py الخاص بك, سوف تجده بهذا الشكل (r'^admin/(.*)', admin.site.root), أنت بحاجة لتغييره ليكون كذلك (r'^admin/', include(admin.site.urls) ),1 نقطة
-
هناك طريقتين بسيطتين: الطريقة الأولي باستخدام الكود التالي مباشرة: from django.core.urlresolvers import reverse def url_to_edit_object(obj): url = reverse('admin:%s_%s_change' % (obj._meta.app_label, obj._meta.model_name), args=[obj.id] ) return u'<a href="%s">Edit %s</a>' % (url, obj.__unicode__()) الطريقة الثانية باستخدام URL reverse مباشرة كالتالي: {% url 'admin:index' %} {% url 'admin:polls_choice_add' %} {% url 'admin:polls_choice_change' choice.id %} {% url 'admin:polls_choice_changelist' %} في بعض الأحيان قد ينتج بعض الخطاء اذا كنت تستخدم شكل قديم ل URL الخاص بلوحة تحكم الأدمن، فاذا وجدت السطر : (r'^admin/(.*)', admin.site.root), يجب تغييره للصورة الجديدة ليصبح هكذا: (r'^admin/', include(admin.site.urls) ),1 نقطة
-
يمكنك الحصول عنوان URL مباشرة في القالب template، ولا داعي لكتابة أي filter لعمل ذلك. <a href="{% url 'admin:index' %}">Admin Index</a> كما يمكنك تمرير عض المعاملات كالتالي: <a href="{% url 'admin:posts_comment_add' comment.id %}">Add comment</a> أيضًا يمكنك أن تستعمل الدالة reverse ولكن بشكل آخر عن الإصدارات القديمة، على النحو التالي: from django.urls import reverse c = Comment.objects.get(...) change_url = reverse('admin:posts_comment_change', args=(c.id,)) كما يمكنك عمل تابع في النموذج مباشرة لكي ييقوم بإعادة عنوان URL الخاص بالنموذج في لوحة التحكم: from django.urls import reverse def get_admin_url(self): return reverse(f'admin:{self._meta.app_label}_{self._meta.model_name}_change', args=[self.id])1 نقطة
-
يمكنك ببساطة اختيار الحدود التي تريد أن تختار منها كطريقة أخرى لعمل filter كالتالي: filter(gender='MALE', profile__level=(10, 50)) أو اختيار الطريقة التي أوضحها سامح لاختيار الحدود التي تريد عمل filter عليها كالتالي: User.objects.filter(gender='MALE', profile__level__gte = 10, profile__level__lte = 50).count()1 نقطة
-
كما ذكر سامح.. من أجل Django 1.7+ يجب عليك استخدام الخطاف. ولكن إذا كنت تريد أن يتم استدعاء دالتك فقط عند تشغيل الخادم (وليس عند إجراء migrations ، migrate ، shell ، إلخ.. ) ، وتريد تجنب استثناءات AppRegistryNotReady عليك القيام بما يلي: # الملف: myapp / apps.py import sys from django.apps import AppConfig class AppC(AppConfig): name = 'App' def ready(self): if 'runserver' not in sys.argv: return True # يجب عليك استيراد الوحدات الخاصة بك هنا # لتجنب استثناء AppRegistryNotReady from .models import MyModel # كود بدء التشغيل أيضاً يمكنك استخدام <project> /wsgi.py للقيام بذلك ، وسيتم تشغيله مرة واحدة فقط ، عند بدء تشغيل الخادم ، ولكن ليس عند تشغيل أوامر أو استيراد وحدة معينة: import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings") # كود بدء التشغيل هنا .. .. from django.core.wsgi import get_wsgi_application application = get_wsgi_application()1 نقطة
-
لا يجب أن تستخدم Middleware لشيء سوف يتم تشغيله لمرة واحدة. فيمكنك أن تستخدم خطاف hook للقيام بهذا الأمر. للقيام بهذا الأمر في جانغو Django الإصدار 1.7 أو أحدث: أولًا في الملف myapp/apps.py، استخدم الكود التالي: from django.apps import AppConfig class MyAppConfig(AppConfig): name = 'myapp' verbose_name = "My Application" def ready(self): pass # اكتب هنا الكود الذي تريد تنفيذه عند تشغيل الخادم ثانيًا في الملف myapp/__init__.py يجب أن تخبر جانغو Django بأن ينفذ هذا الكود: default_app_config = 'myapp.apps.MyAppConfig' # MyAppConfig يحب أن تكون بنفس اسم الدالة السابقة أما إن كنت تستخدم جانغو Django الإصدار أققل من 1.7، فيمكنك أت تتبع الخطوات التالية: ضع الكود الخاص بك في أي ملف init.py خاص بالتطيقات المثبته INSTALLED_APPS، على سبيل المثال الملف myapp/__ init__.py def startup(): pass # اكتب هنا الكود الذي تريد تنفيذه عند تشغيل الخادم startup() عند تشغيل الخادم من خلال الأمر التالي: ./manage.py runserver يتم تنفيذ هذا الكود مرتين، ولكن هذا لأن runserver يقوم بلتحقق من صحة النماذج أولاً ولحل هذه المشكلة يمكنك تمرير العلم flag الذي --noreload، كالتالي: python manage.py runserver --noreload بهذه الطريقة سوف يتم تنفيذ الكود مرة واحدة فقط.1 نقطة
-
في جانغو Django لا يتم التصفية بإستخدام علامة أقل من > أو أكبر من <، ولكن تستخدم اسم الحقل مع lte أو gte، كالتالي: أقل من أو يساوي: users = User.objects.filter(profile__level__lte=0) أكبر من أو يساوي: users = User.objects.filter(profile__level__gte=0) وإذا لم تريد أن تحصل على الكائنات التي تساوي هذه القيمة، أي أنك تريد أن تستخدم أقل من (وليس أقل من أو يساوي)، فكل ما عليك فعله هو حذف حرف e في نهاية اسم الخاصية، ليكون الكود كالتالي: أقل من: users = User.objects.filter(profile__level__lt=0) أكبر من: users = User.objects.filter(profile__level__lg=0)1 نقطة
-
1 نقطة
-
الخطأ فقط أنك تقوم باستدعاء دالة يجب ادخال بها المعامل delete لكنك لم تقم بادخالها، أنظر المثال التالي للتوضيح أولا: class SomeModel(models.Model): field=models.ForeignKey(default=1, on_delete='CASCADE', to='main.Category') وهذا استخدام خاطئ ينتج عنه نفس المشكلة التى تظهر لك، لذلك حلها كان كالتالي: class SomeModel(models.Model): field=models.ForeignKey(default=1, on_delete=models.CASCADE, to='main.Category') لذلك فان حل المشكلة خاصتك بنفس الطريقة بسيطة، فقط مرر الكائن model مع اختيار DO_NOTHING عوضا عن None كالتالي: user = models.ForeignKey(User, on_delete=models.DO_NOTHING)1 نقطة
-
المعامل on_delete يجب أن يكون قابل للاستدعاء أي تابع أنت تحاول تمرير None ولكن محاطة بعلامة الاقتباس " ' " أي يتم معاملتها كنوع نص يمكنك تغييرها الى التالي user = models.ForeignKey(User, on_delete=None) لكن اذا كنت تقصد ب None أن لا يتم اتخاذ اجراء عند حذف البيانات المرتبطة يمكنك تمرير التالي user = models.ForeignKey(User, on_delete=models.DO_NOTHING) حيث قيم on_delete يمكن أن تكون التالي models.CASCADE models.SET_NULL models.DO_NOTHING models.PROTECT1 نقطة
-
إن سؤالك عام في مجال SEO سأضع لك بعض مقالات أكاديمية حسوب، أرجو قرائتها وفهمها التعريف العام: الأساسيات: عناصر تؤثر في عمل SEO: أدوات تساعد في العمل: إيجاد الكلمات المفتاحية: ثم مجالات متقدمة:1 نقطة
-
illustrator بالنسبة للتصميمات القابلة للتمديد او الفكتور .. كالشعارات photoshop لتعديل الصور الرتوش وتصحيح اللون او تركيب ودمج الصور corel draw للرسم .الفيكتور تصميم الشعارات1 نقطة
-
1 - Adobe Photoshop 2 - Adobe InDesign 3 - CorelDraw Graphics Suite 4 - Sketch 5 - Adobe Illustrator 6 - Gravit Designer من افضل البرامج التي استعملها1 نقطة
-
illustration أو corldrw للطباعة والعرض وفوتشوب للبرفيو وطباعة المطبوعات1 نقطة
-
توجدالعديد من البرامج التي تقدم خدمات وأدوات جد مميزة. أشهر هذه البرامج هي برامج أدوبي ونذكر منها: *أدوبي اليسترايتور illustrator هو برنامج لاعداد رسومات توضيحية موجهة ذات جودة ودقة جد عالية *أدوبي فوتوشوب photoshop هو برنامج تعديل وتحرير الصور من نوع النقطية (bitmap) ويمكنك العمل الكثير الكثير باستخدام هذا البرنامج *ادوبي انديزاين indesign برنامج نشر مكتبي يستخدم في تحرير وتعديل الكتب والمجلات والبروشيرات وغيرها من المطبوعات ***** للعمل في مجال المطبوعات أعتقد أنك يجب أن تتعلم هذه البرامج على الأقل ... لأنها مكملة لبعضها البعض.1 نقطة
-
السلام عليكم ورحمة الله و بركاته خذ نصيحة اخ Mohamed Ahmed47 و ليس صحيحا ان يقال تعلم الفوتوشوب فقط لان كل برامج مهمة نصيحة تعلم البرامج الاساسية الثلاث وستتضح لديك الكثير من الاسالة اولويتك الان تعلم هذه البرامج الاساسية لكل مصمم1 نقطة
-
تختلف البرامج المستخدمة حول ما هو الذي تريد تصميمه ... علي سبيل المثال إذا كنت تريد أن تخصص في مجال تصاميم السوشيال ميديا من بوستات وبنرات و غيرها ... فأفضل برنامج لذلك هو ( Adobe photoshop ) ،،،أما إذا كنت تريد أن تخصص في مجال الشعارات ( logos ) والهويات البصرية فالأفضل لك برنامج ( Adobe illustrator ) ،،، وأخيرا إذا كنت تريد تصميم المجلات والكتب والمطبوعات فالأفضل برنامج ( Adobe Indesign) ,,, وبإختصار لكي تصبح ( Graphic designer ) ناجح ومتكامل في مجالك فلا بد من تعلم الثلاث برامج والأفضل من وجهة نظري البدء ببرنامج ادوبي فوتوشوب لأنه الأساس لكي شئ ،، وشكرا لحضرتك ...1 نقطة
-
اخي الكريم اذا كانت الغاية التصميم من اجل المطبوعات , بالتأكيد Adobe Illustrator و Adobe InDesign هم الافضل في هذا المجال . أما بخصوص دمج الصور والتعديل على الصور فلا غنى عن ملك هذا المجال وهو Photoshop1 نقطة
-
مرحبا ياسر أنصحك بتلك البرامج 1-adobe Photoshop 2-Adobe InDesign 3- Adobe Illustrator 4-cinema 4d1 نقطة
-
هنالك الكثير من البرامج المتخصصة في مجال الجرافيك ديزاين ولكن افضلها واشهرها على مستوى العالم هي Adobe Photoshop Adobe Illustrator Adobe InDesign1 نقطة