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

محمد حجي2

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

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

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

كل منشورات العضو محمد حجي2

  1. جرب الطريقة التالية: أولا يجب أن يكون models post يحتوى على user = models.ForeignKey(auth.User) class Post(models.Model): user = models.ForeignKey(auth.User) # ... more fields ... ستقوم بكتابة السطر التالي : حيث هنا ستستخدم مكتبة Count في ملف فيو: from django.db.models import Count user_posts = User.objects.annotate(total_posts = Count('post')) وفي ملف Template: {% for user in user_posts %} <p>{{user.first_name}} has written {% user.total_posts %} posts so far <p> {% endfor %}
  2. في عالم الويب وتصميم الصفحات static or dynamic تحتاج لتعلم كل من HTML و CSS لتكون صفحات ويب منسقة و من نوع static و JS لتحولها ل Dynamic و بتعلم هذه الأمور الثلاث ستكون قادر على بناء و جهات ويب frontend CSS هو شبيه HTML Styles ولكن في مكان منفصل عن كود HTML يمكنك بعدها تعلم أمور أخرى كتعلم برمجة backend مثل PHP أو خلافها من اللغات التي تمكنك من بناء مواقع التفاعلية كاملة.
  3. الموضوع يتمحور لما الطلب يكون أكثر على أطر العمل مثل لارفيل أو جانقو أو رياكت نيتف أو فلاتر كل هذه أطر صممت لتريح المبرمج من أمور الروتنية عند إنشاء أي برمجية جديدة و التلقليل من مشاكل كثيرة كمشاكل أمان. عندما تتعلم إطر عمل مبني على لغة لديك خبرة فيها هذا سيساعدك على إنشاء مشاريع أكثر في وقت أقل و بجودة عالية فمشروع PHP نيتف مثلا سيستغرق 4 شهور ستتمكن من إنجاز نفسه في وقت أقصر لا يتعدى الشهر بجودة أعلى و أمن أكثر مما يخولك للعمل على مشاريع أكثر و كسب المزيد من المال. كيف تتختصر أطر العمل الوقت؟ توفر لك أطر العمل مكتبات و أدوات جاهزة يمكن التعديل عليها. فهي تختصر أمور روتنية مثل إنشاء جداول في قواعد البيانات و الإتصال بها و ترتيب أكثر لطريقة تنظيم سير عمل البرنامج يطول الحديث في ميزات التي ستوفرها لك أطر العمل لكن ستعرف قيمتها عندما تتعامل مع احداها. وبما انه لديك خبر في PHP لن يكون من الصعب عليك تعلم إيطار عمل لارفيل. هذا لا يعني انه من مستحيل أن تجد عمل على PHP يمكنك إضافة خدامت تقدم فيها مهاراتك على خمسات مثلاً ستكون لك فرصة على خمسات أكثر حسب رأي الشخصي. اتمنى أن يكون هذا الشرح البسيط قد أوصل لك صورة واضحة.
  4. حتى تستطيع إضافة حقل بشكل ألي و ديناميكي يجب إستخدام بعض من JS جافا سكربت سكون الشرح على 3 خطوات أولا ما سوف تفعله في ملف templates لماذا يجب إستخدام JS في المتصفح لتعديل على elements أو عناصر HTML بدون إعادة تحميل الصفحة يجب استخدام لغة برمجة تعمل على المتصفح نفسه. مثال على الفكرة المطلوبة أولاً views.py from django.contrib.auth.decorators import login_required from django.forms.models import modelformset_factory # model form for querysets from django.shortcuts import redirect, render, get_object_or_404 from .forms import RecipeForm, RecipeIngredientForm from .models import Recipe, RecipeIngredient @login_required def recipe_update_view(request, id=None): obj = get_object_or_404(Recipe, id=id, user=request.user) form = RecipeForm(request.POST or None, instance=obj) # Formset = modelformset_factory(Model, form=ModelForm, extra=0) RecipeIngredientFormset = modelformset_factory(RecipeIngredient, form=RecipeIngredientForm, extra=0) qs = obj.recipeingredient_set.all() # [] formset = RecipeIngredientFormset(request.POST or None, queryset=qs) context = { "form": form, "formset": formset, "object": obj } if all([form.is_valid(), formset.is_valid()]): parent = form.save(commit=False) parent.save() # formset.save() for form in formset: child = form.save(commit=False) child.recipe = parent child.save() context['message'] = 'Data saved.' return render(request, "recipes/create-update.html", context) ثانياً: recipes/create-update.html: templates أولاً جزء HTML {% if formset %} <h3>Ingredients</h3> {{ formset.management_form }} <div id='ingredient-form-list'> {% for form in formset %} <div class='ingredient-form'> {{ form.as_p }} </div> {% endfor %} </div> <div id='empty-form' class='hidden'>{{ formset.empty_form.as_p }}</div> <button id='add-more' type='button'>Add more</button> {% endif %} <button style='margin-top:10px;' type='submit' >Save</button> </form> </div> والأن مع جزء JS وسيكون في نفس ملف HTML في النهاية. <script> const addMoreBtn = document.getElementById('add-more') const totalNewForms = document.getElementById('id_form-TOTAL_FORMS') addMoreBtn.addEventListener('click', add_new_form) function add_new_form(event) { if (event) { event.preventDefault() } const currentIngredientForms = document.getElementsByClassName('ingredient-form') const currentFormCount = currentIngredientForms.length // + 1 const formCopyTarget = document.getElementById('ingredient-form-list') const copyEmptyFormEl = document.getElementById('empty-form').cloneNode(true) copyEmptyFormEl.setAttribute('class', 'ingredient-form') copyEmptyFormEl.setAttribute('id', `form-${currentFormCount}`) const regex = new RegExp('__prefix__', 'g') copyEmptyFormEl.innerHTML = copyEmptyFormEl.innerHTML.replace(regex, currentFormCount) totalNewForms.setAttribute('value', currentFormCount + 1) // now add new empty form element to our html form formCopyTarget.append(copyEmptyFormEl) } </script> {% endblock content %} قد يكون ليس من السهل فهم كل شئ في كود JS لكن ما يقوم به كود SCRIPT هو نسخ أحد العناصر من HTML عند حدوث حدث click على الزر Add more و في نفس الوقت يتم التعديل على بعض Attribute في عناصر Html الجديدة و بعد القيام بأي حفظ للبيانات سيقوم بعرض ما تم حفظه اقرأ الأكواد جيداً يستحسن أن يكون لديك فكرة عامة عن JS و أتوقع ان يكون الكود مفهوم بالنسبة لك وهذا المثال ليساعدك على حل مشكلة الخاصة بك
  5. يمكنك فعلها بالتعديل على صلاحيات المستخدمين من نوع Staff status ف من خلال لوحة التحكم Django و الذهاب لقائمة Users و انشاء مستخدم من نوع Staff status هذا الخيار يظهر عند التعديل على المستخدم بعد إنشاء في خانة Permissions عند التعديل على المستخدم كما في الصورة: بعد ذلك ستذهب لخانة User permissions كما هو موضح في الصورة التالية: وتقوم بإضافة الصلاحيات الازمة بدون Delete من قائمة Available user permissions الصلاحيات التي على اليمين بدون الحذف لن يتمكن من حذف أي شئ. من note models ملاحظة يمكنك التحكم بصلاحيات كل models قمت بإنشائه. بعدها قم بحفظ التغيرات. قم بالتسجيل الدخول بالمستخدم الجديد و تأكد من التغيرات. الصورة التالية توضح الفرق قبل و بعد التعديل:
  6. وعليكم السلام عبدالله ابوشاور تعتبر دورة علوم الحاسوب هي حجر الاساس للمعرفة العامة في العديد من المواضيع التي يجب على مطور التطبيقات بأنواعها ان يكون لديه فكرة عنها, مواضيع مترابطة تساعدك على فهم اي تخصص تريد انت تتعلمه على سبيل المثال لقد وجدت ان تطوير الوجهات الويب قد راق لك و احببت العمل به فتقوم بتطوير مهارتك به وتبدأ تقديم خدماتك على مواقع حاسوب كخمسات أو مستقل فهنا يكون هدف هذه الدورة هي ارشادك لعالم الحاسوب و علومه و بعد هذه دورة سيكون من سهل تعلم اي مهارة أو لغة برمجة جديدة. كالبايثون أو PHP او JAVA أو غيرها يمكنك تطوير نفسك أكثر لتصبح محترف في احد تخصصات علوم الحاسوب يمكنك اكمال مسيرة التعلم الخاصة بك بأخذ الدورات المتقدمة التي تقدمها لك أكادمية حاسوب أو غيرها أختر المجال الذي تجد نفسك فيه أكثر إبداعاً اياً المجال الذي ستختاره طلما احترفته ستعمل و تحقق منه الدخل ان شاء الله فرص العمل كثيرة وهي بإنتظار المبدعين لأخذها.
  7. و عليكم السلام احمد سأتطرق لحل المشكلة الأولى وهي نقل الموقع لسيرفر المحلي: أولاً يجب عليك انشاء نسخة احطياطية للموقع الخاص بك. وهذه مقالة من أكادمية حاسوب تشرح طريقة النسخ الأحتياط. ثانياً يجب عليك تحميل و تثبيت السيرفر المحلي على الجهازك الكمبيوتر بإمكانك استخدام WAMP سيرفر على ويندوز أو MAMP سيرفر على الماك. بعد تثبيت احدهما و تشغيل السيرفر و دخول لصفحة قواعد البيانات phpMyAdmin يحب انشاء قاعدة بيانات جديدة يمكنك الوصول ل phpMyAdmin عبر الرابط التالي /http://localhost/phpmyadmin أو http://localhost:8080/phpmyadmin/ بعد تشغيل أحد السيرفرين التي أشرت لهما سابقاً ولديك المقالة التالية التي ستساعدك على تثبيت WordPress على جهازك ستجد هذا العنوان داخل المقالة (تثبيت ووردبريس محليًا على حاسوبك) و الأن لطريقة النقل ستقوم بالذهاب لقائمة plugin في اعدادات WordPress في موقعك و تثبيت الإضافة التالية https://wordpress.org/plugins/duplicator/ ومن ثم يمكنك استخدام هذه الإضافة لإنشاء نسخة من موقعك قم يإتباع الخطوات انشاء. وسيصيح لديك ملف مضغوط من نوع zip ستقوم بتحميله و ملف تثبيت أخر قم بتحميل كليهما. في حال وصلت لهذه الخطوة فقد قطعنا نصف المشوار. والأن أولاً ، تحتاج إلى إنشاء مجلد جديد في المجلد الجذر لخادمك المحلي. هذا هو المجلد الذي يخزن فيه الخادم المحلي جميع مواقع الويب. في حال كنت تستخدم (MAMP) سيكون مكان المجلد كتالي /Applications/MAMP/htdocs/ folder في حال كنت تستخدم (WAMP) C:\wamp\www\folder داخل هذا المجلد ، يمكنك إنشاء مجلدات جديدة لكل موقع ويب جديد تريد استيراده أو إنشائه على الخادم المحلي الخاص بك. بعد ذلك ، تحتاج إلى فتح المجلد الذي قمت بإنشائه لموقع الويب المحلي الخاص بك ثم نسخ ولصق كل من ملف الأرشيف المضغوط والبرنامج النصي المثبت الذي قمت بتنزيله مسبقًا. الأن نريد فتح ملف التثبيت على المتصفح الخاص بك ولذي سيكون بإسم installer.php طبعا سيكون سيرفر WAMP أو MAMP يعمل و دخال المتصفح ستضع الرابط التالي http://localhost/mylocalsite/installer.php ستظهر لك صفحة التثبيت من خلال أداة Duplicator قم بتتبع خطوات التثبيت التي ستظر لك وقد أشرنا سابقاً انه عليك انشاء قاعدة بيانات جديد في phpMyAdmin و سطلب منك ادخالها خلال مرحلة التثبيت في حال صادفت ادخال لكلمة المرور فهي بالعادة تترك فارغة ستظهر لديك صفحة بعد عملية التثبيت تخبركان كان كل شئ على ما يرام ان كانت كذلك يمكنك النقر على التالي للمتابعة. سوف يقوم Duplicator الآن باستيراد قاعدة بيانات WordPress الخاصة بك. بعد ذلك ، سيطلب منك التحقق مرة أخرى من معلومات موقع الويب الجديد التي اكتشفها تلقائيًا. بعدها قم بضغط على متابعة و سيظهر لك زر الوصول للموقع الخاص بك محلياً. وبتوفيق لك في عملك.
  8. وعليكم السلام صالح قريشه. يمكنك استخدام الخطوط المشهورة على منصة خطوط قوقل يمكنك الضغط هنا لمشاهدة أمثلة لخطوط تدعم الخطوط العربية و يمكنك كتابة العبارة معينة و تراى ان كانت مناسبة لك.
  9. مرحبا Mohssen تعتمد إجابة السؤال على طريقة عمل الموقع الخاص بك في حال كنت تستخدم طريقة Templet فالطريقة الأمثل هي استخدام الدوال ()authenticate() and login يمكنك الوصول للمزيد من المعلومات عن الدالتين بالضعط عليهما: حيث ستقوم بإستدعاء كل من هاتين الدالتين من مكتبة auth الخاصة ب Django في ملفات views في هذه الحالة سيتم تحويل المستخدم مباشرة لصفحة الرئيسية. هذا الكود مثال على ذالك في دالة تسجيل حساب جديد في views from django.contrib.auth import authenticate, login def register(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): new_user = form.save() messages.info(request, "Thanks for registering. You are now logged in.") new_user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password1'], ) login(request, new_user) return HttpResponseRedirect("/dashboard/") طبعاً ['username'] و ['password1']هم البيانات القادمة من الفورم التسجيل. و السطر التالي login(request, new_user) سيقوم بعملية التسجيل و بعدها ستقوم الدالة def register(request): بتحويل المستخدم لصفحة التي تريد المستخدم الذهاب لها فور تسجيله الحساب أول مرة. لكن في حالة كنت تتعامل مع API فالموضوع له منحنى اخر لطريقة التعامل مع هذا الموضوع لكن اتوقع انك تتكلم عن طريقة Templet ان شاء الله كان الشرح وافياً و مفهوماً. في حال كان لديك استفسار اخر سأكون سعيد بسماع ردك. تحياتي.
×
×
  • أضف...