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

مسعود زاهي

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

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

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

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

    1

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

  1. إجابة مسعود زاهي سؤال في مشكلة مكتبة winsound في بايثون لا تشغل الصوت كانت الإجابة المقبولة   
    مرحبا ابراهيم،
    سبب عدم عمل الصوت هو المسار الذي وضعته لملف الصوت:
    winsound.PlaySound('data\yes.wav', 1) إذ يجب عليك كتابته على الشكل التالي:
    winsound.PlaySound('data\\yes.wav', 1) كما يجب عمل elif في الشرط الثاني:
    if self.result != self.letter: #هنا elif self.result != self.letter: # الأصح بالتوفيق.
  2. إجابة مسعود زاهي سؤال في كيف استرجع كل رسائل الشات العام من قاعدك البيانات ماعدا رسائل المستخدمين المحضورين من قبل المستخدم الزائر للشات كانت الإجابة المقبولة   
    مرحبا علي،
    للحصول على الرسائل الموجودة في الجدول chat بدون رسائل المحضورين يكفي عمل الإستعلام الآتي:
    SELECT * FROM chat WHERE user not in (SELECT user2 from block WHERE user1=user_id) /* user_id: هو الايدي الخاص بالمستخدم الحالي */ بالتوفيق.
  3. إجابة مسعود زاهي سؤال في مشاكل ملفات الSTATIC في مشروع Django عند الرفع على إستضافة heroku كانت الإجابة المقبولة   
    مرحبا مجددا محمد،
    الملفات الثابتة static files تظهر في موقعك بشكل صحيح. لاحظ أن الصورة المتواجدة في الصفحة الرئيسية تظهر بالشكل المطلوب.
    المشكلة في الصور التي تقوم بتحميلها والتي تعتبر عبارة عن Media Files قم بتغيير
    MEDIA_URL = 'images/' في ملف الإعدادات إلى:
    MEDIA_URL = 'static/img/uplouded/' وسوف تظهر الصور.
    بالتوفيق.
  4. إجابة مسعود زاهي سؤال في تعديل القاموس في بايثون كانت الإجابة المقبولة   
    في هذه الحالة عليك بحفظ القاموس في ملف أو في قاعدة بيانات واسترجاعه عند تشغيل البرنامج من جديد.
    لحفظ قاموس في ملف من نوع json مثلا:
    # تحميل وحدة json import json # نقوم بتعريف القاموس dict = {'Python' : '.py', 'C++' : '.cpp', 'Java' : '.java'} # إنشاء كائن json من القاموس json = json.dumps(dict) # فتح ملف للكتابة ، "w" f = open("dict.json","w") # اكتب كائن json إلى ملف f.write(json) # اغلاق الملف f.close() أما لاسترجاع القاموس من ملف ال json نقوم ب:
    import json # فتح الملف with open('dict.json') as json_file: # نسترجع القاموس المحفوظ dict = json.load(json_file) بالتوفيق،
  5. إجابة مسعود زاهي سؤال في لا يتم جلب أي بيانات من قاعدة البيانات عند إضافة التابع __init__ في نموذج model في جانغو Django كانت الإجابة المقبولة   
    توثيق جانغو لا ينصح بتغيير التابع __init__ في النماذج (Models) ﻷنه قد يؤدي إلى خلل في حفظ البيانات وإنما ينصح ب:
    إنشاء دالة ثابتة (classmethod) في النموذج: class Post(models.Model): .... @classmethod def create(cls, title, content, description): post = cls(title=title, content=content, description=description) return post ويتم استدعاؤها على الشكل التالي:
    p = Post.create('my post title','some content', 'summary of the post')  
    إضافة تابع إلى مدير النموذج (Manager) - عادةً هذا ما ينصح به- :
    #نقوم بإنشاء مدير مخصص class PostManager(models.Manager): def create_post(self, title, content, description): post = self.create(title=title, content=content, description=description) return post class Post(models.Model): ... #تعيين مدير النموذج objects = PostManager() ويتم استدعاء هذا التابع على الشكل التالي:
    p = Post.objects.create_post('my post title','some content', 'summary of the post')  
  6. إجابة مسعود زاهي سؤال في كيفية منع المتصفحات من تخزين الرد response في جانغو Django؟ كانت الإجابة المقبولة   
    لمنع المتصفح من تخزين العرض في ذاكرة التخزين المؤقت (Cache) يمكنك استعمال المزخرف  never_cache والذين يقوم بإضافة الترويسات:
    Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private إلى الرد (Response) تُخبر المتصفح بعدم تخزين الصفحة.
    أما كيفية استخدام هذا المزخرف في العرض فهو كالتالي:
    # نقوم باستدعاء المزخف from django.views.decorators.cache import never_cache #نضع المزخرف فوق دالة العرض @never_cache def myview(request): ...  
  7. إجابة مسعود زاهي سؤال في كيفية جعل حقل إختياري optional في إستمارة Form في جانغو Django؟ كانت الإجابة المقبولة   
    توجد طريقتان لجعل حقل إختياري في نموذج من نوع ModelForm  في جانغو:
    الطريقة الأولى إعادة كتابة الحقل في النموذج وإضافة الخاصية required=False له: class DetailsForm(ModelForm): name = forms.CharField(required=False) #أعدنا كتابة الحقل وجعله إختياري class Meta: model = Details def __init__(self, *args, **kwargs): super(DetailsForm, self).__init__(*args, **kwargs) # كيفية جعل هذه الحقول إختيارية self.fields['name'].widget = widgets.AdminSplitDateTime() self.fields['email'].widget = widgets.AdminSplitDateTime()  
    الطريقة الثانية: إضافة الخاصية required=False للحقل من خلال الدالة init: class DetailsForm(ModelForm): class Meta: model = Details def __init__(self, *args, **kwargs): super(DetailsForm, self).__init__(*args, **kwargs) # self.fields['name'].widget = widgets.AdminSplitDateTime() self.fields['email'].widget = widgets.AdminSplitDateTime() # جعل الحقول اختيارية self.fields['name'].required = False self.fields['email'].required = False  
     
  8. إجابة مسعود زاهي سؤال في كيفية تخزين مجموعة من الصور معًا في نموذج Model قي جانغو Django؟ كانت الإجابة المقبولة   
    حالياً لا يوجد حقل في جانغو يُمَكّننا من حفظ مجموعة من الصور معاً.
    بدلاً من ذلك يُمكنك إنشاء نموذج تحفظ فيه الصور وتقوم بربطه بالمُنتج عن طريق علاقة واحد إلى مُتعدد على الشكل التالي:
    # نموذج المنتج class Product(models.Model): """ """ #نموذج صور المُنتج class ProductImage(models.Model): image = models.ImageField(upload_to="products/") # نقوم بربط الصورة بالمُنتج عن طريق علاقة واحد إلى كثير product = models.ForeignKey("Product", on_delete=models.CASCADE, related_name="images") للحصول على صُور منتج ما نقوم ب:
    >>> product1 = Product.objects.get(id=1) # للحصول على كل صور المنتج نقوم ب >>> product1.images.all()  
  9. إجابة مسعود زاهي سؤال في كيفية تخطى الأقواس {{ و }} في قوالب جانغو Django؟ كانت الإجابة المقبولة   
    لإجبار محرك قوالب جانغو على تجاهل جزء من الشيفرة وعرضه كما هو من غير مُعالجة يمكننا كتابة هذه الشيفرة داخل الكتلة verbatim:
    {% verbatim %} <p> النص بداخل هذه الكتلة سيتم تجاهله من طرف محرك قوالب جانغو وسيقوم بعرضه كما هو </p> <p>{{ some text }}</p> {% endverbatim %} كما يحتوي جانغو على وُسُوم قوالب (template tags) تعمل على كتابة بعض من الرموز الخاصة، مثلاً لكتابة الرمز الخاص {% نستعمل وسم القالب:
    The {% templatetag openblock %} characters open a block. والنتيجة تكون:
    the {% characters open a block. مثلاً لو أردنا إظهار {{ some text }} في القالب نكتب:
    {% templatetag openvariable %} some text {% templatetag closevariable %}  
  10. إجابة مسعود زاهي سؤال في كيفية الطرح من متغير في قوالب جانغو Django؟ كانت الإجابة المقبولة   
    في قوالب جانغو يمكنك إستعمال المرشح (filter) add في عملية الطرح أيضاً وذلك بتمرير قيمة سالبة له ووضعها داخل علامة الاقتباس المزدوجة على الشكل التالي:
    {{ myvariable|add:"-123" }} أو يُمكنك إنشاء مُرشح جديد يقوم بعملية الطرحْ:
    @register.filter def subtract(value, arg): return value - arg ويمكنك استعماله على الشكل التالي في قوالب جانغو:
    {{ myvariable|substact:123 }} # يقوم بطرح قيمة 123 من قيمة المتغير  
  11. إجابة مسعود زاهي سؤال في كيفية التأكد من أن الحقل FileField ليس فارغًا في نموذج Model في جانغو Django؟ كانت الإجابة المقبولة   
    يمكنك التحقق من أن الحقل thumbnail ليس فارغاً باستخدام الخاصية name الموجودة في الصنف FileField على الشكل التالي:
    >>> note.thumbnail <FieldFile: None> >>> note.thumbnail.name is not None False لاحظ أننا استخدمنا الخاصة name وتحققننا من أنها ليست فارغة والنتيجة كانت خطأ ﻷن الحقل thumbnail فارغ.
    الخاصية name: تحتوي على اسم الملف الذي يقوم المستخدم برفعه. فإذا لم يكن بها قيمة فهذا يعني ان الحقل فارغ.
  12. إجابة مسعود زاهي سؤال في كيفية إستخدام enumerate في قوالب جانغو Django؟ كانت الإجابة المقبولة   
    لا يُمكن استخدام الدالة enumerate في القوالب الخاصة بجانقو إذْ أنها لا تُعتبر من الدوال المُدمجة فيها.
    بدلاً من ذلك فإن الحلقة for تتضمن على forloop.counter او forloop.counter0 والذان يُشيران إلى قيمة عداد الحلقة في كل لفة والفرق بينهُما أنَّ forloop.counter العَدُّ فيه يبدأ من 1 أما forloop.counter0 فالعد يبدأ من 0.
    الشفرة الخاصة بك تُصبح:
    {% for a in c %} {{ forloop.counter0 }} ,{{ a }} {% endfor%}  
  13. إجابة مسعود زاهي سؤال في كيفية عمل ForeignKey لنفس النموذج model في جانغو Django؟ كانت الإجابة المقبولة   
    لربط مُستخدمٍ بمستخدمٍ آخر  - مثلاً الإبن بأبيه أو العكس - يمكنك إستعمال الصنف ForeignKey من الوحدة models وتقوم بتمرير كلمة 'self' إليه بدل إسم النموذج وتسمى هذه الطريقة بالمرجعية الذاتية ( self-referential):
    class Person(models.Model): name = models.CharField(max_length =30) father = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) لاحظ أن النموذج Person يحتوي على رابط إلى الوالد (father) الذي بدوره يُعتبر أيضا Person. مثلنا هذه العلاقة باستخدام models.ForeignKey('self').
  14. إجابة مسعود زاهي سؤال في كيفية الحصول على كل أسماء النماذج في تطبيق جانغو Django؟ كانت الإجابة المقبولة   
    يُمكنك الحصول على أسماء كل النماذج في تطبيق ما باستخدام الشيفرة التالية:
    from django.apps import apps # للحصول على كل النماذج في التطبيق app_models = apps.get_app_config('my_app').get_models() model_names = [] # نقوم بحفظ أسماء النماذج في المتغير # model_names for model in app_models: model_names.append(model.__name__) كما يُمكنك استخدام الدالة all_models من الوحدة apps للحصول على كل النماذج:
    from django.apps import apps app_models = apps.all_models['my_app'] حيث: my_app هو اسم تطبيق جانغو.
  15. إجابة مسعود زاهي سؤال في كيفية إرسال إختيارات متعددة من عنصر select في جانغو Django؟ كانت الإجابة المقبولة   
    إذا كُنت تستخدم الطريقة POST لإرسال معلومات النموذج من القالب إلى السرفر يُمكنك استعمال الشيفرة التالية لكي تحصل على كل الإختيارات التي إختارها المُستخدم:
    request.POST.getlist('options') حيثُ: options هو اسم الحقل select في النموذج.
    في حالة عدم قيام المُستخدم باختيار أي خيار الشيفرة تقوم بإرجاع قائمة فارغة.
     
  16. إجابة مسعود زاهي سؤال في كيفية إضافة ملاحظة أسفل حقل input في جانغو Django؟ كانت الإجابة المقبولة   
    لإضافة ملاحظة أسفل الحقول توجد طريقتان:
    الطريقة الأولى في ال Model: تكونُ بإضافة الخاصية help_text إلى حقول ال Model مثالُ ذلك: class MyModel(Model): myfield = models.DateField( help_text = "Please use the following format: <em>YYYY-MM-DD</em>." ) نُلاحظ أننا أضفنا الخاصية help_text إلى الحقل myfield حتى نُوضح للعميل كيفية كتابة التاريخ بشكل صحيح. الطريقة الثانية في ال Form: تكون أيضا بإضافة الخاصية help_texts إلى الصنف Meta المُتواجد داخل ال ModelForm الخاصة بنا مثالُ ذلك: class MyModelForm(forms.ModelForm): class Meta: model = MyModel fields = ['myfield',] labels = {'myfield': "My Field",} help_texts = {'myfield': "Please use the following format: <em>YYYY-MM-DD</em>.",} لاحظ أننا قمنا بإنشاء نموذج ModelForm من MyModel يحتوي على الحقل myfield. قُمنا بإعطاء تسمية للحقل وسميناه My field وقمنا بوضع نص مُساعدة سوف يظهر أسفل الحقل عند عرضه في القالب. 
  17. إجابة مسعود زاهي سؤال في كيفية تفريغ الحقول بعد التحقق من البيانات بإستخدام flask-wtforms في فلاسك Flask؟ كانت الإجابة المقبولة   
    تكمُن المشكلة في أنك دائما تقوم بإرجاع النموذج إلى القالب سواءً كان النموذج صحيحا أو به أخطاء 
    return render_template("register.html", form=form) لهذا النموذج يظل يعرض البيانات السابقة بعد إرسالها والتحقق من صلاحيتها. لتفادي هذا الأمر يلزمك إضافة تحويل بعد التحقق من صلاحية البيانات وحفظها في قاعدة البيانات على الشكل التالي:
    @app.route('/', methods=['GET', 'POST']) def register(): form = NewRegistration() if form.validate_on_submit(): # save in database ... # أضف هذا السطر return redirect(url_for('register')) return render_template("register.html", form=form)  
  18. إجابة مسعود زاهي سؤال في كيفية معرفة نوع متصفح العميل في جانغو Django؟ كانت الإجابة المقبولة   
    للحصول على نوع المُتصفح الذي يستخدمه المُستخدم للدخول إلى الموقع إستعمل:
    request.META['HTTP_USER_AGENT'] والتي تحتوي على قيمة ال UserAgent الخاص بالمُتصفح.
    لإستعمالها في القالب نكتب:
    {% if "msie" in request.META.HTTP_USER_AGENT|lower %} <p> أنت تستعمل المُتصفح </p> <p> Internet Explorer </p> {% endif %} يُمكنك أيضاً استخدام نص HTML يقوم بالمطلوب من دون إضافة شفرة من إطار العمل جانغُو:
    <!--[if IE]> <div> أنت تستعمل متصفح Internet explorer </div> <![endif]-->  
  19. إجابة مسعود زاهي سؤال في كيفية إزالة علامة / من الخاصية request.path في جانغو Django؟ كانت الإجابة المقبولة   
    لحذف علامة / من بداية المسار الذي تُنتجه الدالة request.path عليك باستعمال دالة بايثون strip وتمرير علامة / لها على الشكل التالي:
    request.path.strip("/") الدالة strip ستعمل على حذف الرمز / من بداية ونهاية السلسلة النصية المُنتجة من request.path.
    يُمكنك أيضا إستعمال العبارات النمطية لحذف العلامة / من نهاية السلسلة النصية:
    import re re.sub("^/", "", request.pth)  
  20. إجابة مسعود زاهي سؤال في كيفية تحميل ملف CSV عبر ملف عرض في فلاسك Flask؟ كانت الإجابة المقبولة   
    قم بإنشاء البياننات باستخدام الدالة writer من الوحدة csv واحفظها في الذاكرة باستخدام StringIO وبعدها قُم بإرسالها للمُستخدم على شكل ملف csv قابل للتحميل:
    import csv # نقوم باستدعاء الوحدة csv from flask import Flask from io import StringIO from werkzeug.wrappers import Response app = Flask(__name__) @app.route('/') def download_history(): def generate(): """ هذه الدالة تسمح بإنشاء البيانات على شكل CSV """ data = StringIO() w = csv.writer(data) # إنشاء البيانات التي نُريد إرسالها للمُستخدم history = [ ('/login', datetime(2022, 3, 4, 3, 38)), ('/' , datetime(2022, 3, 4, 3, 38)), ('/order', datetime(2022, 3, 4, 3, 39)), ('/logout', datetime(2022, 3, 4, 3, 42)) ] # حفظ البيانات داخل ملف # CSV for item in history: w.writerow(( item[0], item[1].isoformat() # تنسيق التاريخ كسلسلة نصية )) yield data.getvalue() data.seek(0) data.truncate(0) # إرسال البيانات للمُستخدم لتحميلها response = Response(generate(), mimetype='text/csv') # الملف اسمه # history.csv response.headers.set("Content-Disposition", "attachment", filename="history.csv") return response  
  21. إجابة مسعود زاهي سؤال في كيفية التأكد من أن نص معين يحتوي على نص آخر في قوالب جانغو Django؟ كانت الإجابة المقبولة   
    عليك بنزع الأقواس المُجعدة {{ }}  وعلامات الإقتباس "" من على request.build_absolute_uri ﻷنك قُمت باستدعاء وسم القالب {% if %} فلا يوجد أي داعي لإضافتهم.
    {% if 'ar' in request.build_absolute_uri %} 'AR' {% else %} 'EN' {% endif %}  
  22. إجابة مسعود زاهي سؤال في كيفية عرض قاموس dictionary في قالب Jinja في فلاسك Flask؟ كانت الإجابة المقبولة   
    لعرض بيانات القاموس user في قالب jinja عبر حلقة for نكتُب الآتي:
    <tbody> {% for key, value in user.items() %} <tr> <td>{{key}}</td> <td>{{value]}}</td> </tr> {% endfor %} </tbody> شرح الشفرة:
    استعملنا التابع items الذي يقوم بإرجاع مجموعة من الصفوف Tuples ، كل صف يحتوي على مفتاح وقيمة. استعملنا أيضا for للمُرور على مجموعة الصفوف لعرض المفتاح والقيمة.
  23. إجابة مسعود زاهي سؤال في كيفية طباعة كل المسارات المستخدمه في تطبيق جانغو Django؟ كانت الإجابة المقبولة   
    لعرض كل المسارات الموجودة في تطبيق مبني باستخدام إطار العمل جانغُو توجَد عدة طُرق لذلك منها :
    باستخدام الدالة get_resolver python manage.py shell >>> from django.core.urlresolvers import get_resolver# نقوم باستدعاء الدالة >>> set(v[1] for k,v in get_resolver().reverse_dict.items()) #يقوم بعرض كل المسارات  
    باستخدام التطبيق django-extensions: بعد تنصيب التطبيق باستخدام
    pip install django-extensions وإضافته إلى قائمة التطبيقات في ملف الإعدادات
    INSTALLED_APPS = ( ... 'django_extensions', ... ) يُمكنك طبع المسارات باستخدام الأمر
    python manage.py show_urls  
  24. إجابة مسعود زاهي سؤال في كيفية تصفية الكائنات التي ليس لديها علاقة relationship مع نموذج آخر في جانغو Django؟ كانت الإجابة المقبولة   
    من الخصائص القوية التي يمتاز  بها إطار العمل جانغُو عن غيره من أُطر العمل هو ال ORM الخاصة به والتي تجعل عمل إستخراج المعلومات من قاعدة البيانات سهلاً ومفهوماً. في الشفرة التي قُمت بكتابتها توجد علاقة OneToMany بين النموذج User والنموذج Product، إذا أردنا الحصول على المنتجات الغير المُرتبطة بالمستخدمين نقوم بعمل:
    products = Product.objects.filter(user__isnull=True) لاحظ أننا استخدمنا المُرشح isnull والذي يسمح بالتحقق من أن الحقل user ليس به قيمة.
    الآن إذا أردنا الأمر العكسي أي تصفية المستخدمين الذين ليس لديهم أي منتجات في المتجر هُنا نستعمل العلاقة العكسية بين النموذجين على الشكل التالي:
    #المستخدمون الذين ليس لديهم منتجات users_without_products = User.objects.filter(product__is_null=True) # المستخدمون الذي لديهم على الأقل مُنتج واحد users_wit_products = User.objects.filter(product__is_null=False)  
  25. إجابة مسعود زاهي سؤال في كيفية تحويل QuerySet إلى JSON في جانغو Django؟ كانت الإجابة المقبولة   
    الشفرة لا تعمل لأن جانغو QuerySet  ليست قابلة للتسلسل. لجعلها كذلك تُوجد عدة طُرق:
    الطريقة الأولى: تحويل ال QuerySet إلى قائمة (list) ثم تحويل القائمة إلى JSON class UsersListView(ListView): queryset = Users.objects.all() def get(self, request, *args, **kwargs): data = list(self.queryset.values()) # نحولها إلى قائمة return JsonResponse(data, safe=False) # بعدهها نُرجع القائمةة على شكل JSON  
    الطريقة الثانية: استعمال الدالة serializers من الوحدة django.core التي تسمح بترجمة جانغو QuerySet  إلى تنسيقات أخرى مثل ال xml، json 
    from django.core import serializers # نقوم باستدعاء الدالة class UsersListView(ListView): queryset = Users.objects.all() def get(self, request, *args, **kwargs): #نحول البيانات إلى json data = serializers.serialize('json', self.queryset) return HttpResponse(data, content_type='application/json')  
×
×
  • أضف...