أين تعمل الوظائف التي لا تتم عرضها في Django

StackOverflow https://stackoverflow.com/questions/900651

  •  23-08-2019
  •  | 
  •  

سؤال

لدي بعض الروابط على صفحة HTML مثل، حاليا، أتعامل معها

<p> <a href="/cases/{{case.id}}/case_rate/-">rate down</a>

ولها إدخال URL.py:

 (r'^cases/(?P<case_id>\d+)/case_rate/(?P<oper>.)$', 'mysite.cases.views.case_rate'),

ثم لدي وظيفة عرض تعامل مع المنطق وتضرب DB، ثم يفعل هذا:

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))

هل هناك طريقة أفضل للقيام بذلك؟ أستطيع أن أرى كيف سيكون هذا موافق لأنه يجب عليك إعادة رسم الشاشة لإظهار التصنيف الجديد ...

هل كانت مفيدة؟

المحلول

الطريقة النموذجية للتعامل مع هذا مع طلب ajax.

بدلا من الرابط، يمكنك وضع معالج جافا سكريبت يدعو إلى عرض، ويقوم Wich بتحديث DB، وإرجاع كائن JSON / XML مع التصنيف الجديد للعنصر. ثم يتلقى مقبض JavaScript آخر هذا الاستجابة وتحديث رقم التصنيف على الشاشة، دون إعادة تحميل الصفحة.

من الناحية المثالية، سوف تبقي كلا الإصدارين: HTML عادي (الشخص الذي لديك حاليا) و Ojax One. يمكن أن يعلق AJAX المرء على العنصر بعد تحميل الصفحة، لذلك إذا لم يكن JavaScript متاحا، فلن يكون لديك موقع عمل.

ثم، فيما يتعلق بالتنظيم، يمكنك الحصول على معلمة "AJAX" على رأيك. يجب أن يقوم العرض بتحديث DB وفقا لذلك، وإذا كانت مكالمة AJAX، فقم بإرجاع استجابة JSON / XML، وإلا وإخلاء إرجاع الصفحة الجديدة. وبهذه الطريقة يمكنك الاحتفاظ بالمنطق (جلب الكائن، تحديث DB) في مكان واحد.

نصائح أخرى

إذا كنت تسأل عما إذا كان يجب أن تظل case_rate في وجهات النظر. بالنظر إلى إعادة توجيه محتوى بدلا من توفير المحتوى، فإن الإجابة هي نعم، نظرا لأن Case_rate يتعامل مع طلب وإعادة استجابة.

ولكن ضع في اعتبارك موقفا كان فيه وظائف عرضتين في المشاهدات. لقد كان لديه بعض التعليمات البرمجية المكررة، واخترت العوامل أن التعليمات البرمجية المكررة في وظيفة أخرى لم يأخذ طلبا وإرجاع استجابة. هل ستكون اللعبة عادلة للمغادرة في وجهات النظر. بالتأكيد، إذا تحريكها في أي مكان آخر من شأنها أن تجعل الكود أصعب القراءة. أو قد تختار وضعه في مكان آخر. إنها حقا مكالمتك بناء على إحساسك بالذوق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top