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

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

  1. مسعود زاهي

    مسعود زاهي

    الأعضاء


    • نقاط

      6

    • المساهمات

      646


  2. أروى عفان

    أروى عفان

    الأعضاء


    • نقاط

      1

    • المساهمات

      46


  3. Entesar Khaled

    Entesar Khaled

    الأعضاء


    • نقاط

      1

    • المساهمات

      1516


  4. Mohammad Al Eik

    Mohammad Al Eik

    الأعضاء


    • نقاط

      1

    • المساهمات

      199


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

المحتوى الأعلى تقييمًا في 01/28/22 في كل الموقع

  1. يمكنك استخدام علامة القالب (tamplatetag) divisibleby المدمجة في Django. divisibleby: تقوم بارجاع True عندما تكون القيمة تقبل القسمة على العنصر المُدخل. مثلا: {{ value|divisibleby:"3" }} # إذا كانت القيمة = 21 فسيكون الإخراج # True # أما اذا كانت القيمة لا تقبل القسمة على 3 فسيكون الإخراج # False إذا مثالك يُصبح: {% for p in posts %} <!-- ملاحظة: forloop.counter0 => تقوم بالعد من 0 --> <!-- forloop.counter0|divisibleby:'4' يكون الاخراج صحيحا عند العنصر الخامس لا الرابع --> <!-- لهذا عليك استعمال --> <!-- forloop.counter --> <div class="post flex flex-row justify-start {% if forloop.counter|divisibleby:'4' %}bg-black{% endif %}}"> <h2>p.title</h2> <div class="preview"> <!-- ... --> </div> <div class="overlay"> <!-- ... --> </div> </div> {% endfor %}
    2 نقاط
  2. يوجد عدة طرق لطباعة أول عنصر في مجموعة. الطريقة الأولى {{products.0}} الطريقة الثانية باستخدام علامة القالب first: {{products|first}} #أما اذا كنت تريد طباعة خاصية داخل الكائن فيمكنك استعمال # with {% with products|first=firstPoduct %} #هنا اطبع الخاصية التي تريد مثلا خاصية الاسم {{firstPoduct.name}} {% endwith %} الطريقة الثالثة باستخدام الحلقة for: {% for product in products %} {% if forloop.first %} {{product}} {% endif %} {% endfor %}
    2 نقاط
  3. أقوم باستعمال Checkbox لوضع بعض الاختيارات للمستخدمين المشكلة ان لدي صفحه تحتوي على حقول مختلفة مثل text filed وما شابه ومع محاولة المستخدم اختيار احد الخيارات في Checkbox يحدث تحديث لصفحة او شيء من هذا القبيل بحيث ان كل الحقول الباقية تنحذق البيانات منها التي تم ادراجها من قبل المستخدم مسبقاًً السبب هذا السطر setState(() { _checkbox = !_checkbox; }); ولكني لم استطع القيام بحذفه وجعله بشكل التالي: Checkbox( value: _checkbox, onChanged: (value) { _checkbox = !_checkbox; }, ); بشكل هذا لا يمكن للمستخدمين القيام بالاختيار كيف يمكن حل هذا المشكلة بحيث لا يحدث تحديث لصفحه بعد القيام بالاختيار ياليت احد يفيدنا لو كان لديه حل لذلك شكرا لكم
    1 نقطة
  4. عندما أستخدم التابع values أحصل على قائمة بالعناصر بالشكل التالي: >>> MyModel.objects.values('original_name') [{'original_name': 1}, {'original_name': 2}] ما أريد القيام به هو أن أقوم بإعادة تسميه هذه العناصر لكي تصبح باسم مختلف، على النحو التالي: >>> MyModel.objects.values(new_name='original_name') [{'new_name': 1}, {'new_name': 2}] كيف أقوم بهذا الأمر في جانغو Django؟
    1 نقطة
  5. سنشرح في هذا المقال كيفية التعامل مع المسارات routes وأنواع طلبات HTTP في إطار العمل Express بتطبيق مشروع عملي، وسنتعلم كيفية تحديد المسارات واستخدام طلبات HTTP من نوع GET و POST و PUT و DELETE لمعالجة البيانات. تتعامل المسارات مع انتقال المستخدم إلى عناوين URL مختلفة، ويسهل بروتوكول HTTP عمليات التواصل ونقل البيانات من خادم Express إلى متصفح الويب. يُفضل أن يكون لديك معرفة مسبقة ببيئة Node.js، لكن ذلك ليس ضروريًا، انظر صفحة التعريف Node.js على موسوعة حسوب وننصح بقراءة صفحة طريقة الاستعمال وتشغيل الأمثلة أيضًا من التوثيق نفسه. إعداد المشروع احرص على أن تكون لديك بيئة Node.js جاهزة ومثبتة على حاسوبك حتى تتمكن من استخدام إطار العمل Express. نفذ الخطوات التالية في الطرفية Terminal: أولًا، أنشئ مجلدًا جديدًا خاص بالمشروع باسم node-express-routing: mkdir node-express-routing ثم انتقل إلى المجلد الجديد: cd node-express-routing ثانيًا، أنشئ مشروعك الجديد معتمدًا الإعدادات الافتراضية، ومن ضمنها ملف package.json حتى تتمكن من الوصول إلى الاعتماديات dependencies: npm init -y ثم أنشئ ملف index.js حيث ستتعامل مع المسارات وتوابع طلبات HTTP: touch index.js ثبت الحزمتين Express و nodemon، إذ سنحتاج إلى الحزمة الأخيرة لإعادة تشغيل المشروع باستمرار عند كل تغيير في ملف index.js: npm install express --save npm install nodemon --save-dev افتح الملف package.json باستخدام إحدى محررات النصوص وأضف سكربت البدء start لتشغيل ملف index.js عبر الأمر nodemon: { "name": "node-express-routing", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "nodemon index.js" }, "keywords": [], "author": "Paul Halliday", "license": "MIT" } يتيح لك ذلك استخدام الأمر npm start في الطرفية لتشغيل خادم Express وحفظ التعديلات. تهانينا! أصبحت جاهزًا لإنشاء خادم Express بعد أن أعددت الحزمة nodemon لتعيد تشغيل الخادم عند التعديل على الملف index.js. تشغيل خادم Express ستتعامل مع منطق دمج المسارات ومختلف أنواع طلبيات HTTP في خادم Express الخاص بك، وستعمل على إعداد وتشغيل خادم خاص بك لتتصور كيف سيبدو مشروعك في المتصفح. اطلب وحدة Express عبر التابع require، في ملف index.js ثم خزن نسخة instance في المتغير app، وبعد ذلك أعلن عن متغير PORT واضبطه إلى القيمة 3000. const express = require('express'); const app = express(); const PORT = 3000; app.use(express.json()); app.listen(PORT, () => console.log(`Express server currently running on port ${PORT}`)); ثم استدعِ التابع ()listen مع التابع ()app ومرر المتغير PORT كوسيط أول، ودالة رد نداء callback كوسيط ثاني، إذ تقوم الدالة الوسيطة ()listen بإنشاء خادم محلي على المنفذ المحدد بالمتغير PORT لمعاينة التعديلات. مرر الوسيط ()express.json إلى التابع ()app.use لتحليل البيانات الواردة من خلال طلبات HTTP الخاصة بك. اعتمدت الإصدارات السابقة على تبعية المحلل body-parser، أما في الإصدارات الأحدث ضمنت Express برمجيات وسيطة معدة مسبقًا لتحليل البيانات خصوصًا التي بصيغة JOSN. اكتب الأمر التالي في الطرفية لتبدأ تشغيل المشروع: npm start سيُخدَّم المشروع على العنوان http://localhost:3000، وستلاحظ رسالة الخطأ التالية عند الانتقال إلى المتصفح: تعد هذه خطوة البداية، الآن علينا تعريف طلبيات HTTP للتخاطب الصحيح بين المتصفح والخادم. استقبال الخادم طلبية GET من طلبيات HTTP يمكنك إرسال البيانات من خادم Express الخاص بك إلى المتصفح لمعاينة مشروعك بناءً على إرساله طلبية GET محددة الوجهة، ولفعل ذلك استدعِ التابع ()get. مع المتغير app ولا تحدد الوجهة حاليًا، ومرر له دالة تأخذ الوسطين request و response كما يلي: app.get('/', (request, response) => { response.send('Hello'); }); لاحظ أن الوسيط request يحتوي على معلومات عن الطلبية GET التي أرسلها المتصفح، بينما يرسل التابع ()response.send بيانات إلى المتصفح، إما على شكل سلسلة، أو كائن، أو مصفوفة كرد أو إجابة على الطلب المرسل. لنتعرف على المسارات وطلبات HTTP الأخرى، بعد أن طبقنا طلبية GET. التعامل مع المسارات Routes أنشئ طلبية GET مع تحديد المسار '‎/accounts' والمسار '‎/accounts/:id'، ثم صَرّح عن مصفوفة حسابات باسم accounts: let accounts = [ { "id": 1, "username": "paulhal", "role": "admin" }, { "id": 2, "username": "johndoe", "role": "guest" }, { "id": 3, "username": "sarahjane", "role": "guest" } ]; app.get('/accounts', (request, response) => { response.json(accounts); }); app.get('/accounts/:id', (request, response) => { const accountId = Number(request.params.id); const getAccount = accounts.find((account) => account.id === accountId); if (!getAccount) { response.status(500).send('Account not found.') } else { response.json(getAccount); } }); ستحصل على جميع معلومات الحسابات الموجودة في المصفوفة عند الانتقال إلى العنوان الآتي: http://localhost:3000/accounts حيث ستكون نتيجة الخرج كما يلي: [ { "id": 1, "username": "paulhal", "role": "admin" }, { "id": 2, "username": "johndoe", "role": "guest" }, { "id": 3, "username": "sarahjane", "role": "guest" } ] يمكن طلب معلومات حساب محدد بعينه من خلال إرسال مُعرِّفه إلى نقطة الوصول endpoint التالية: id:/، حيث يعتبر إطار العمل Express أن ‎:id في نقطة الوصول ‎/accounts/:id هي نص بديل لأحد معاملات المستخدم ويطابقها مع القيمة المقابلة في الرابط المرسل لنقطة الوصول. لاحظ النتيجة عند الانتقال إلى العنوان http://localhost:3000/accounts/3: { "id": 3, "username": "sarahjane", "role": "guest" } التعامل مع الطلبيات POST و PUT و DELETE توفر طلبيات HTTP الأخرى غير النوع GET (اجلب) مرونة أكبر في التعامل مع البيانات وهي الطلبيات POST (انشر) و PUT (ضع) و DELETE (احذف)، إذ تنشئ الطلبية POST بيانات جديدة في الخادم (تنشر على الخادم)، بينما تعدل الطلبية PUT على البيانات الموجودة (تضع بيانات في الخادم)، أما الطلبية DELETE فتمسح البيانات من الخادم. طلبية POST استخدم طلبية POST لإنشاء بيانات جديدة في مصفوفة الحسابات accounts، عن طريق استدعاء التابع ()post. مع المتغير app وتحديد المسار accounts/ في حقل الوسيط الأول: app.post('/accounts', (request, response) => { const incomingAccount = request.body; accounts.push(incomingAccount); response.json(accounts); }) ستُرسل البيانات القادمة من الطلبية POST إلى مصفوفة الحسابات accounts ثم يرسل الرد على هيئة كائن JSON. لاحظ أن مصفوفة الحسابات accounts أصبحت تحتوي على مستخدم جديد: [ { "id": 1, "username": "paulhal", "role": "admin" }, { "id": 2, "username": "johndoe", "role": "guest" }, { "id": 3, "username": "sarahjane", "role": "guest" }, { "id": 4, "username": "davesmith", "role": "admin" } ] طلبية PUT يمكن تعديل حساب ما إن أرسلت طلبية PUT إلى الخادم، ويمكن له أن يعالجها عن طريق استدعاء التابع ()put. مع المتغير app وتمرير المسار '‎/accounts/:id' في حقل الوسيط الأول، وستجد من خلاله مُعرِّف الحساب المدخل، وتستخدم التابع الشرطي if لتعديل البيانات الجديدة: app.put('/accounts/:id', (request, response) => { const accountId = Number(request.params.id); const body = request.body; const account = accounts.find((account) => account.id === accountId); const index = accounts.indexOf(account); if (!account) { response.status(500).send('Account not found.'); } else { const updatedAccount = { ...account, ...body }; accounts[index] = updatedAccount; response.send(updatedAccount); } }); يمكنك الآن تعديل البيانات في مصفوفة الحسابات، فإن أرسلت طلبية PUT إلى الخادم عبر الوجهة التالية: http://localhost:3000/accounts/1 لطلب تغيير دور مستخدم محدد مثل إرسال البيانات التالية: { "role": "guest" } فسيتغير دور "role" ذلك المستخدم من مدير admin إلى ضيف guest، وذلك عند الانتقال إلى العنوان http://localhost:3000/accounts/1: { "id": 1, "username": "paulhal", "role": "guest" } الطلبية DELETE يمكن حذف المستخدمين وبياناتهم إن أرسلت طلبية DELETE إلى الخادم والذي يعالجها عن طريق استدعاء التابع ()delete. مع المتغير app وتضمين المسار '/accounts/:id' في حقل الوسيط الأول. سيبحث التابع بعدها ضمن مصفوفة الحسابات عن الحساب ذو المعرف المراد حذفه ويتخذ الإجراء المناسب. app.delete('/accounts/:id', (request, response) => { const accountId = Number(request.params.id); const newAccounts = accounts.filter((account) => account.id != accountId); if (!newAccounts) { response.status(500).send('Account not found.'); } else { accounts = newAccounts; response.send(accounts); } }); لاحظ أنه عند إرسال طلبية DELETE إلى العنوان http://localhost:3000/accounts/1 أن الحساب ذا المعرف 1 من مصفوفة الحسابات accounts سيُحذَف. ختامًا تعلمنا في هذا المقال كيف يساعد تحديد المسارات واستخدام طلبيات HTTP في تفاعل الخادم مع الطلبيات التي يرسلها المتصفح كما وضحنا في مثال المستخدمين والتعامل مع بياناتهم من إنشاء وتحديث وحذف في خادم Express. للحصول على المساعدة والدعم يمكنك إضافة سؤالك في قسم الأسئلة والأجوبة في أكاديمية حسوب. ترجمة- وبتصرف للمقال How To Define Routes and HTTP Request Methods in Express لصاحبه Paul Halliday. اقرأ أيضًا التعامل مع كائن الإجابة res على طلبية HTTP في إطار العمل Express التعامل مع كائن الطلبية req في إطار العمل Express دليل استخدام Node.js وإطار العمل Express للمبتدئين
    1 نقطة
  6. للحصول على عداد الحلقة الخارجية أو الحلقة الأب يمكن استعمال forloop.parentloop.counter كما يلي: {% for parent in ParentItems %} {% for item in parent %} <!-- {{forloop.parentloop.counter}} هو عداد الحلقة الخارجية --> <!-- {{ forloop.counter }} هو عداد الحلقة الداخلية --> <li>{{ forloop.parentloop.counter }} - {{ item }}</li> {% endfor %} {% endfor %} يمكنك أيضا استعمال with لتخزين عداد الحلقة الخارجية واستعماله لاحقاً: {% for parent in ParentItems %} {% with pcounter=forloop.counter %} {% for item in parent %} <!-- {{pcounter}} هو عداد الحلقة الخارجية --> <!-- {{ forloop.counter }} هو عداد الحلقة الداخلية --> <li>{{ pcounter }} - {{ item }}</li> {% endfor %} {% endwith %} {% endfor %}
    1 نقطة
  7. للحصول على أعلى 5 كُتاب من خلال نموذج Transaction ما عليك إلا استعمال: from django.db.models import Count#نقوم باستيراد النموذج Count Transaction.objects.values('author') .annotate(total=Count('author')) .order_by('-total')[:5] الشرح: نستخدم عادة values لحصر الأعمدة التي يتم إرجاعها في مجموعة النتائج، في مثالنا قمنا فقط باسترجاع العمود author. لإضافة عمود آخر للكائن الموجود في الQuerySet نقوم باستعمال annotate. في مثالنا قمنا بإضافة Count('author') وسميناه total. بعدها قمنا بترتيب ال QuerySet من الأكبر إلى الأصغر باستخدام order_by('-total'). للحصول على أعلى 5 كتاب فقط ماعلينا الا استخدام [:5].
    1 نقطة
  8. نعم صديقي في هذه الدورة سوف تتعامل مع لغة جافاسربت لإنشاء تطبيقات ويب وتطبيقات موبايل وتطبيقات المخدم وتطبيقات كمبيوتر. فلغة JavaScript هي لغة برمجة تُستخدم على جانب المستخدم وجانب المخدم والتي تتيح لك جعل صفحات الويب تفاعلية. أما HTML و CSS هي لغات تعطي بنية وشكلاً لصفحات الويب. يستخدم JavaScript بشكل أساسي للتطبيقات المستندة إلى متصفحات الويب. ولكن يتم استخدام JavaScript أيضًا خارج الويب في البرامج والخوادم. فيما يلي بعض الأشياء الأساسية التي يتم استخدام JavaScript من أجلها: إنشاء تطبيقات الويب والجوال : يمكن للمطورين استخدام العديد من أطر عمل JavaScript لتطوير وبناء تطبيقات الويب والجوال IOS و Android. أطر عمل جافا سكريبت عبارة عن مجموعات من مكتبات كود جافا سكريبت التي تزود المطورين بتعليمات برمجية مكتوبة مسبقًا لاستخدامها في البرمجة الروتينية. تتضمن أطر عمل JavaScript الأمامية الشائعة React و React Native و Angular و Vue بناء خوادم الويب وتطوير تطبيقات الخادم بالإضافة إلى مواقع الويب والتطبيقات ، يمكن للمطورين أيضًا استخدام JavaScript لإنشاء خوادم ويب بسيطة وتطوير البنية التحتية الخلفية (Backend development) باستخدام Node.js. بناء تطبيقات PC بإستخدام (ElctronJs) لماذا استخدام JavaScript على لغات البرمجة الأخرى؟ JavaScript هي لغة البرمجة الوحيدة الأصلية لمتصفح الويب JavaScript هي اللغة الأكثر شيوعًا سهلة التعلم
    1 نقطة
  9. أهلًا بك، يمكن كتابة البرنامج كالتالي using System; public class Program { public static void Main() { string str; /* Declares a string of size 100 */ Console.Write("\n\nFind the length of a string :\n"); Console.Write("---------------------------------\n"); Console.Write("Input the string : "); str = Console.ReadLine(); Program p=new Program(); Console.Write("Length of the string is: " + p.length(str)); } public int length(String s) { int l=0; foreach(char chr in s) { l += 1; } return l; } }
    1 نقطة
×
×
  • أضف...