سؤال

أحاول إنشاء إعادة توجيه في عرض Django إلى عنوان URL خارجي مع بعض المعلمات المرفقة بالطلب. بعد القيام ببعض البحث حولها والبعض الآخر يحاول حوله ، يبدو أنني قد ضربت كتلة الطريق.

لذا فإن وجهة نظري تبدو مثل هذا

def view(request):
    data = get.data(request)
    if something in data:
        return HttpResponseRedirect('example.com')

هذا بقدر ما تمكنت من الحصول عليه. أعلم أنك في عنوان URL للطلب يمكن أن تحدد بعض المعلمات مثل هذا:

...
return HttpResponseRedirect('example.com?name=smith&color=brown')

ومع ذلك ، نظرًا لأن بعض البيانات حساسة ، فأنا لا أريد أن ينتهي به المطاف في عنوان URL. نظرًا لأنه عنوان URL خارجي ، لا يمكنني استخدام اختصار Redirect () الذي يقبل معلمات طرق العرض. لذا صلي أخبر ، كيف يمكن للمرء أن ينجز مثل هذه المهمة؟

يحرر

بعد الانتهاء من المزيد من البحث حولها ، وتحدثت قليلاً في IRC ، يبدو أن ما يجب علي فعله ، للحفاظ على معلمة GET بعيدًا عن المستخدمين ، التي تحتوي على معلومات الدفع ، هو إرسالها كبريد بدلاً من ذلك. قيل لي إنه يجب أن تكون قادرًا على القيام بذلك باستخدام بعض JS أيضًا ، وربما JQuery. لا يزال السؤال أكثر تعقيدًا الآن. كيف يمكن للمرء أن يقوم بإنشاء ما بعد إعادة التوجيه في Django بمساعدة JavaScript؟

تحرير 2nd

يبدو أنني مضلّت. Thanx لمسح ذلك مع بروتوكولات إعادة توجيه DR. يبدو أنني كنت أسير في المسار الخطأ في محاولتي استخدام إعادة التوجيه لحل هذه المشكلة.

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

المحلول

أقترح النهج التالي. في نموذج إرجاع/قالب Django الخاص بك إلى المتصفح مع جميع المعلمات التي تريد نشرها كعناصر نموذجية مخفية. بمجرد تحميل النموذج ، سيتم إرسال نموذج JavaScript إلى أي مكان تريده.

رأي:

from django.shortcuts import render_to_response

def view(request):
    return render_to_response('test.html', { 'foo': 123, 'bar': 456 })

قالب:

<html>
<head>
    <title>test</title>
     <script type="text/javascript">
     function load()
     {
          window.document.test.submit();
          return;
     }
     </script>
</head>
<body onload="load()">
<form name="test" method="post" action="http://www.example.com">
    <input type="hidden" name="foo" value={{ foo }} />
    <input type="hidden" name="bar" value={{ bar }} />
</form>
</body>
</html>

نصائح أخرى

احصل على المعلمات دائمًا في عنوان URL ، وهذا ما يجعلها تحصل على معلمات.

لا يمكن إعادة توجيه استخدام معلمات ما بعد (والتي لا تذهب في عنوان URL) - وهذا هو تقييد HTTP ، وليس Django.

أنا لا أتفق مع دانيال ، هناك طريقة للتغلب على قيود HTTP لإعادة توجيه فقط مع GET Params. ما أفكر فيه هو:

  1. أعد التوجيه إلى وجهة الحصول على المعلمات التي تريدها.
  2. في صفحة الحصول
  3. إرسال السيارات النموذج.

هذا ما تفعله معظم خدمات تنزيل الملفات وأحيانًا حتى صفحات الدفع (PayPal وما شابه). إنه في الواقع قبيح بعض الشيء (1 قفزة أخرى) ولكن لديه فوائد خاصة به.

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