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

Mustafa Suleiman

الأعضاء
  • المساهمات

    19895
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    476

إجابات الأسئلة

  1. إجابة Mustafa Suleiman سؤال في المدة الزمنية لإنجاز مشروع كانت الإجابة المقبولة   
    لا داعي لذكر مدة زمنية محددة وإلزام نفسك بها، بل اطرح ما تستطيع فعله وذكر المهارات التي تمتلكها وما الفائدة التي ستعود على العميل من تلك المهارات فهو لا يدري ما معنى Full-Stack.
    ويجب أن تظهر بمظهر إحترافي ومنظم وعدم الإنجراف وراء ما يطرحه الآخرين.
    مع ذكر شرط أنه يتم تحديد مدة المشروع بناءًا على المتطلبات ومدى تعقيد المشروع، وعند إعطاء مدة زمنية للعميل قم بمضاعفتها ففي البداية لن تكون لديك خبرة بتحديد المدة اللازمة، وفي حال قمت بإنجاز المشروع في أقل من ذلك فستكون تلك نقطة جيدة لصالحك وليس العكس.
    يمكنك ذكر مثلاً أن تطبيق بسيط مكون من 5 صفحات يستغرق مدة زمنية تساوي كذا
  2. إجابة Mustafa Suleiman سؤال في لماذا يعمل كود React الثاني بشكل صحيح بينما الكود الأول لا يعمل؟ كانت الإجابة المقبولة   
    الفارق الأساسي هو كيفية التعامل مع حالة التحميل loading state.
    tفي الكود الأول، تقوم بالتحقق من حالة التحميل loading ولكنك لم تقم بإرجاع الـLoader كجزء من الـJSX، أي الكود داخل الشرط if (loading) لا يعتبر جزءًا من النتيجة المرجعة من الدالة Books.
    بينما في الكود الثاني، تقوم باستخدام تعبير ثلاثي للتحقق من حالة التحميل loading، وإن كانت الحالة loading، يتم إرجاع الـLoader كجزء من الـJSX، وإذا لم تكن الحالة loading يتم عرض الكتب.
    لذا الكود الثاني يعيد الـLoader كجزء من النتيجة المرجعة من الدالة Books، بينما الكود الأول لا يعيد أي شيء في حالة التحميل، مما يعني أن العنصر Oval لن يتم عرضه.
    إذن في الكود الأول عليك تعديل الجزء الخاص بحالة التحميل ليعيد الـLoader كجزء من النتيجة المرجعة من الدالة Books:
    if (loading) { return ( <Oval height={120} width={120} color="rgb(247, 96, 14)" wrapperStyle={{ height: "70vh", display: "flex", alignItems: "center", justifyContent: "center", }} wrapperClass="" visible={true} ariaLabel="oval-loading" secondaryColor="#E2E2E2" strokeWidth={3} strokeWidthSecondary={3} /> ); } من أجل عرض الـLoader عندما تكون الحالة loading هي true.
  3. إجابة Mustafa Suleiman سؤال في ما هي افضل طريقة لإضافة shadow باستخدام CSS كما في الصورة كانت الإجابة المقبولة   
    من خلال CSS سيكون كالتالي:
    <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> .box { position: relative; display: flex; justify-content: center; align-items: center; background-color: #1b1bb7; border-radius: calc(20% - 40px); padding: 40px 20px; width: 300px; height: 300px; text-align: center; } .box-overlay { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); mix-blend-mode: overlay; width: 91%; height: 91%; background-color: rgb(0 0 0 / 79%); border-radius: 9%; filter: blur(37px); } h1, p { font-size: 30px; font-weight: bold; font-family: system-ui; color: white; } </style> </head> <body> <div class="box"> <div class="content"> <h1>5+</h1> <p>Countries</p> </div> <div class="box-overlay"> </div> </body> </html> والنتيجة هي:

    حيث ستعتمد على خاصيتي  mix-blend-mode و filter لتنفيذ الفكرة.
  4. إجابة Mustafa Suleiman سؤال في cors policy in react كانت الإجابة المقبولة   
    تلك المشكلة شائعة ويجب عليك فهمها فهي خاصة بأمر هام وهو CORS.
    وتحدث مشكلة الـ CORS (Cross-Origin Resource Sharing) عندما يحاول تطبيق ويب الوصول إلى موارد من نطاق مختلف (أو بروتوكول أو منفذ مختلف) بدون التصريح المناسب.
    أي الإتصال من http://localhost:3000 في الواجهة الأمامية على http://127.0.0.1:4000 مثلاً في الواجهة الخلفية، لاحظ هنا منفذين مختلفين، بالتالي يرسل المتصفح طلبًا مسبقًا إلى الخادم للتحقق مما إذا كان مسموحًا للعميل بالوصول إلى المورد (السيرفر).
    ويتضمن الطلب رأسًا خاصًا يسمى Origin، والذي يحتوي على عنوان URL لموقع الويب العميل.
    ثم يستجيب الخادم برأس Access-Control-Allow-Origin، والذي يحدد مواقع الويب التي يُسمح لها بالوصول إلى المورد.
    أي CORS هو مصطلح وببساطة، هو آلية أمان في متصفحات الويب تتحكم في كيفية تفاعل مواقع الويب المختلفة مع بعضها البعض.
    ما الفائدة منها؟
    ببساطة تمنع CORS المواقع الضارة من سرقة البيانات من المواقع الأخرى وتجعل من الصعب على المتسللين اختراق المواقع الإلكترونية، وتُتيح للتطبيقات الويب التفاعل مع بعضها البعض، حتى لو كانت تستضيفها مواقع ويب مختلفة.
    لذا في الخادم علينا إضافة الرؤوس (headers) المطلوبة في ملفات PHP للسماح بالوصول من نطاق محدد:
    <?php header("Access-Control-Allow-Origin: http://localhost:3000"); header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS"); header("Access-Control-Allow-Headers: Content-Type, Authorization"); ?> عليك وضع الكود السابق في بداية كل ملف تريد الوصول إليه وتعديل منفذ الواجهة الأمامية 3000 بما لديك أنت.
    أو إنشاء ملف منفصل وكتابة به ما سبق وليكن باسم cors.php ثم استيراده 
    <?php include 'path/to/config.php'; // تابع بقية الكود ?> أو تضمينه في أي ملف موجد في جميع الملفات الديك مثل config.php أو init.php.
    لكن الطريقة الأفضل وضع التالي في ملف  .htaccess:
    <IfModule mod_headers.c> Header set Access-Control-Allow-Origin "http://localhost:3000" Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" Header set Access-Control-Allow-Headers "Content-Type, Authorization" </IfModule>  
  5. إجابة Mustafa Suleiman سؤال في تصميم أشكال وخطوط في تصميم موقع الويب كانت الإجابة المقبولة   
    الطريقة الأولى من خلال تصميم تلك الصور والأيقونات على برنامج مثل الفوتوشوب واستخدامها في التصميم من خلال CSS.
    أما الأفضل هو الإعتماد على SVG وبالطبع الأمر ليس بالسهل للرسم من خلاله، لكن هناك أدوات توفر لك الرسم والتحميل مباشرًة مثل التالي:
    https://editor.method.ac/ https://vectorpaint.yaks.co.nz/ أو يمكنك استخدام برنامج مثل adobe illustrator لرسم الشكل الذي تريده وتصديره كـ SVG:
     
  6. إجابة Mustafa Suleiman سؤال في ما هو المجال في البرمجة المفضل في الدول الأوروبية؟ كانت الإجابة المقبولة   
    لا يوجد أمر كذلك، فجميع مجالات البرمجة مطلوبة، بالطبع هناك أفضلية لمجال عن آخر حسب طبيعة سوق العمل في الوقت الحالي والتي تتغير كل 5 سنوات مثلاً لكون المجال البرمجي يتطور بشكل مستمر وهناك أمور تغير من مساره.
    لذا عليك تعلم أساسيات البرمجة أولاً ثم تفقد المجال البرمجي الذي يوجد عليه طلب والخبرة المطلوبة للعمل به، والمهارات البرمجية اللازمة، ثم تضع خطة وتسعى جاهدًا للوصول لذلك الهدف في مدة زمنية معينة ولن تقل عن سنة أقل من ذلك لن يصح.
    ومواقع التوظيف الألمانية هي:
    https://www.stepstone.de https://www.monster.de https://www.xing.com https://de.linkedin.com وستجد تفصيل أكثر هنا:
     
  7. إجابة Mustafa Suleiman سؤال في رفع مشروع على ال Repository كانت الإجابة المقبولة   
    عليك حذف أي ملفات تم رفعها إلى المستودع على GitHub، أو حذف المستودع وإعادة إنشائه أيهما أسهل بالنسبة لك.
    ثم تعديل ملف .gitignore لديك بما يلي:
    ### Laravel ### /vendor/ node_modules/ npm-debug.log yarn-error.log # Laravel 4 specific bootstrap/compiled.php app/storage/ # Laravel 5 & Lumen specific public/storage public/hot # Laravel 5 & Lumen specific with changed public path public_html/storage public_html/hot storage/*.key .env Homestead.yaml Homestead.json /.vagrant .phpunit.result.cache ثم تنفيذ الأمر التالي لحذف المستودع المحلي لـ Git في مجلد مشروعك:
    rm -rf .git ثم إعادة إنشاء المستودع من خلال الأمر:
    git init ثم رفع المشروع من خلال:
    git add . // ثم git commit -m "first commit" // ثم git branch -M main // ثم git remote add origin https://github.com/ اسم المستخدم/repoName.git // ثم git push -u origin main  
  8. إجابة Mustafa Suleiman سؤال في طريقة تحديد المتطلبات مع أصحاب المشاريع كانت الإجابة المقبولة   
    ستحتاج إلى قراءة التالي:
    وعامًة بنود العقد تشمل
    تحديد عنوان كل طرف مع اسمه وعنوانه ورقم هاتفه وعنوان بريده الإلكتروني.  شرح موجز لطبيعة الاتفاق بين الطرفين. تعريف أي مصطلحات رئيسية ستُستخدم في العقد. وصف تفصيلي للمهام والخدمات التي سيقدمها كل طرف. توضيح كيفية الدفع للمهام والخدمات، بما في ذلك المبلغ والجدول الزمني وشروط الدفع. تحديد مسؤوليات كل طرف بوضوح، بما في ذلك الالتزامات والمواعيد النهائية.  تحديد ملكية أي مواد أو نتائج ناتجة عن الاتفاق.  اتفاق الطرفين على الحفاظ على سرية بعض المعلومات. تحديد مدة سريان العقد. شرح شروط إنهاء العقد، بما في ذلك الإشعار المطلوب وفسخ العقد بسبب الإخلال. تحديد كيفية حل أي نزاعات قد تنشأ عن العقد. تحديد القانون المُنظم للعقد. تخصيص مكان لتوقيعات الطرفين.
  9. إجابة Mustafa Suleiman سؤال في هل سيكون الموقع المرفوع على هوستنجر معدا للتسويق الرقمي أم لا؟ كانت الإجابة المقبولة   
    الأمر مماثل لاستضافة الموقع على حاسوبك، لكن تلك استضافة على الإنترنت متاحة للوصول من قبل الجميع وبها مواصفات مناسبة لحجم زوار الموقع المتوقع.
    ما يقصده هو إضافة أكواد Meta Pixel الخاصة بفيسبوك وأكواد التتبع الخاصة بتيك توك مثلاً وغيرهم مثل Google analytics.
    وذلك لا علاقة له بالاستضافة، أيضًا بالنسبة للـ SEO، فذلك يتوقف على جودة كود الموقع وتوافقه مع معايير الـ technical SEO.
     
  10. إجابة Mustafa Suleiman سؤال في هل سيتم طرح في المستقبل القريب اي دورات عن تطوير الالعاب للاندرويد  كانت الإجابة المقبولة   
    كل فترة يتم إضافة دورات إلى الأكاديمية، لكن ذلك بناءًا على معايير مختلفة مثل حاجة سوق العمل إلى تلك المهارات وهل هي مطلوبة في الوقت الحالي وما هي النسبة، أيضًا نسبة المهتمين بالإشتراك بالدورة، وأمور مختلفة أخرى مثل توافق الدورة مع الدورات الأخرى في الأكاديمية.
    لذا، لا أعدك بأن الدورة سيتم إضافتها لكن سيتم النظر في ذلك وتنفيذ الدورات حسب الأولوية، يمكنك متابعة آخر التطورات في صفحة آخر التحديثات.
    حاليًا الدورة التي بها يمكنك تعلم تطوير تطبيقات الهواتف، هي دورة جافاسكريبت من خلال React Native.
  11. إجابة Mustafa Suleiman سؤال في github page not found كانت الإجابة المقبولة   
    لاحظ أنك لم تم برفع النسخة التي تم تحزيمها من المشروع هنا في المستودع:
    https://github.com/Ahmed-ALfadaly/travel.github.io بل قمت برفع الكود المصدري، يجب تحزيم المشروع من خلال npm run build، ثم رفع مجلد build أو dist أو public أيًا كان اسمه في مستودع منفصل أو في فرع branch منفصل في نفس المستودع بجانب الكود االمصدري الذي يوجد في فرع main.
    والأسهل رفع مشاريعك على netlify حيث تستطيع رفع مجلد المشروع الذي تم تحزيمه مباشرًة إلى الاستضافة وسيتم توفير رابط لك، أو تستطيع رفع المشروع من خلال إختيار مستودع github.
     
  12. إجابة Mustafa Suleiman سؤال في اود تعلم الذكاء الاصطناعي ( تعلم الألة ) .. واريد خطة واضحة لكي لا اضيع وقتي كانت الإجابة المقبولة   
    أنت لم تضيع وقتك في تعلم ما ذكرته وهو جافاسكريبت و React Native، بل على العكس هناك طلب على مطوري React Native الجيدين.
    ودائمًا أصعب لغة هي لغة البرمجة الأولى، وأنت الآن قمت بدخول مجال البرمجة وأصبح لديك أساسيات تستند إليها لتعلم ما تريد في المجالات المختلفة، فبالطبع الفرق كبير بينك وبين من يريد تعلم مجال مثل (تعلم الآلة) وهو بعيد تمامًا عن مجال البرمجة.
    لكن قبل إختيار المجال، عليك تحديد الوقت المتاح لك للحصول على وظيفة ويجب تحديد وقت واقعي وليس أمنيات، في حال كان الوقت المتاح لك سنة أو أقل، إذن مجال تعلم الآلة ليس لك.
    ابحث في سوق العمل لديك عن المجالات المطلوبة والتي تطلب خبرة سنة أو أقل ثم قم بتعلم المهارات المطلوبة، تلك هي الطريقة الصحيحة لدخول سوق العمل، والبحث يتم على مواقع التوظيف مثل LinkedIn و indeed و Bayt.
     
  13. إجابة Mustafa Suleiman سؤال في git (repositories already exist) كانت الإجابة المقبولة   
    الرابط الصحيح للمستودع لديك هو التالي:
    https://github.com/Ahmed-ALfadaly/Travel_Agency.github.io لذا عليك تعديل الرابط من خلال التالي:
    git remote set-url origin https://github.com/Ahmed-ALfadaly/Travel_Agency.github.io ثم تنفيذ الأوامر الأخرى.
  14. إجابة Mustafa Suleiman سؤال في عدم العثور على علامة التبويب "Keys" في حساب مطور Apple لإنشاء API Key لـ Fastlane كانت الإجابة المقبولة   
    حاليًا توجه إلى تبويب Integration  ثم من هناك تستطيع إنشاء مفتاح.
  15. إجابة Mustafa Suleiman سؤال في استفسار حول خدمة Authentication من الفايربيز كانت الإجابة المقبولة   
    خدمات تسجيل الدخول من خلال، signInWithGoogle، signInWithApple وحسابات جوجل جيميل وابل كلاود، مجانية بدون حدود أو قيود ولا يوجد عدد محدد لعدد المستخدمين خلال الشهر الواحد.
    وباستطاعتك الإعتماد على الخدمات مجانًا دون الحاجة إلى الانتقال إلى الباقة المدفوعة.
    بينما "Other Authentication services" تشير إلى خدمات تسجيل دخول أخرى غير مدعومة بشكل مباشر من Firebase، ومنها:
    تويتر فيسبوك GitHub https://firebase.google.com/docs/auth
    https://firebase.google.com/docs/auth/flutter/start
  16. إجابة Mustafa Suleiman سؤال في استفسار حول ظهور التطبيقات في سوق جوجل بلاي كانت الإجابة المقبولة   
    الأمر راجع لإحتمالات مختلفة، فربما يكون اسم التطبيق طويلًا جدًا أو يحتوي على رموز خاصة أو كلمات غير متداولة، فمن الأفضل أن يكون اسم التطبيق قصير ووصفًا وسهل الفهم.
    أو وصف التطبيق غير كافي أو ليس ذا صلة بكلمات البحث التي يستخدمها المستخدمون، قم بوضع وصف التطبيق بشكل يحتوي بالكلمات الرئيسية ويوضح وظائف التطبيق وفوائده.
    وقد يكون تصنيف التطبيق مناسبًا لفئة التطبيق، فاختر تصنيف دقيق يعكس محتوى التطبيق ووظائفه.
    أو عدد تحميلات التطبيق كافيًا لجعله يظهر في نتائج البحث، لذلك حاول الترويج لتطبيقك من خلال قنوات مختلفة لجذب المزيد من المستخدمين.
    بالإضافة إلى أنّ فهرسة التطبيق  بواسطة Google Play يستغرق بعض الوقت بعد نشره، فانتظر بعض الوقت.
  17. إجابة Mustafa Suleiman سؤال في مشكلة تأخر عملية البناء لمشروع flutter في xcode كانت الإجابة المقبولة   
    الأمر طبيعي بالفعل على Xcode، ولحل المشكلة عليك استخدام النسخة المجمعة مسبقًا pre-compiled من Firestore iOS SDK.
    https://github.com/invertase/firestore-ios-sdk-frameworks وستجد أن وقت البناء انخفض بشكل كبير.
    وذلك بسبب أن النسخة الغير مجمعة مسبقًا من Firestore iOS SDK بها 500+ ألف سطر برمجي تخيلي أن ذلك يتم تجميعه في وقت البناء؟
    في ملف ios/Podfile.lock تفقد نسخة  Firebase iOS SDK وكمثال هنا هي نسخة 9:
    PODS: - cloud_firestore (3.2.1): - Firebase/Firestore (= 9.2.0) - firebase_core - Flutter عليك تفقد هل يوجد نسخة مجمعة لذلك الإصدار أم لا وحاليًا متوفر حتى الإصدار 10.21.0.
    ثم تغيير النسخة في ios/Podfile لتشير للنسخة المجمعة كالتالي:
    pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '10.19.0'  
  18. إجابة Mustafa Suleiman سؤال في سؤال عن سجلات dns في الدومين كانت الإجابة المقبولة   
    بالطبع تستطيع إزالتها ذلك للتأكد من أنك صاحب الموقع بالفعل بعد التأكيد يمكنك حذفها لا مشكلة.
  19. إجابة Mustafa Suleiman سؤال في كيف يمكنني زيادة سرعة الموقع مع استخدام صور ذات جودة عالية كانت الإجابة المقبولة   
    بالتأكيد أنت تستخدم الصور بحجمها الكامل وأيضًا لم تقم بضغطها مع استخدام صيغة مناسبة لكي لا تفقد جودتها، وتستطيع فعل ذلك من خلال الفوتشوب من خلال تصغير حجم الصور لتكون ضعف الحجم الذي تريد عرضها به، مثلاً لو تريد 500 بكسل ستكون الصورة 1000 بكسل لكي تظهر بجودة جيدة على الهواتف التي بها تقنية الـ double pixel.
    ثم حفظها بصيغة webp أو avif.
    وإذا لم ترد استخدام الفوتشوب تستطيع استخدام موقع Squoosh من خلال المتصفح، لتنفيذ ما سبق.
     
  20. إجابة Mustafa Suleiman سؤال في مشكل Human Verification عند تصفح الأكاديمية كانت الإجابة المقبولة   
    ذلك طبيعي حيث يتم تفقد الإتصال الخاص بك من وقت لآخر أثناء تصفح الأكاديمية، لكن هناك تعارض بين Salfeld و ميزة human verification في cloudflare.
    حاول تجربة استخدام vpn من أجل تمكن الدخول للموقع ثم تعطيله بعد نجاح الدخول، وهناك إضافات على المتصفح مثل Windscribe.
    https://chrome.google.com/webstore/detail/hnmpcagpplmpfojmgmnngilcnanddlhb وإن أمكن تعطيل Salfeld أثناء تصفح الأكاديمية فسيحل ذلك المشكلة.
  21. إجابة Mustafa Suleiman سؤال في ال size() function مش بتشتغل معايا  كانت الإجابة المقبولة   
    لأن دالة size() التي تستخدمها غير متوفرة في مكتبة C++ القياسية، وهناك وظائف مختلفة تسمى size() تعمل مع هياكل بيانات مختلفة، لكن تلك التي تستخدمها قد تكون خاصة بمكتبة معينة أو قد تكون وظيفة مخصصة لم تحددها.
    استخدام عامل sizeof() (للمصفوفات على غرار C) مثل numbers في الكود لديك، للحصول على عدد العناصر، ومع ذلك، لاحظ أن ذلك يرجع الحجم الكلي للمصفوفة بالبايتات، وليس عدد العناصر:
    #include <iostream> using namespace std; int main() { int numbers[] = {10, 20, 3, 30, 5, 7, 40}; int numssize = sizeof(numbers) / sizeof(numbers[0]); cout << numssize << endl; // Output: 7 return 0; } وإن كنت تستخدم عناصر من مكتبة Standard Template Library (STL) ، مثل المتجهات أو المصفوفات أو السلاسل، فتستطيع الإعتماد على دالة std::size():
    #include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers = {10, 20, 3, 30, 5, 7, 40}; int numssize = std::size(numbers); cout << numssize << endl; // Output: 7 return 0; } ولو لديك وظيفة مخصصة أو مكتبة تحدد دالة size() خصيصًا لحالة استخدامك، فتحتاج إلى التأكد من أن الوظيفة مرئية في نطاق وظيفتك main()، وتحقق من مكان تعريف الوظيفة وتضمين الرؤوس أو الملفات الضرورية لإحضارها إلى النطاق.
  22. إجابة Mustafa Suleiman سؤال في إطار Next.Js هل هو باك اند أم فرونت اند ؟ كانت الإجابة المقبولة   
    الأمر محير بالفعل، ويجعلك تتسائل هل نحن بحاجة إلى واجهة خلفية عند استخدام Next.js؟
    أولاً Next.js مبني على بيئة Node.js بالفعل، أي مضمن بداخله Node.js.
    ومشاريع Next.js وNode.js تستطيع نشرهم على سيرفر عادي ولا يشترط أن نشر تطبيقات Next.js على منصة تدعم الـ serverless.
    وتستطيع من خلال Next.js إنشاء واجهة خلفية لتطبيقك بالفعل، من خلال إنشاء API's والتعامل مع قاعدة البيانات، فكما ذكرت الإطار مبني فوق بيئة Node.js.
    وبشكل مفصل لنتعرف أولاً على دورة حياة طلب الجزء الخلفي وتبدو تقريبًا كما يلي:
    المصادقة التفويض فك تسلسل الطلب (= ضمني في NodeJS / أو اللغات ديناميكية أي يحدث تلقائيًا في الخلفية) التحقق من صحة الطلب استرجاع الكائنات ذات الصلة business logic (كيفية عمل الخادم وكيفية تفاعله مع البيانات) الآثار الجانبية Side effects (ليس فقط التخزين في قاعدة البيانات، ولكن إرسال البريد الإلكتروني، واستدعاء خدمة خارجية أخرى، إلخ) ربط نموذج البيانات برد API تنطبق تلك الخطوات سواء كنت تستخدم GraphQL أو REST أو gRPC أو أي بروتوكول آخر.
    وكل ذلك تستطيع تسطيع تنفيذه من خلال Next.js لا مشكلة في ذلك، وبشكل مختصر الإطار ممتاز جدًا ويغنيك عن إنشاء واجهة خلفية بشكل منفصل في حال كان المشروع يتمحور أكثر نحو الواجهة الأمامية، أما في حالة العكس فستحتاج إلى واجهة خلفية منفصلة للتعامل مع الأمور المعقدة.
  23. إجابة Mustafa Suleiman سؤال في مشكلة في تشغيل برنامج Xampp كانت الإجابة المقبولة   
    قمت بتشغيل xampp كمسؤول وأعد الخطوات مرة ثم حاول التشغيل:
     

  24. إجابة Mustafa Suleiman سؤال في اريد داتا لتجار جمله من اين احصل عليها كانت الإجابة المقبولة   
    عليك شراء تلك الداتا أو سحبها بنفسك في حال توافرت، ابحث على جوجل عن "سحب داتا للإعلانات" وهناك مواقع توفر لك داتا بجودة عالية وأيضًا تفقد جروبات الفيس بوك المختصة بذلك.
  25. إجابة Mustafa Suleiman سؤال في شرح أنواع العلاقات في django كانت الإجابة المقبولة   
    أرجو التعليق أسفل فيديو الدورة لمساعدتك بشكل أفضل وطرح الأسئلة العامة هنا، وستجد المقالات والنقاشات التالية عونًا لك:
    وتصنف العلاقات في Django إلى ثلاثة أنواع رئيسية:
    علاقات واحد إلى واحد (One-to-One Relationships) علاقات واحد إلى كثير (One-to-Many Relationships) علاقات كثير إلى كثير (Many-to-Many Relationships) علاقات واحد إلى واحد (One-to-One Relationships)
    في علاقة واحد إلى واحد، يرتبط كل كائن من كائنين بحد أقصى بكائن واحد من الكائن الآخر، أي أن يكون لدى كل شخص بطاقة هوية واحدة، ولكن يمكن أن يكون لدى كل بطاقة هوية شخص واحد فقط.
    لنفترض أن لدينا نموذجين: Person و IdentityCard، ونريد أن نربط كل شخص ببطاقة هوية واحدة فقط، وكل بطاقة هوية بشخص واحد فقط.
    # models.py class Person(models.Model): name = models.CharField(max_length=255) identity_card = models.OneToOneField( 'IdentityCard', on_delete=models.CASCADE) class IdentityCard(models.Model): number = models.CharField(max_length=10) هنا نستخدم حقل OneToOneField لربط الكائنين. يُحدد الحقل on_delete ما يجب القيام به بالكائن المرتبط عندما يتم حذف الكائن الرئيسي، ونريد حذف الكائن المرتبط أيضًا، لذلك نستخدم on_delete=models.CASCADE.
    علاقات واحد إلى كثير (One-to-Many Relationships)
    تتيح لنا ربط كل كائن من كائن واحد بالعديد من الكائنات من كائن آخر، مثلاً لدى كل مدرس العديد من الطلاب، ولكن يمكن أن يكون لدى كل طالب مدرس واحد فقط.
    ولنفترض أن لدينا نموذجين هما Teacher و Student، ونريد أن نربط كل مدرس بالعديد من الطلاب، وكل طالب بمدرس واحد فقط.
    # models.py class Teacher(models.Model): name = models.CharField(max_length=255) students = models.ManyToManyField( 'Student', through='Enrollment') class Student(models.Model): name = models.CharField(max_length=255)  نعتمد على حقل ManyToManyField لربط الكائنين، ويُستخدم حقل through لتحديد جدول وسيط يربط الكائنين هو Enrollment.
    علاقات كثير إلى كثير (Many-to-Many Relationships)
    يرتبط كل كائن من كائنين بالعديد من الكائنات من الكائن الآخر، مثل أن يكون لدى كل كتاب العديد من المؤلفين، ويمكن أن يكون لدى كل مؤلف العديد من الكتب.
    ولنفترض أن لدينا نموذجين Book و Author، ونريد أن نربط كل كتاب بالعديد من المؤلفين، وكل مؤلف بالعديد من الكتب.
    # models.py class Book(models.Model): title = models.CharField(max_length=255) authors = models.ManyToManyField( 'Author', through='BookAuthor') class Author(models.Model): name = models.CharField(max_length=255) لاحظ حقل ManyToManyField لربط الكائنين، ويُستخدم حقل through لتحديد جدول وسيط يربط الكائنين يسمى BookAuthor.
×
×
  • أضف...