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

Bassam Ahmed3

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

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

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

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

  1. إجابة Bassam Ahmed3 سؤال في كيفية وضع ال semicolon تلقائيًا عند إنهاء السطر في برنامج Atom كانت الإجابة المقبولة   
    يمكنك تثبيت الحزمة بالطريقة الأسهل في التعامل عن طريق إعدادات التطبيق ثم إختيار مدير الحزم ثم كتابة اسم الحزمه المُراد تثبيتها و هذه الطريقه الأفضل دائماً حيثُ تتميز بوجود واجهة المستخدم سهلة الإستخدام
    لكن إذا أردت اختيار موجة الأوامر فإن برنامج Atom لا يتوفر به terminal بطبيعة الحال و لكن الفكرة أن هناك نظام توجية أوامر مدمج به بصفة خارجية يمكن تشغيلة عبر موجة الأوامر في نظامك سواء linux , windows , mac و غيرها
    حيثُ على سبيل المثال يجب إضافة مسار ذلك النظام المدمج ضمن المسارات التي يتعرف عليها موجة الأوامر في حاسوبك فهذا المسار الخاص بي
    C:\Users\Bassam Ahmed\AppData\Local\atom\app-1.60.0\resources\app\apm\bin
    كما سيتم إرفاق صور توضيحية لشرح كيفية معرفة مسار ذلك النظام و توجيهه حيثُ يختلف المسار من حاسوب لاخر فالبداية شبه ثابته و هي C:\Users\ ثم اسم المستخدم ثم AppData إذا لم تجد AppData تأكد انك تظهر الملفات المخفية تلقائياً من النظام فإذا إستمر لا يظهر مجلد AppData فيمكنك كتابتة في المسار بشكل يدوي و إستكمال المسار عبر الإختيار من المجلدات و لكن في النهاية يجب الوصول لمجلد bin ثم نسخ ذلك المسار و إضافته لقائمة المسارات المتعرف عليها من قبل موجة الأوامر
    ملحوظه : يجب عليك إغلاق موجة الأوامر الخاص بك إذا كان يعمل قبل البدء في تلك الطريقة حيثُ بعد تعريف المسار يجب دائماً التأكد من تثبيت موجة الأوامر الخاص بـ Atom داخل موجة أوامر الحاسوب عبر اختبار الأمر apm فيجب ألا تظهر رسالة خطأ بعدم التعرف على الأمر , بمجرد نجاح التجربة يمكنك تثبيت الأداة عن طريق الأمر apm install auto-semicolon عبر موجة أوامر الحاسوب الخاص بك





  2. إجابة Bassam Ahmed3 سؤال في ما الفرق بين STATIC_ROOT و MEDIA_ROOT في جانغو Django؟ كانت الإجابة المقبولة   
    الفرق بين STATIC_ROOT و MEDIA_ROOT هي أن :
    STATIC_ROOT : يتم تعيين القيمة الخاصة بها إلى مسار الملفات الثابته مثل CSS / SASS / JS / JQ حتى يتعرف إطار العمل Django عليهم و يستطيع إستدعاؤهم
    MEDIA_ROOT : يتم تعيين القيمة الخاصة بها إلى مسار سيحتوي على الصور و الفيديوهات فقط و لا يحتوي على ملفات ثابته مثل STATIC_ROOT
     كلاً من STATIC_ROOT و MEDIA_ROOT يتم إستخدامهم فقط عند رفع الموقع إلى الإستضافه و لن يتغير شيء في حال تعيين قيمتهم إذا الموقع قيد التطوير أي على جهاز الحاسوب الخاص بك حيثُ يكون في مرحلة التطوير STATIC_URL و MEDIA_URL و يتم تعيين قيمتهم و لكن لمسارات تلك الملفات في جهاز الحاسوب الخاص بك
    بمجرد رفع الموقع الخاص بك و تعديل قيمة MEDIA_ROOT و STATIC_ROOT إلى مجلدات تقوم بإنشائها ليتم نقل الملفات إليها يجب عليك القيام بـكتابة الأمر python manage.py collectstatic و ذلك من أجل نقل كافة الملفات من MEDIA_URL , STATIC_URL إلى MEDIA_ROOT , STATIC_URL أي من بيئة التطوير المحلية لبيئة الإستضافة الفعلية
  3. إجابة Bassam Ahmed3 سؤال في carousel كانت الإجابة المقبولة   
    يمكنك تنفيذ ذلك الكود عن طريق إستخدام JQuery و HTML ثم ربطهم عن طريق الوسم link
    $().ready(function(){ $('.slick-carousel').slick({ arrows: true, centerPadding: "0px", dots: true, infinite: true, slidesToShow: 3, centerMode: true }); }); كود الـ HTML :
    <link href="http://kenwheeler.github.io/slick/slick/slick.css" rel="stylesheet" /> <link href="http://kenwheeler.github.io/slick/slick/slick-theme.css" rel="stylesheet"/> <div class="slick-carousel"> <div>Hello World!</div> <div>Hello World!</div> <div>Hello World!</div> <div>Hello World!</div> <div>Hello World!</div> <div>Hello World!</div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/jquery.slick/1.4.1/slick.min.js"></script> حيثُ أن في الكود الأول تم إضافة function تحمل الإسم slick-carousel ثم ربطها في الـ HTML عن طريق class لتعريفها داخل الملف و ذلك بعد إستدعاء و ربط ملف الـ jQuery
    كما تم تفعيل إختيار ظهور المؤشرات arrows و النقاط dots عن طريق القيمة True و تعيين عدد النتائج الظاهره فوق نقاط المؤشر slidesToShow إلى 3 نتائج فقط و يمكن تعديلها حسب الرغبه
  4. إجابة Bassam Ahmed3 سؤال في كيفية إختبار ميزة إرسال رسائل البريد الإلكتروني محليًا بدون mail server في جانغو Django؟ كانت الإجابة المقبولة   
    يمكنك ذلك أخي الكريم من خلال كتابة بيانات وهمية لجعل النظام يقوم بإختبار إرسال البريد الإلكتروني حيثُ يجب إضافة الأسطر التاليه في ملف settings.py
    host: EMAIL_HOST port: EMAIL_PORT username: EMAIL_HOST_USER password: EMAIL_HOST_PASSWORD use_tls: EMAIL_USE_TLS use_ssl: EMAIL_USE_SSL timeout: EMAIL_TIMEOUT ssl_keyfile: EMAIL_SSL_KEYFILE ssl_certfile: EMAIL_SSL_CERTFILE و ذلك بعد تعريف أن كافة القيم تساوي None من خلال الآتي في نفس الملف
    class backends.smtp.EmailBackend(host=None, port=None, username=None, password=None, use_tls=None, fail_silently=False, use_ssl=None, timeout=None, ssl_keyfile=None, ssl_certfile=None, **kwargs) كما يتعين عليك إضافة تعريف Email Back End في ملف settings.py
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' و إضافة السطر التالي إذا كنت تستخدم الـ console.log في عرض نتائج الإختبار
    EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' ثم إستخدام الكود التالي من أجل تعريف الإختبار في ملف الإختبار الخاص بك
    from django.core import mail connection = mail.get_connection() messages = get_notification_email() connection.send_messages(messages)  
    ملحوظه : الأسطر التاليه يمكن تثبيتها و تعتبر إضافية في حال الحاجة إليها عند حدوث مشاكل في موجه الأوامر
    python -m pip install aiosmtpd python -m aiosmtpd -n -l localhost:8025  
  5. إجابة Bassam Ahmed3 سؤال في ما هو الحد الأدنى للأسطر في ملف js ؟ كانت الإجابة المقبولة   
    لا يوجد حد أقصى للأسطر في ملف جافا سكربت و لكن يوجد طريقة يفضل التعامل معها لتفادي بعض الأخطاء على سبيل المثال :
    عند التعامل في مشروع كبير يفضل دائماً تقسيم الكود الخاص بك حتى يسهل قراءته و فهمه ليكن كالنمط التالي " مشروع موقع تواصل اجتماعي ----- يتفرع منه : تطبيق دردشات , الصفحة الشخصية , تسجيل المستخدمين " فيمكن إتباع نفس النمط في جافا سكربت عن طريق تقسيم الكود لعدة ملفات ليسهل قراءتها و التعامل معها و حتى لا يتم استدعاء ملف به مئات او آلاف الأسطر دفعة واحدة إلا إذا كان ذلك الكود بالفعل يشمل تطبيق او فكرة عليك تنفيذها ولا يمكن تقسيمها لملفات يفضل دائماً استخدام محرر أكواد موثوق به ليكون أكثر كفاءه عند معالجة أو تشغيل الكود الخاص بك في حال احتواءه على مئات او آلاف الأسطر البرمجية فبعض المحررات يحدث بها خطأ لذلك يفضل استخدام محرر قادر على فتح ذلك الملف و التعامل معه بسلاسه
  6. إجابة Bassam Ahmed3 سؤال في كيفية الدمج بين OR و AND في Eloquent في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يمكنك تحديد مجموعة شروط عن طريق السطر التالي
    $query->where([ ['column_1', '=', 'value_1'], ['column_2', '<>', 'value_2'], [COLUMN, OPERATOR, VALUE], ... ]) أما إذا أردت الدمج ما بين WHERE , AND يمكنك استخدام الأسطر التالية
    $matchThese = ['field' => 'value', 'another_field' => 'another_value', ...]; // if you need another group of wheres as an alternative: $orThose = ['yet_another_field' => 'yet_another_value', ...]; ثم
    $results = User::where($matchThese)->get(); // with another group $results = User::where($matchThese) ->orWhere($orThose) ->get(); لتعادل نفس نتيجة تلك الأسطر
    SELECT * FROM users WHERE (field = value AND another_field = another_value AND ...) OR (yet_another_field = yet_another_value AND ...)  
  7. إجابة Bassam Ahmed3 سؤال في كيف أقوم بتحديد الأعمدة التي سيتم إعادتها عند عمل إستعلام في جانغو Django؟ كانت الإجابة المقبولة   
    يمكنك جلب مجموعة أعمدة محددة في نموذج Django من خلال السطر التالي
    qs = Blog.objects.values_list('id', 'name') حيثُ أن Blog يتم استبداله بإسم النموذج الذي تم استدعاؤه من ملف models.py
    و الجديد في الأمر انك ستستخدم values_list من أجل جلب فقط الأعمدة المخصصة من النموذج و تكون بين الأقواس
  8. إجابة Bassam Ahmed3 سؤال في كيفية تحديث سجل في نموذج Model دون إنشاء سجل جديد في جانغو Django؟ كانت الإجابة المقبولة   
    يمكنك ذلك عن طريق إستخدام السطر objects.update() في ملف views.py
    على سبيل المثال تريد تحديث بيانات التاريخ بمجرد تحديث الصفحة بعد إنشاء النموذج التالي في ملف models.py و تسجيله في ملف admin.py
    class KeyData(models.Model): value = models.PositiveIntegerField() date = models.DateTimeField() ثم تقوم بكتابة دالة بسيطة في ملف views.py كالأتي :
    from django.shortcuts import render from .models import KeyData from datetime import datetime from django.utils.timezone import now def testupdate(request): tesst = KeyData.objects.update(date=datetime.now()) context = {'tesst' : tesst } return render(request , 'tessst.html' , context) حيثُ تحتوي على السطر objects.update() و تقوم بتعريف داخله تحديث التاريخ إلى الوقت الحالي على سبيل المثال فيمكن تغيير ذلك بأي حقل تريد تحديثه في النموذج model الذي قمت بإنشاؤه مسبقاً
    ثم تقوم بإدراج و تعويض عن طريق الـ context داخل ملف html بشكل اعتيادي و على سبيل المثال ستأخذ القيمة value او اي قيمه تريد عرضها من النموذج model داخل الملف html
    {{tesst.value}} فبمجرد تحديث الصفحة ستجد أن التاريخ تم تحديثه في لوحة التحكم بكل سهوله
  9. إجابة Bassam Ahmed3 سؤال في كيفية إنشاء مستخدم برمجيًا عند تشغيل manager.py syncdb في جانغو Django؟ كانت الإجابة المقبولة   
    يوجد طريقتين لحل تلك المشكله :
    يمكنك حذف بيانات جداول البيانات في التطبيق الذي تقوم بالإختبار عليه بدلاً من حذف قاعدة البيانات كلها عن طريق تلك الأوامر بشكل متتابع مع إستبدال appname بإسم التطبيق المراد حذف جداوله في قاعدة البيانات :
    python manage.py sqlclear appname python manage.py dbshell ثم تطبيق ذلك الأمر من أجل إعادة إنشاء جداول البيانات بالعلم أنه يعادل الأمر python manage.py migrate في الإصدارات الحديثة من Django
    python manage.py syncdb أو يمكنك تخطي إنشاء إسم المستخدم في حال تريد حذف قاعدة البيانات بالكامل و ليس لتطبيق محدد عن طريق الأمر
    python manage.py syncdb --noinput  
  10. إجابة Bassam Ahmed3 سؤال في كيفية حذف الملفات المرفوعة بشكل تلقائي عند حذف السجل من قاعدة البيانات في جانغو Django؟ كانت الإجابة المقبولة   
    يمكنك إستخدام ذلك الكود لحذف الملفات بعد إزالة الكائن من جداول البيانات :
    class DeleteImage(models.Model): name = models.CharField(blank=True, max_length=100) image = models.ImageField(upload_to='/pictures/', blank=True) def delete(self, using=None, keep_parents=False): self.image.storage.delete(self.image.name) super().delete() حيثُ تم إنشاء class بشكل إفتراضي يحتوي على حقلين name / image و لكننا قمنا بإنشاء دالة إفتراضية أسفله تحتوي على كود يهدف إلى ( حذف الملف بمجرد حذف الكائن المرتبط به )
  11. إجابة Bassam Ahmed3 سؤال في كيفية إستخدام قيمة غير القيمة الإفتراضية للحقل DateField في جانغو Django؟ كانت الإجابة المقبولة   
    من حيث طريقة كتابة الكود فليس به خطأ و من المفترض به أن يعمل حيثُ أن القيمة صحيحة بالفعل
    created_at = models.DateField(_("Date"), default=datetime.now) و لكن للتأكيد يجب التأكد من إستدعاء كافة الأسطر لتشغيل الكود السابق بالطريقة الصحيحه حيثُ:
    تأكد من إستدعاء الأسطر التاليه :
    import datetime from datetime import datetime كما يجب التأكد من استدعاء _ حيثُ قد تسبب بعض المشكلات البسيطة في حال إستدعاؤها بشكل غير صحيح عن طريق السطر التالي :
    from django.utils.translation import gettext as _ كما يرجى التأكد من ضبط التاريخ في جهاز الحاسوب الخاص بك لأنه يأخذ القيمة الإفتراضية منه لذلك يجب التأكد من صحة التاريخ و انه على الوضع " ظبط تلقائي "
  12. إجابة Bassam Ahmed3 سؤال في كيفية حساب مجموع بعض النتائج بإستخدام QuerySet في جانغو Django؟ كانت الإجابة المقبولة   
    يمكنك إستخدام SUM لحساب مجموع المنتجات عن طريق الكود التالي :
    def total_sale(self): total = Sale.objects.aggregate(TOTAL = Sum('amount'))['TOTAL'] return total بالعلم أن " amount " يتم إستبداله بإسم النموذج التي تريد حسابه و يتم إستبدال  " Sale " بالنموذج العام الخاص بالمنتجات
    هناك طريقه اخرى إضافيه في Django لحساب مجموع المنتجات حيثُ يُمكنك إستخدام F و annotate على سبيل المثال :
    from django.db.models import F tickets = Ticket.objects.all().annotate(total_price=F('total_quantity') * F('price')) for t in tickets: print(t.total_price) كما يمكنك دمج إستخدام F , SUM إذا كنت تريد حساب مجموع المنتجات المتواجده فعلياً في الـ Cart عن طريق التالي :
    from django.db.models import F, Sum def cart(request): cart = Cart.objects.annotate( price=Sum(F('orderitem__item__price') * F('orderitem__quantity')) ).get( order_user=request.user ) cart.total = cart.price cart.save() فهناك العديد من الطرق
  13. إجابة Bassam Ahmed3 سؤال في ما الفرق بين الحقول OneToOne وManyToMany وForeignKey في جانغو Django؟ كانت الإجابة المقبولة   
    OneToManyField أو ما يطلق عليه ForeignKey هو نوع من الحقول في models.py هدفه الربط ما بين شيء واحد فقط و شيء آخر مرتبط به على سبيل المثال  ( المستخدم الواحد يمتلك العديد من المنشورات و لكن لا يمكن أن يكون للمنشور الواحد أن يمتلكه أكثر من مستخدم )
    ManyToManyField هو نوع من الحقول يربط بين العديد من الأشياء و بين العديد من الأشياء ( كثير إلى كثير ) على سبيل المثال ( المستخدم الواحد لديه في حسابه العديد من الجروبات / المجموعات و يمكن للمجموعه أن تحتوي على العديد من المستخدمين )
    OneToOneField هو نوع المن الحقول يربط شيء واحد بالعديد من الأشياء على سبيل المثال ( المستخدم يمتلك صفحه شخصيه واحده فقط و الصفحه الشخصيه الواحده لا يمكن أن يمتلكها أكثر من مستخدم )
     
     
  14. إجابة Bassam Ahmed3 سؤال في مشكلة كبر حجم ملف models.py في مشروع جانغو Django كانت الإجابة المقبولة   
    الطريقة الأولى : يمكنك إستخدام abstract = True اسفل نموذج تقوم بإنشاؤه يحتوي على كافة الحقول المتكرر إستخدامها في عدة نماذج بدل من كتابتها مره اخرى في models.py مما يسهل من عملية الوصول لتلك الحقول و عدم زيادة حجم الملف على سبيل المثال هنا نلاحظ أن الحقل name متكرر في النموذجين School / Student :
    class School(models.Model): name = models.CharField(max_length=100) number = models.IntergerField() class Student(models.Model): name = models.CharField(max_length=100) Phone = models.IntergerField() حيثُ يُمكنك إنشاء نموذج موحد يحتوي على كافة الحقول التي يُعاد إستخدامها على سبيل المثال :
    class CommonInfo(models.Model): name = models.CharField(max_length=100) class Meta: abstract = True ثم بعد ذلك لا تعيد كتابة الحقل name مره اخرى في حال الرغبه في إعادة إستخدامه حيثُ يمكنك استدعاء النموذج CommonInfo بشكل مباشر في النموذج الجديد الذي ترغب أن يحتوي على الحقل name لتُصبح هكذا :
    class School(CommonInfo): number = models.IntegerField() class Student(CommonInfo): phone = models.IntegerField() تلك الطريقه ستقلل من عدد الأسطر المستخدمه و بالتالي إنخفاض حجم الملف models.py 
    الطريقه الثانيه : يمكنك تقسيم التطبيقات في المشروع الواحد عن طريق الأمر 
    python manage.py startapp newapp #بالعلم أن #newapp #هو متغير بإسم التطبيق الذي ترغب في انشاؤه و ذلك حتى يحتوي المشروع الواحد على عدة تطبيقات على سبيل المثال :
    تطبيق للحسابات تطبيق للمنشورات تطبيق للتعليقات تطبيق لصفحات حول الموقع و يكون لكل تطبيق ملف models.py الخاص به مما سيكون الأمر أكثر ترتيباً
  15. إجابة Bassam Ahmed3 سؤال في كيف أقوم بتشغيل بعض الأكواد عند إنشاء كائن جديد من النموذج instance of model في جانغو Django؟ كانت الإجابة المقبولة   
    يمكنك استخدام Django Signals و هي يوجد بها العديد من الخصائص التي تسمح بإستقبال الإشارات على سبيل المثال :
    عند إستقبال إشارة إنشاء مستخدم جديد في قاعدة البيانات قم بإنشاء صفحة شخصية خاصة بذلك المستخدم و ذلك يتم عن طريق استخدام أوامر الإستدعاء
    from django.db.models.signals import post_save from django.dispatch import receiver ثم نقوم بكتابة class الصفحة الشخصية للمستخدم تتضمن بعض البيانات الاختياريه مثل الاسم , العنوان , رقم الهاتف و غيرها ثم نضع django signals بعد ال class كالآتي بالعلم أن ال class الذي وضعنا بعده نموذج الإشارات هو Profile :
    @receiver(post_save , sender = User) def create_user_profile(sender , instance , created , **kwargs ): if created : Profile.objects.create(user = instance) فهناك العديد من الأوامر المستخدمه في نظام الإشارات في django لتتناسب مع كل فكرة يتم تطبيقها على سبيل المثال :
    pre_save : تستخدم في حال الرغبة في تنفيذ شيء قبل حفظ النموذج
    post_save : تستخدم في حال الرغبة في تنفيذ شيء بعد حفظ النموذج
    pre_delete : تستخدم في حال الرغبة في تنفيذ شيء قبل مسحة ( قبل حذف المستخدم قم بحذف المنشورات المتعلقه به )
    m2m_changed : تستخدم في تتبع التغييرات في العلاقات المتعدده مثل ManyToManyField و يوجد بها العديد من الأدوات  ( pre_add , post_add , pre_remove , post_remove , pre_clear , post_clear ) و غيرها من الأدوات لتسهيل تنفيذ الإشارات في حال حدوث أي تغيير في العلاقة
  16. إجابة Bassam Ahmed3 سؤال في رفعت تطبيقى على جوجل ستور لاول مرة كم من الوقت انتظر حتى اعرف هل سيتم الرفع ام لا ؟ كانت الإجابة المقبولة   
    الصورة الأولى تعني أن التطبيق تم رفعة بالفعل و حالياً قيد المراجعة من قبل شركة جوجل لمراجعة ما إذا كان التطبيق يتبع معايير المجتمع و انه آمن بنسبة ١٠٠٪
    السؤال الثاني بخصوص مراجعة التطبيق فعادة تتراوح مدة المراجعة إذا كانت تلك المرة الأولى يتم رفع بها تطبيق على حسابك ما بين ١ - ٧ أيام عمل و ما بين ١ - ٤ أيام عمل إذا لم تكن المرة الأولى لرفع تطبيقات و ما بين ٢٤ - ٣٦ ساعة عمل للموافقة على رفع تحديث لتطبيق على المنصة بالفعل
  17. إجابة Bassam Ahmed3 سؤال في ما الفرق بين abstract model وصنف عادي class في جانغو Django؟ كانت الإجابة المقبولة   
    لا يمكن إستخدام الأسطر البرمجية بشكل مباشر حيثُ يجب إستخدامها هكذا :
    class Post(models.Model): title = models.CharField(...) def get_content(self): return self.content class Meta: abstract = True و ذلك لأن في Django يتم وراثة و تعريف كل متغير من مكتبات تم تثبيتها مُسبقاً في بيئة django مثال إذا حذفت models.Model فلن يعمل السطر البرمجي لأنه يجب تعريف لـ django كيف يجب عليه أن يتعامل مع ال models حتى يسهل التعامل معها و تطبيقها في قاعدة البيانات المستخدمه في settings.py 
    أما عن  abstract = True فهي تهدف لعدم تكرار جدول البيانات مره اخرى في قاعدة بيانات django أي على سبيل المثال :
    class School(models.Model): name = models.CharField(max_length=100) number = models.IntergerField() class Student(models.Model): name = models.CharField(max_length=100) Phone = models.IntergerField() # نلاحظ هنا أن الحقل name مكرر نلاحظ أن الحقل name مُكرر في النموذجين و لمنع كتابة الحقول بشكل متكرر دائماً يتم إنشاء نموذج منفرد مثل :
    class CommonInfo(models.Model): name = models.CharField(max_length=100) class Meta: abstract = True لاحظت إضافة abstract = True حيث يتم وراثة ذلك النموذج عند انشاء النماذج بعد ذلك كالتالي :
    class School(CommonInfo): number = models.IntegerField() class Student(CommonInfo): phone = models.IntegerField() و عند تطبيق الأمرين python manage.py makemigrations 
    و الأمر python manage.py migrate سيتم إنشاء الحقل name كأن تم كتابته في النموذجين و لكن بالأصل قمنا بوراثته من class كما لاحظت أن ال class ورث من CommonInfo لتوريث كافة الحقول به لأي نموذج يتم إستدعاؤه به
×
×
  • أضف...