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

مسعود زاهي

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

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

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

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

    1

كل منشورات العضو مسعود زاهي

  1. في قوالب جانغو يمكنك إستعمال المرشح (filter) add في عملية الطرح أيضاً وذلك بتمرير قيمة سالبة له ووضعها داخل علامة الاقتباس المزدوجة على الشكل التالي: {{ myvariable|add:"-123" }} أو يُمكنك إنشاء مُرشح جديد يقوم بعملية الطرحْ: @register.filter def subtract(value, arg): return value - arg ويمكنك استعماله على الشكل التالي في قوالب جانغو: {{ myvariable|substact:123 }} # يقوم بطرح قيمة 123 من قيمة المتغير
  2. يمكنك التحقق من أن الحقل thumbnail ليس فارغاً باستخدام الخاصية name الموجودة في الصنف FileField على الشكل التالي: >>> note.thumbnail <FieldFile: None> >>> note.thumbnail.name is not None False لاحظ أننا استخدمنا الخاصة name وتحققننا من أنها ليست فارغة والنتيجة كانت خطأ ﻷن الحقل thumbnail فارغ. الخاصية name: تحتوي على اسم الملف الذي يقوم المستخدم برفعه. فإذا لم يكن بها قيمة فهذا يعني ان الحقل فارغ.
  3. لا يُمكن استخدام الدالة enumerate في القوالب الخاصة بجانقو إذْ أنها لا تُعتبر من الدوال المُدمجة فيها. بدلاً من ذلك فإن الحلقة for تتضمن على forloop.counter او forloop.counter0 والذان يُشيران إلى قيمة عداد الحلقة في كل لفة والفرق بينهُما أنَّ forloop.counter العَدُّ فيه يبدأ من 1 أما forloop.counter0 فالعد يبدأ من 0. الشفرة الخاصة بك تُصبح: {% for a in c %} {{ forloop.counter0 }} ,{{ a }} {% endfor%}
  4. لربط مُستخدمٍ بمستخدمٍ آخر - مثلاً الإبن بأبيه أو العكس - يمكنك إستعمال الصنف 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').
  5. الرجاء عدم إرسال الصور التي تحتوي على شيفرات وإنما نسخ الشيفرة مُباشرة واستخدام المُحرر الخاص بالأكاديمية. أما بالنسبة للخطأ الذي ظهرَ لك فالخطأ يُشير إلى أن الشيفرة التي كتبتها بالأسفل لن يتم الوُصول إليها أبداً وسببُ ذلك على حسب إعتقادي أنك نسيت إغلاق القوس المُجعد الخاص ب switch switch(ActivityTag) { ...... ...... } // هذا القوس المجعد الذي نسيته Intent intenet = ....... .
  6. يُمكنك حفظ الإيميلات التي تُرسلها داخل ملف بدل إستخدام خادم البريد (mail server) عن طريق إستعمال الخلفية (Email Backend) التالية: EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend' والتي تسمح بتسجيل الإيميلات في ملف يتم حفظه في: EMAIL_FILE_PATH = '/tmp/app-messages' # ضع هنا مكان حفظ الإيميلات هذه الخيارات يتم إضافتها في ملف الإعدادات settings.py بدل القيم الإفتراضية التي يضعُها جانغو.
  7. يُمكنك الحصول على أسماء كل النماذج في تطبيق ما باستخدام الشيفرة التالية: 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 هو اسم تطبيق جانغو.
  8. إذا كُنت تستخدم الطريقة POST لإرسال معلومات النموذج من القالب إلى السرفر يُمكنك استعمال الشيفرة التالية لكي تحصل على كل الإختيارات التي إختارها المُستخدم: request.POST.getlist('options') حيثُ: options هو اسم الحقل select في النموذج. في حالة عدم قيام المُستخدم باختيار أي خيار الشيفرة تقوم بإرجاع قائمة فارغة.
  9. للحصول على كل المنشورات التي تحتوي في عنوانها على كلمتين معاً باستخدام جانغوُ ORM يُمكنك كتابة: posts = Post.objects.filter(title__icontains="automation", title__icontains="python") حيث: Post هو اسم النموذج (Model) الذي تستخدمه. لاحظ أننا استعملنا العبارة icontains لتصفية الحقل title وهي تعمل نفس عمل LIKE في SQL.
  10. لإنشاء تطبيقات ويب باستخدام لغة بايثون توجد عدة أُطر عمل (frameworks) لعل أشهَرها: Django و Flask. تُوجد عدة مقالات في أكاديمية حسوب تُوضح لك طريقة عمل جانغو وفلاسك تجدها هُنا: جانغو: https://academy.hsoub.com/programming/python/django/ فلاسك: https://academy.hsoub.com/programming/python/flask/ كما تُوجد دورة مَدفوعة في أكاديمية حَسوب حول أساسيات أُطر العمل جانغو و فلاسك، يُمكنك الوصول إليها عبر هذا الرابط: بالتوفيق.
  11. هل تُريد إنشاء تطبيق ويب ؟ أو إظهار بيانات على ال HTML إنطلاقا من ملف بايثون فقط ؟
  12. مرحبا محمد، أرجو توضيح الأمر الذي تريد فعله حتى نستطيع مساعدتك وتوجيهك.
  13. السرفر يعرض البيانات على شكل سلسلة نصية كما أخبرتك لتفادي هذا الأمر وعرضها على شكل Json قُم باستخدام الصنف JSONResponse الذي يسمح بتحويل القاموس adan وعرضه على شكل json : from fastapi import FastAPI import pandas as pd from datetime import datetime from fastapi.responses import JSONResponse # قم باستدعاء الصننف^^^ import json app = FastAPI() Machine_date = datetime.today().strftime('%d-%m') @app.get('/') def to_pray(): Machine_date = datetime.today().strftime('%d-%m') df = pd.read_excel('Salah-Calendar.xlsx', sheet_name='Table 1', usecols="A:L") for row in range(len(df)): if df.loc[row]['Date'].strftime('%d-%m') == Machine_date: adan = { "Date": df.loc[row]['Date'].strftime('%d-%m'), "Fajr": df.loc[row]['Fajr'], "Fajr Iqama": df.loc[row]['Fajr Iqama'].strftime('%I:%M %p'), "Sunrise": df.loc[row]['Sunrise'], "Zuhr": df.loc[row]['Zuhr'], "Asr": df.loc[row]['Asr'], "Maghrib": df.loc[row]['Maghrib'], "Isha": df.loc[row]['Isha'], } return JSONResponse(content=adan) # استخدمه على هذا الشكل أما بالنسبة لكيفية قراءتها باستخدام شيفرة جافاسكريبت فأترك المجال للأخ @Wael Aljamal أو أحد الإخوة يجيبونك.
  14. البيانات التي قُمت بإرجاعها ليست على شكل json صحيح ، السرفر قامَ بإرجاعها على شكل سلسة نصية تأكد من الشفرة التي قُمت بكتابتها أو قُم بتضمينها هُنا كما قال وائل وسوف نساعدك إن شاء الله.
  15. لإضافة ملاحظة أسفل الحقول توجد طريقتان: الطريقة الأولى في ال 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 وقمنا بوضع نص مُساعدة سوف يظهر أسفل الحقل عند عرضه في القالب.
  16. مرحباً يوسف، تُعد لغة البرمجة بايثون من اللغات الأكثر شُيوعاً والمطلوبة في سوق العمل هذه الأيام وذلك راجع ل: سهولة تعلمها وإستخدامها. مُجتعها الناضج والداعم. مدعومة من طرف وشركات مشهورة. المئات من المكتبات وأطر العمل. نعم بالتأكيد Django من أطر العمل التي تستحق التعلم والتي تسمح لك بإنشاء تطبيقات ويب مذهلة وبسرعة. نعم مجال الويب مُربح وفرص العمل المرتبطة به في تزايد كبير في السنوات الأخيرة، ويتمتع هذا الاخير بإقبال كبير من المطورين وهذا راجعُ للرواتب الممتازة التي يحصلون عليها. تذكر الأرقام في أمريكا وهي أهم وأكبر أسواق مطوري الويب أن متوسط رواتبهم تصل إلى 116 ألف دولار سنويا والعديد من الشركات تقدم رواتب تبدأ من 90 ألف دولار سنوياً، وبالطبع يختلف الراتب حسب الخبرة والشركة والصناعة التي تعمل فيها ونوع المهام التي تؤديها. المجالات الأكثر انتشارا في سوق العمل الحر هي: Machine learning أو التعلم الآلي: وهي عبارة عن برامج تتعلم من البيانات وتحسن دقتها بمرور الوقت وتساعد الشركات على عمل المهام الروتينية وتغيير النماذج التشغيلية وزيادة الكفاءة مع تحسين التكاليف. Automation أو الأتمتة: وهي عبارة عن برامج لتبسيط العمليات وأتمتتها لتحقيق نتائج بأقل قدر من المدخلات البشرية، مما يُساعد الشركات على تقليل التكاليف. للإستزادة من المعلومات يُمكنك الإطلاع على هذه المقالات: 9 من أهم مجالات العمل الحر ذات الدخل المرتفع
  17. يُرجى التنبيه أن جانغو قام بحذف الأمر syncdb وقام باستبداله بنظام التهجير (migration system) إبتداءً من الإصدار رقم 1.7. فإن كُنت تسخدم نسخة من جانغو أقل من 1.7 فالأحسن عمل تحديث لها. أما إذا كُنت تريد إستخدام هذه النسخة القديمة من جانغُو فيمكنك تخطي إنشاء المستخدم باستخدام: python manage.py syncdb --noinput
  18. مَرحباً.. لجلب البيانات من ملف excel يُمكنك استخدام وحدة بايثون openpyxl يُمكنك تثببيتها باستخدام الأمر: pip install openpyxl لقراءة ملف excel إستخدم: excelFile = openpyxl.load_workbook("هنا تضع المسار إلى الملف المُراد قراءة المعلومات منه") لجلف صفحة من ملف excel أكتب: sheet1 = excelFile['Sheet1'] #حيث Sheet1 هو اسم الصفحة. لقراءة السطر الذي تُريده from datetime import date # إعمل حلقة لقراءة كل البيانات من ملف الإكسيل for row in sheet1.iter_rows(min_row=1, min_col=1, max_row=12, max_col=3): # مثلا التاريخ مخزن في الخانة رقم 3 من كل سطر cell = row[2] # قم بمقارنته مع تاريخ اليوم if cell.value == date.today(): # إذا كانا مُتساويين إحفظ البيانات في متغيرات وأرسها إلى القالب مثلا #.... #.... break
  19. تكمُن المشكلة في أنك دائما تقوم بإرجاع النموذج إلى القالب سواءً كان النموذج صحيحا أو به أخطاء 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)
  20. للحصول على نوع المُتصفح الذي يستخدمه المُستخدم للدخول إلى الموقع إستعمل: 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]-->
  21. لحذف علامة / من بداية المسار الذي تُنتجه الدالة request.path عليك باستعمال دالة بايثون strip وتمرير علامة / لها على الشكل التالي: request.path.strip("/") الدالة strip ستعمل على حذف الرمز / من بداية ونهاية السلسلة النصية المُنتجة من request.path. يُمكنك أيضا إستعمال العبارات النمطية لحذف العلامة / من نهاية السلسلة النصية: import re re.sub("^/", "", request.pth)
  22. قم بإنشاء البياننات باستخدام الدالة 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
  23. عليك بنزع الأقواس المُجعدة {{ }} وعلامات الإقتباس "" من على request.build_absolute_uri ﻷنك قُمت باستدعاء وسم القالب {% if %} فلا يوجد أي داعي لإضافتهم. {% if 'ar' in request.build_absolute_uri %} 'AR' {% else %} 'EN' {% endif %}
  24. لعرض بيانات القاموس user في قالب jinja عبر حلقة for نكتُب الآتي: <tbody> {% for key, value in user.items() %} <tr> <td>{{key}}</td> <td>{{value]}}</td> </tr> {% endfor %} </tbody> شرح الشفرة: استعملنا التابع items الذي يقوم بإرجاع مجموعة من الصفوف Tuples ، كل صف يحتوي على مفتاح وقيمة. استعملنا أيضا for للمُرور على مجموعة الصفوف لعرض المفتاح والقيمة.
  25. لعرض كل المسارات الموجودة في تطبيق مبني باستخدام إطار العمل جانغُو توجَد عدة طُرق لذلك منها : باستخدام الدالة 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
×
×
  • أضف...