-
المساهمات
43 -
تاريخ الانضمام
-
تاريخ آخر زيارة
المعلومات الشخصية
-
النبذة الشخصية
مهندس برمجيات
- الموقع
آخر الزوار
671 زيارة للملف الشخصي
إنجازات Muhammad Nasser2
-
بالطبع، هناك العديد من الأدوات التي يمكن استخدامها لاكتشاف ثغرات حقن SQL في مواقع الويب بخلاف SQLmap. من بين هذه الأدوات: Netsparker: يقوم بفحص الويب واكتشاف الثغرات بما في ذلك حقن SQL. Acunetix: أداة متقدمة تحتوي على ميزات لاكتشاف ثغرات الحقن. Burp Suite: عبارة عن أداة اختبار الاختراق متعددة الاستخدامات، يمكن استخدامها للكشف عن ثغرات حقن SQL. OWASP ZAP (Zed Attack Proxy): أداة اختبار الأمان مفتوحة المصدر تتيح اكتشاف ثغرات حقن SQL وغيرها. هذه الأدوات تقدم واجهات مستخدم سهلة الاستخدام وتقنيات تحليل متقدمة لاكتشاف ثغرات حقن SQL وغيرها من ثغرات الأمان في تطبيقات الويب. تذكر دائمًا استخدام هذه الأدوات بشكل قانوني وفي سياق اختبار الأمان والاختراق المصرح به فقط.
-
هذا الخطأ يعني أن هناك أخطاء في بناء البرنامج الخاص بك. قد يكون هناك أخطاء في الكود اللذي تم كتابته. يمكنك التحقق من الرسائل التي تظهر في نافذة الـ "Output" أو الـ "Error List" في برنامج التطوير الخاص بك (مثل Visual Studio أو Code::Blocks أو غيره) لمعرفة التفاصيل الكاملة للأخطاء. يفضل تصحيح الأخطاء التي تظهر قبل محاولة تشغيل البرنامج، حيث قد لا يعمل البرنامج بشكل صحيح إذا كان يحتوي على أخطاء في الكود نفسه. إذا كنت بحاجة إلى مساعدة في تحديد الأخطاء أو تصحيحها، يمكنك مشاركة جزء من الشفرة التي تسبب المشكلة وسأحاول مساعدتك في حلها.
-
يمكنك دمج نتائج استعلامات الايداع والسحب في قائمة واحدة وترتيبها حسب الوقت باستخدام ال union و order_by. ثم يمكنك استخدام القائمة الناتجة في عرض الجدول HTML. يمكنك تعديل view الخاص بك على النحو التالي: from django.db.models import F, Value, CharField from django.db.models.functions import Concat def account_statement(request, id): try: customer = Account.objects.get(id=id) # Get Customer ID customerID = customer.customer.id except Account.DoesNotExist: messages.error(request, 'Something Went Wrong') return redirect('create-customer') else: # Get Customer Deposit by ID and order by Date minimum 5 records displayed deposits = Deposit.objects.filter(customer__id=customerID).annotate( transaction_type=Value('deposit', output_field=CharField()), account=F('acct'), phone=F('customer__phone'), amount=F('deposit_amount'), date=F('date'), staff_username=F('staff__username'), ).order_by('-date')[:5] # Get Customer Withdrawal by ID and order by Date minimum 5 records displayed withdrawals = Witdrawal.objects.filter(account__id=customerID).annotate( transaction_type=Value('withdrawal', output_field=CharField()), account=F('account__acct'), phone=F('account__customer__phone'), amount=F('withdrawal_amount'), date=F('date'), staff_username=F('staff__username'), ).order_by('-date')[:5] # Merge Deposit and Withdrawal queries, and order by Date transactions = sorted( list(deposits) + list(withdrawals), key=lambda x: x.date, reverse=True ) context = { 'transactions': transactions, } return render(request, 'dashboard/statement.html', context) وتعديل القالب HTML على النحو التالي: <table class="table bg-white"> <thead class="bg-info text-white"> <tr> <th scope="col">#</th> <th scope="col">Acct. No.</th> <th scope="col">Phone</th> <th scope="col">Amount</th> <th scope="col">Date</th> <th scope="col">Transaction Type</th> <th scope="col">Staff</th> <th scope="col">Action</th> </tr> </thead> {% if transactions %} <tbody> {% for transaction in transactions %} <tr> <td>{{ forloop.counter }}</td> <td>{{ transaction.account }}</td> <td>{{ transaction.phone }}</td> <td> {% if transaction.transaction_type == 'deposit' %} N{{ transaction.amount|intcomma }} {% elif transaction.transaction_type == 'withdrawal' %} -N{{ transaction.amount|intcomma }} {% endif %} </td> <td>{{ transaction.date|naturaltime }}</td> <td>{{ transaction.transaction_type|title }}</td> <td>{{ transaction.staff_username }}</td> <td><a class="btn btn-success btn-sm
-
يمكنك استخدام jQuery لتغيير لون الزر بعد الحصول على الرد من الطلب AJAX. يجب عليك تضمين jQuery في قالب HTML الخاص بك. يمكنك تغيير لون الزر باستخدام jQuery عن طريق addClass و removeClass وتعيين فئات CSS تمثل الألوان الخاصة بك. اليك بعض الاكواد التي يمكنك إضافتها إلى قالب HTML الخاص بك: HTML: <!-- add a class to the answer button to select it in jQuery --> <button type="button" class="btn btn-primary display: inline-block width: auto; answer-btn" name="answer" id="submit" value="{{answer}}">{{ answer|safe }}</button> JavaScript: <script type="text/javascript"> // add a click event listener to all answer buttons $('.answer-btn').click(function() { var clickedBtn = $(this); var answer = $(this).val(); var questionCounter = $(this).closest('.card').attr('value'); $.ajax({ type: "POST", url: "check_answer", data: {'answer': answer, 'question_counter': questionCounter}, dataType: "json", success: function(data) { if (data.is_correct) { clickedBtn.addClass('btn-success'); clickedBtn.removeClass('btn-primary'); } else { clickedBtn.addClass('btn-danger'); clickedBtn.removeClass('btn-primary'); } }, error: function(xhr, textStatus, errorThrown) { console.log('Error:', errorThrown); } }); }); </script> في هذا المثال، يتم إضافة كلاس "btn-success" أو "btn-danger" إلى الزر الذي تم النقر عليه، حسبما يكون الجواب الذي تم إرجاعه صحيحًا أو خاطئًا. يتم إزالة فئة "btn-primary" من الزر أيضًا. تأكد من تغيير اسم مسار url في الطلب AJAX "url: 'check_answer'" ليتوافق مع مسار url الخاص بوظيفة Django الخاصة بالتحقق من الإجابة.
-
لإنشاء عدة صور لكل منشور، يمكنك استخدام مفهوم "العلاقة العكسية المتعددة" (foreign key relationships) في Django. يمكنك إضافة حقل "post" في نموذج "PostsMedia" كمفتاح خارجي foreign key يشير إلى نموذج "Posts". هذا سيسمح لك بإنشاء عدة صور لكل منشور. النماذج بعد التعديل ستكون كالتالي: class Posts(models.Model): user = models.ForeignKey(User, related_name='user_posts', on_delete=models.CASCADE, null=True, blank=True) ###other fields class PostsMedia(models.Model): post = models.ForeignKey(Posts, related_name='post_media', on_delete=models.CASCADE, null=True, blank=True) media = models.URLField(max_length = 500, null=True, blank=True) بعد ذلك، يمكنك إنشاء عدة صور لكل منشور عن طريق إنشاء عدة كائنات (Objects) ل "PostsMedia" وتعيين كل واحدة منها لنموذج "Posts" المناسب. على سبيل المثال: # إنشاء المنشور post = Posts.objects.create(user=user, title=title, content=content) # إنشاء الصور image_urls = ['https://example.com/image1.jpg', 'https://example.com/image2.jpg', 'https://example.com/image3.jpg'] for url in image_urls: PostsMedia.objects.create(post=post, media=url) سينشئ هذا الكود ثلاث صور للمنشور الواحد، مع تخزين عناوين URL لكل صورة في نموذج "PostsMedia". يمكنك الوصول إلى الصور التي تنتمي إلى منشور معين باستخدام "related_name" المحدد في العلاقة في نموذج "PostsMedia". على سبيل المثال: post = Posts.objects.get(id=post_id) post_images = post.post_media.all() هذا سيعيد جميع الصور المرتبطة بالمنشور المعين، ويمكنك الوصول إلى عناوين URL لكل صورة عن طريق الوصول إلى حقل "media" في كل كائن (Object) ال "PostsMedia".
-
بالطبع، يمكن استخدام طرق مختلفة للحصول على محتوى HTML في Django، بالإضافة إلى render_to_string الذي تم ذكره في الإجابة السابقة. وفيما يلي توضيح لبعض الطرق الأخرى التي يمكن استخدامها: 1- استخدام Template و Context: يمكن استخدام Template لإنشاء نسخة من القالب، و Context لتمرير البيانات إلى القالب، ثم استخدام دالة render() لإنشاء الكود النهائي. فيما يلي مثال بسيط يوضح ذلك: from django.template import Template, Context def get_html(): template = Template("<html><body><h1>Hello {{ name }}</h1></body></html>") context = Context({"name": "John"}) html_content = template.render(context) print(html_content) 2- استخدام HttpResponse: يمكن استخدام HttpResponse لإنشاء استجابة HTTP تحتوي على محتوى HTML من القالب. يمكن إنشاء كائن (Class) HttpResponse وتمريره إلى دالة render()، ثم سيتم إرجاع الكود النهائي من الاستجابة. فيما يلي مثال بسيط يوضح ذلك: from django.http import HttpResponse from django.shortcuts import render def get_html(request): context = {"name": "John"} html_content = render(request, "index.html", context) response = HttpResponse(html_content) return response 3- استخدام get_template: يمكن استخدام get_template للحصول على مثيل من القالب، ثم استخدام دالة render() لإنشاء النص النهائي. فيما يلي مثال بسيط يوضح ذلك: from django.template.loader import get_template def get_html(): template = get_template("index.html") context = {"name": "John"} html_content = template.render(context) print(html_content)
-
يمكن استخدام عدة طرق مختلفة لجعل الصورة تملأ الشاشة في CSS، وفيما يلي بعض الطرق الممكنة: 1. استخدام خاصية background-size: يمكن استخدام خاصية background-size مع قيمة cover لجعل الصورة تملأ الخلفية بالكامل دون تشويه الأبعاد الأصلية للصورة. يمكن استخدام هذه الخاصية في العناصر التي تستخدم الصورة كخلفية، مثل العناصر div و section و header و body وغيرها. يمكن استخدام الخاصية بهذا الشكل: background-size: cover; 2. استخدام خاصية object-fit: يمكن استخدام خاصية object-fit مع قيمة cover لجعل الصورة تملأ العنصر بالكامل دون تشويه الأبعاد الأصلية للصورة. يمكن استخدام هذه الخاصية في العناصر img و video وغيرها التي تستخدم الصورة كمحتوى داخلي. يمكن استخدام الخاصية بهذا الشكل: object-fit: cover; 3. استخدام العنصر الجديد "picture": يمكن استخدام العنصر الجديد "picture" الذي تم إضافته في HTML5 لجعل الصورة تملأ الشاشة بأفضل شكل ممكن بحيث يتم تحديد مجموعة من الصور بأحجام ودقات مختلفة، وسيتم اختيار الصورة الأنسب تلقائيًا بناءً على حجم الشاشة والجهاز المستخدم. يمكن استخدام العنصر بهذا الشكل: <picture> <source media="(min-width: 768px)" srcset="large-image.jpg"> <source media="(max-width: 767px)" srcset="small-image.jpg"> <img src="fallback-image.jpg" alt="Image"> </picture> يجب تحديد عناصر "source" لتحديد الصور المختلفة وحجم الشاشة المناسب لكل منها، ويجب تحديد عنصر "img" كبديل في حال لم يتم اختيار أي من الصور المحددة في العناصر "source". 4. استخدام وحدة viewport يمكن استخدام وحدة viewport في CSS لتحديد ارتفاع وعرض العرض والارتفاع بالنسبة إلى حجم الشاشة. يمكن تحديد ارتفاع وعرض الصورة بناءً على هذه القيم باستخدام الخاصية height و width بالنسبة المئوية (%). img { width: 100vw; height: 100vh; } في هذا المثال، يتم تعيين ارتفاع وعرض الصورة إلى 100٪ من ارتفاع وعرض العرض والارتفاع بشكل فعلي. هذا يؤدي إلى تحجيم الصورة بحيث تملأ الشاشة بشكل كامل.
-
الخطأ في الكود هو وجود خطأ إملائي في العنوان URL الذي تم استخدامه للصورة في كلا من index.html وlayout.css. تأكد من استخدام الامتداد الصحيح لملف الصورة والتحقق من أن الملف موجود في المسار الصحيح ,يمكنك القيام بذلك عن طريق القيام بالخطوات التالية: 1. تأكد من وجود ملف الصورة في المسار المطلوب. على سبيل المثال ، إذا كان المسار المطلوب هو "/static/img/background.jpg" ، فتأكد من وجود ملف "background.jpg" في ملف "static/img/". 2.تأكد من أن المسار المستخدم في الكود الخاص بك يتطابق مع المسار الصحيح. يمكنك التحقق من ذلك بفتح ملف HTML الخاص بك والبحث عن العنوان URL الذي تم استخدامه للصورة. على سبيل المثال ، إذا كان المسار المستخدم هو "/static/img/background.jpg" ، فتأكد من أن العنوان URL في ملف HTML الخاص بك يتطابق مع ذلك. 3. تأكد من أن المسار المستخدم في ملف CSS الخاص بك يتطابق مع المسار الصحيح. يمكنك التحقق من ذلك بفتح ملف CSS الخاص بك والبحث عن العنوان URL الذي تم استخدامه للصورة. على سبيل المثال ، إذا كان المسار المستخدم هو "/static/img/background.jpg" ، فتأكد من أن العنوان URL في ملف CSS الخاص بك يتطابق مع ذلك. 4. يمكنك استخدام أدوات المطور لمتصفح الويب الخاص بك للتحقق من المسار المستخدم والتأكد من أنه يشير إلى المسار الصحيح. يمكنك فتح أدوات المطور بالنقر بزر الماوس الأيمن على صفحة الويب الخاصة بك واختيار "عرض الصفحة المصدرية" أو "عرض مصدر الصفحة". ثم يمكنك البحث عن العنوان URL الخاص بالصورة والتحقق من المسار المستخدم.
-
في ال endpoint اللتي سوف تقوم بارسال الrequest اليها
-
لإضافة خاصية إدخال عنوان على الخريطة لموقع المستخدم في موقع الويب باستخدام Django، يمكنك اتباع الخطوات التالية: 1. قم بتسجيل حساب في Google Cloud Platform وإنشاء مفتاح API لـ Google Maps. 2. قم بتثبيت مكتبة django-google-maps باستخدام الأمر التالي: pip install django-google-maps 3. قم بإضافة 'django_google_maps' إلى قائمة INSTALLED_APPS في ملف settings.py الخاص بتطبيق Django الخاص بك. 4. في ملف forms.py الخاص بتطبيقك، قم بإنشاء نموذج Django الذي يحتوي على حقل الخريطة باستخدام GoogleMapLocationField من مكتبة django-google-maps. مثال: from django import forms from django_google_maps.fields import GoogleMapLocationField class LocationForm(forms.Form): location = GoogleMapLocationField() 5. في ملف views.py الخاص بتطبيقك، قم بإنشاء دالة view التي تقوم بعرض نموذج الخريطة ومعالجة البيانات التي تم إرسالها. مثال: from django.shortcuts import render from .forms import LocationForm def location_view(request): if request.method == 'POST': form = LocationForm(request.POST) if form.is_valid(): # تم التحقق من صحة البيانات المدخلة location = form.cleaned_data['location'] # تم استلام الإحداثيات الجغرافية للموقع المدخل # يمكن استخدامها لإظهار معلومات الموقع على الخريطة أو التخزين في قاعدة البيانات else: form = LocationForm() return render(request, 'location.html', {'form': form}) 6. في ملف location.html، يمكنك إضافة نموذج الخريطة باستخدام الأمر التالي: {% extends 'base.html' %} {% block content %} <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form> {% endblock %} {% block scripts %} {{ form.media }} {% endblock %} هذا سيقوم بإنشاء نموذج HTML الذي يحتوي على خريطة Google Maps.
-
لتحقيق ذلك، يمكنك استخدام وسم HTML المناسب لتنسيق النص. يمكنك استخدام وسم <strong> لجعل النص ثقيل الوزن وبخط عريض (bold). يمكنك استخدامه بالتالي: class modela(models.Model): fielda = models.BooleanField(default=True, choices=((True, 'some <strong> bold </strong> text'), (False, 'zzz'))) بهذا الشكل، ستتم عرض عبارة "bold" بخط ثقيل وعريض.
-
لديك بعض الأخطاء في الكود، إذا لم تعمل الأحداث الخاصة بالزر، فمن المحتمل أن يكون هناك مشكلة في تحديد عنصر HTML بشكل صحيح، ويجب أن تتحقق من العناصر الخاصة بك بأنها متاحة عندما يتم تحميل الصفحة. يمكنك استخدام الكود التالي لتحقق من الأخطاء وإصلاحها: قم بتحويل الكود الخاص بالأحداث إلى دالتين منفصلتين، لتحديد العناصر وتعيين الأحداث. قم بوضع الكود الخاص بتحديد العناصر وتعيين الأحداث داخل حدث DOMContentLoaded. قم بالتحقق من أن العناصر التي تحاول تحديدها متاحة عندما يتم تحميل الصفحة. تحقق من أنك تقوم بتشغيل الكود الخاص بالأحداث في نفس الملف الذي توجد به عناصر HTML الخاصة بك. قم بتغيير الكود الخاص بك إلى ما يلي: document.addEventListener('DOMContentLoaded', () => { const plusBtn = document.querySelector('#plus'); const minusBtn = document.querySelector('#minus'); const inputQty = document.querySelector('#inputQty'); plusBtn.addEventListener('click', e => { e.preventDefault(); inputQty.value = parseInt(inputQty.value) + 1; }); minusBtn.addEventListener('click', e => { e.preventDefault(); if (inputQty.value <= 0) { inputQty.value = 0; } inputQty.value = parseInt(inputQty.value) - 1; }); }); هذا الكود سيحدد العناصر المناسبة ويعين الأحداث داخل حدث DOMContentLoaded. إذا كانت هناك مشكلة في تحديد العناصر، فسيتم طباعة رسالة خطأ في وحدة تحكم المتصفح، يمكنك الاطلاع عليها لتحديد المشكلة. بعد تغيير الكود، سوف تتمكن من زيادة وتقليل قيمة الإدخال بشكل صحيح عند النقر على زر الإضافة والطرح، وسيتم التحقق من أن القيمة لا يمكن ان تكون بالسالب.
-
بشكل عام ، البرمجة الشيئية (OOP) ليست شرطًا لتعلم هياكل البيانات في بايثون. ومع ذلك ، فإن معرفة البرمجة الشيئية يمكن أن تساعدك في فهم أفضل لكيفية تصميم وتنفيذ هياكل البيانات. في البرمجة الشيئية ، يتم التركيز على الكائنات والمتغيرات والدوال ، والتي تعد جزءًا أساسيًا من تصميم هياكل البيانات. بالإضافة إلى ذلك ، يستخدم معظم تصميمات هياكل البيانات في البرمجة الشيئية تقنيات مثل الوراثة والتعددية والتعامل مع الاستثناءات وغيرها من المفاهيم المتعلقة بالبرمجة الشيئية. لذلك ، فإن البرمجة الشيئية يمكن أن تكون مفيدة في تعلم هياكل البيانات وفهمها بشكل أفضل. ومع ذلك ، يمكن البدء في تعلم هياكل البيانات دون الحاجة إلى معرفة البرمجة الشيئية ، وبمجرد تعلم الأساسيات ، يمكن العودة لتعلم المفاهيم المتقدمة في البرمجة الشيئية إذا لزم الأمر.
-
يبدو أن المشكلة في استخدام نفس الـ ids في كل من الجدولين. يجب استخدام ids مختلفة لكل جدول ، حتى يتمكن المتصفح من التعرف على الفرق بين الحقول في النموذجين. بدلاً من استخدام id="subject",id="aclass", وid="submit" في النموذجين ، يجب تغييرها إلى شيء مختلف مثل id="subject1",id="aclass1",id="submit1" للنموذج الأول و id="subject2",id="aclass2",id="submit2" للنموذج الثاني. عند إرسال البيانات للقاعدة من الجدول الثاني ، يجب التأكد من استخدام الملف الصحيح في الـ URL ، بحيث يتم إرسال البيانات إلى send_saturday_two.php بدلاً من send_saturday_tow.php كما هو موجود في الكود الثاني. وايضا من الأفضل استخدام معيار قياسي لحفظ البيانات في الجدول مثل استخدام أحرف صغيرة لأسماء الجداول والأعمدة وتجنب الأخطاء الإملائية ، ويمكن أيضًا استخدام العلامات التعريفية الخاصة بـ HTML5 لتحديد نوع البيانات المتوقعة لكل حقل في الجدول.
- 1 جواب
-
- 1
-
وصف المنشور موجود في قالب blog-single.html وهو مكان لإظهار تفاصيل المنشور وتنسيقها والسماح للمستخدمين بقراءتها. لإظهار وصف المنشور بطريقة مناسبة، يمكنك إضافة تفاصيل المنشور المناسبة في العنصر <p class="post__description"> بعد استدعاء السمة description من نموذج Post باستخدام {{ posts.description|safe }}. ويمكن تنسيق الوصف بأي طريقة تريدها، مثل إضافة عناوين، فقرات، وربما قوائم نقطية.