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

مسعود زاهي

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

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

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

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

    1

أجوبة بواسطة مسعود زاهي

  1. مرحبا Rol lan،

    نحن هنا لا نحل الواجبات الخاصة بالطلاب ولكن نساعدهم في حلها من خلال توجيههم و إعانتهم. فإن أردت الإستفادة والتعلم أكثر فما عليك إلا محاولة كتابة الشيفرة البرمجية لوحدك حتى ولو كانت خطأ ثم وضعها هنا ونحن بدورنا - إن شاء الله - سوف نعينك على إصلاح الأخطاء الموجودة فيها.

    أكاديمية حسوب تحوي على مجموعة كبيرة من المقالات البرمجية في لغة جافا يمكنك الإستفادة منها من خلال هذا الرابط لغة جافا.

    تحياتي.

  2. بتاريخ الآن قال Zeina Makdisi:

    شكرا لك 

    لكن ماذكرته قمت مسبقا بكتابته والتأكد منه 

    عند التنفيذ يظهر كالتالي

    11111.png

    مرحبا مجددا،

    قيمة Map التي يستقبلها القالب هي None أي فارغة.

    حتى نتمكن من مساعدتك أكثر يرجى إرفاق المشروع على شكل ملف مضغوط حتى نقوم بالإطلاع عليه ومعرفة سبب المشكلة.

    تحياتي،

  3. مرحبا زينة،

    لربط البيانات من النموذج Map مع القالب يجب توفر دالة عرض view ورابط url.

    في الشفرة التي قمت بإرفاقها انت تقومين باستيراد النموذج Map مباشرة داخل القالب وهذا خطأ. يجب أولا عمل دالة عرض view تقوم باستخراج البيانات من قاعدة البيانات وارسالها إلى القالب.

    مثال بسيط:

    دالة العرض view:

    def get_maps(request):
        maps = Map.objects.all()
        return render(request, "maps.html", {maps: maps})

    الرابط url:

    from views import get_maps # نقوم باستيراد الدالة get_maps
    
    urlpatterns = [
        path('maps', get_maps, name='google_maps'),
    ]

    شفرة القالب تصبح على الشكل التالي:

    <script>
      var request = {
      lat:{{maps.0.latitude}},
          lng:{{maps.0.longitude}}
      };
    console.log(request)
      service = new google.maps.places.PlacesService(map);
      service.findPlaceFromQuery(request, (results, status) => {
        if (status === google.maps.places.PlacesServiceStatus.OK && results) {
          for (let i = 0; i < results.length; i++) {
            createMarker(results[i]);
          }
    
          map.setCenter(results[0].geometry.location);
        }
      });
    }
    
    
    
    window.initMap = initMap;
    </script>

    تحياتي،

    • أعجبني 1
  4. مرحبا مجددا عزوز،

    بتاريخ 14 ساعات قال عزوز عزوز2:

    في  في هذا السطر ... هو لا يرجع خطأ انما لا يجلب لي قيمة تكون القيمة المرجعه nan

    ملاخظة يوجد معادلة موضعه على هذه الخانه

    
    sol = df.loc[0]['sol']

    وفي هذه الاسطر يرجع لي النتيجة مثل ماهي في excel

    
    num1 = df.loc[0]['number 1']
    num2 = df.loc[0]['number 2']

    هل يمكنك إرفاق شيفرة الدالة كاملة مع ملف excel الذي تستخدمه.

    تحياتي.

  5. مرحبا محمد،

    لربط ملفات python و c++ بملفات الواجهة الأمامية (Front End) تحتاج إلى أطر عمل (web Framworks ) مُخصصة لذلك فهي تساعد على تسريع بناء تطبيق الويب وحمايته كما أنها توفر ميزات إضافية يمكننا إضافتها دون بذل الكثير من العمل الإضافي. 

    فمثلاً بالنسبة للغة البرمجة بايثون نجد أطر العمل التالية:

    أما بالنسبة للغة البرمجية c++ فيمكن استخدام أطر العمل:

    توجد في أكاديمية حسوب عدة مقالات تشرح كيفية عمل بعضٍ من هذه الأطر:

    بالتوفيق.

  6. مرحبا توفيق،

    المدرب يستعمل النسخة المدفوعة من البرنامج (PyCharm Professional) يمكنك تحميلها و تجريبها لمدة 30 يوم من الموقع الرسمي. أما النسخة المجانية فلا تتوفر على الخصائص التي ذكرتها.

    بالتوفيق.

    • أعجبني 1
  7. بتاريخ 47 دقائق مضت قال Zx Zx2:

    شكرا لك اخي مسعود و جزاك الله خيراً

    ممكن سؤال ... كيف يمكن ان اضع زر يمكن للمستخدم ان يقوم بتحميل ملف PDF

    تقوم أولاً بتعريف رابط جديد في ملف urls.py، هذا الرابط يقوم بالربط بين القالب template الذي تضع فيه الزر ودالة العرض view على الشكل التالي:

    from django.urls import path
    
    from views import some_view#تقوم باستدعاء الدالة
    
    urlpatterns = [
      	#تقوم بإنشاء الرابط
        path('download-pdf', some_view, name="download-pdf"),
    ]

    تضيف الزر في القالب على شكل رابط:

    <a href="{% url 'download-pdf' %}" class="btn btn-default">
      إضغط لتحميل الملف
    </a>

    عند ضغط المستخدم على الزر يقوم المتصفح بزيارة الرابط وتحميل الملف.

    تحياتي.

  8. مرحبا Zx Zx2،

    لإنشاء ملف PDF وتحميله ينصح باستخدام مكتبة بايثون ReportLab.

    لتحميل المكتبة واستعمالها في بايثون:

    pip install reportlab

    الشيفرة التالية تبين كيفية استعمال هذه المكتبة لإنشاء ملف PDF يحتوي على الجملة Hello world:

    import io
    from django.http import FileResponse
    from reportlab.pdfgen import canvas
    
    def some_view(request):
        # إنشاء ذاكرة مؤقتة لتخزين البيانات قبل حفظهافي ملف
        buffer = io.BytesIO()
    
        # إنشاء كائن الملف باستخدام مكتبة 
        # reportlab
        p = canvas.Canvas(buffer)
    
        # الكتابة على الملف
        p.drawString(100, 100, "Hello world.")
    
        # غلق كائن الملف وحفظه
        p.showPage()
        p.save()
    
        # إرسال الملف إلى العميل لتحميله
        buffer.seek(0)
        return FileResponse(buffer, as_attachment=True, filename='hello.pdf')

    بالتوفيق.

  9. بتاريخ 11 ساعات قال Ra All:

    احتاج مساعدة في عمل ميثود ل search البحث باستخدام اسم المنتج او ID 

    نلاحظ أن هاته الدوال ليست دوال تابعة لكائن من الصنف Product وإنما تابعة للصنف ككل.

    لهذا يمكن إنشاء هذه الدوال على شكل دوال ساكنة static method بحيث يمكننا إستدعاؤها على الشكل التالي:

    ArrayList<Product> products = Product.search("نكتب هنا كلمة البحث", allProducts);
    // حيث
    // allProducts هو مصفوفة كل المنتجات
    Product selectedProduct = Product.select(1, allProducts);
    ArrayList<Product> products = Product.order(allProducts);

     

    • أعجبني 1
  10. بتاريخ الآن قال Zx Zx2:

    ما هو افضل إطار عمل لانشاء API

    يمكنك استخدام إطار العمل flask لانشاء الواجهة البرمجية فهو من بين أفضل أطر العمل وأسهلها في بايثون.

    بتاريخ 4 دقائق مضت قال Zx Zx2:

    والموقع الاول عند ارسال form يحتاج الى جافا سكريب؟

    نعم لإرسال البيانات من الموقع الأول إلى الواجهة البرمجية سوف تحتاج إلى جافاسكربت.

    • أعجبني 1
  11. بتاريخ 1 دقيقة مضت قال Zx Zx2:

    يوجد موقع اخر ابعث منه بيانات الى البايثون

    يعني موقع يبعث ارقام وانا في بايثون استقبل هذه الارقام

    الأفضل في هذه الحالة أنك تقوم بإنشاء واجهة برمجية API تعمل على  إستقبال البيانات ومعالجتها ثم حفظها في قاعدة البيانات.

    في الموقع الأول تقوم بإنشاء نموذج Form وعند قيام العميل بإرسال البيانات تقوم بإرسال البيانات على شكل JSON إلى الواجهة البرمجية.

    • أعجبني 1
  12. يمكنك استخدام إطار العمل Flask لإرسال بيانات نموذج من html إلى بايثون وهذا مثال بسيط لكيفية عمل ذلك:

    • تثبيت إطار العمل flask باستخدام pip:
    pip install flask

     

    • إنشاء النموذج في القالب html وليكن اسم القالب create.html:

      <form action="/posts/create" method="post">
        <label>عنوان المقالة</label>
        <br/>
        <input type="text" name="title">
        <br/>
        <label>متن المقالة</label>
        <br/>
        <textarea name="body" col="50" rows="10"></textarea>
        <br/>
        <button type="submit">إنشاء المقالة</button>
        
      </form>

       

    • إستقبال البيانات باستخدام إطار العمل flask:

      from flask import Flask, request, render_template
      
      app = Flask(__name__)
      
      @app.route("/posts/create", method=["GET", "POST"])
      def create():
        if request.method="POST":
          #قراءة البيانات من الكائن request
          title = request.form['title']
          body = request.form['body']
          # يمكنك الان استعمال البيانات 
          # او حفظها في قاعدة البيانات 
          
        return render_template("create.html")

      تعرّف أكثر على كيفية التعامل مع النماذج في Flask من مقالة: 

       

    • أعجبني 1
  13. بتاريخ 4 دقائق مضت قال Shahad Mohammad:

    المعذرة على كثرةالاسئلة لكن هل يمكنك اخباري ما هو تصحيح الكود لماذا لا يطبع لي المصفوفة اريد طباعتها وشكرا جزيلا 

    الشيفرة صحيحة من حيث الكتابة لا يوجد بها أخطاء. حاولي طبع حجم المصفوفة قبل الدخول إلى الحلقة for:

    System.out.println(products_array.length);  

    والتأكد من أن حجمها أكبر من الصفر.

    الطبع يظهر في النافذة Output، ولإظهار هذه النافذة نذهب إلى Window ثم نختار Output.

    تحياتي.

    • أعجبني 1
  14. بتاريخ 3 دقائق مضت قال Shahad Mohammad:

    وضعت نفس الكود لكن يعطيني خطت عند تحويل الى مصفوفة 

    نعم كُنت قد أخطأت في كتابة الشيفرة.

    الشيفرة الصحيحة هي:

    products_list.toArray(products_array);

    أي القائمة هي التي نحولها إلى مصفوفة وليس العكس.

    بالتوفيق.

    • أعجبني 1
  15. مرحبا شهد،

    المصفوفة ( Array ) عبارة عن كائن يحتوي مجموعة عناصر من نفس النوع تتخزن بجوار بعضها في الذاكرة.
    بمعنى آخر المصفوفة عبارة عن كائن يمكنه تخزين عدة قيم من نفس النوع.

    المشكلة الوحيدة في الـ Array هو أن حجمها ثابت, أي عندما تقوم بتعريف مصفوفة و تحدد عدد عناصرها, لا يمكنك تغيير حجمها لاحقاً, أي لا يمكن حذف عنصر أو زيادة واحد جديد.

    لهذا يستحسن إستعمال ArrayList وبعدها تحويله إلى مصفوفة Array باستخدام الدالة toArray:

    // نقوم بتعريف كائن ال ArrayList
    ArrayList<Products> products_list = new ArrayList<>();
    //نقوم بتعريف المننتجات
    Products A =new Products("Ipad",4000.500);
    Products B =new Products("Appile Pinsil",750.00);
    Products C =new Products("earpod",800.00)
    //نقوم بإضافة المنتجات إلى ال ArrayList
    products_list.add(A);
    products_list.add(B);
    products_list.add(C);
    //نقوم بتعريف المصفوفة
    Products[] products_array = new Products[products_list.size()];
    //نحول القائمة إلى مصفوفة
    products_array.toArray(products_list);

    تحياتي،

    • أعجبني 1
  16. توثيق جانغو لا ينصح بتغيير التابع __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')

       

    • أعجبني 1
  17. لمنع المتصفح من تخزين العرض في ذاكرة التخزين المؤقت (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):
        ...

     

    • أعجبني 1
  18. توجد طريقتان لجعل حقل إختياري في نموذج من نوع 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

       

     

    • أعجبني 1
  19. حالياً لا يوجد حقل في جانغو يُمَكّننا من حفظ مجموعة من الصور معاً.

    بدلاً من ذلك يُمكنك إنشاء نموذج تحفظ فيه الصور وتقوم بربطه بالمُنتج عن طريق علاقة واحد إلى مُتعدد على الشكل التالي:

    # نموذج المنتج
    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()

     

    • أعجبني 1
  20. مرحبا ابراهيم،

    يُشير الخطأ 431 إلى أن الخادم يرفُض معالجة الطلب ﻷن ترويسة ال HTTP الخاصة بالطلب طويلة جدًا وهذا يرجع إلى أمرين:

    • إما أن الحجم الإجمالي لعناصر الترويسة كبيرًا جدًا.
    • أو عندما يكون حقل من عناصر الترويسة ذا حجم كبيرًا جدًا

    يمكن إعادة تقديم الطلب بعد تقليل حجم الترويسة.

     الحالات التى تسبب هذا الخطأ:

    • عنوان URL المرجعي (Referer URL) طويل جدًا.
    • يوجد عدد كبير جدًا من ملفات تعريف الارتباط (Cookies) المُرسلة في الطلب. 
    • أعجبني 1
  21. لإجبار محرك قوالب جانغو على تجاهل جزء من الشيفرة وعرضه كما هو من غير مُعالجة يمكننا كتابة هذه الشيفرة داخل الكتلة 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 %}

     

    • أعجبني 2
×
×
  • أضف...