Django-rest-framework: الهروب (علامة العطف) في عناوين URL لواجهة برمجة التطبيقات القابلة للتصفح.

تم إنشاؤها على ٢٠ يونيو ٢٠١٤  ·  26تعليقات  ·  مصدر: encode/django-rest-framework

عندما يتم عرض عناوين URL التي تحتوي على حرف مهرب (على وجه التحديد في حالتي ، وعلامة العطف) في واجهة برمجة التطبيقات القابلة للتصفح ، في href لا يتم تجاوزها بشكل غير صحيح. قد ينطبق هذا فقط على علامة العطف.

على سبيل المثال ، عنوان URL هذا:
http: // localhost : 8000 / endpoint /؟ param1 = نعم +٪ 26 + لا & param2 = شيء

سيتم تقديمه على النحو التالي:
http: // localhost : 8000 / endpoint /؟ param1 = نعم + & + لا & param2 = شيء

يتم تقديم عنوان URL بقيمة العنصر بشكل صحيح ... وهذا ينطبق فقط على href.

Bug

التعليق الأكثر فائدة

أريد فقط أن أؤكد أنه يعمل الآن :)

أحب هذه المكتبة ، إنها تعمل بالفعل بشكل رائع ، ولكن حتى ذلك الحين لا تزال تتحسن! 👍

ال 26 كومينتر

نعتذر عن بطء الاستجابة.
هل يختلف العرض فقط أم أن مصدر HTML نفسه لم يتم تجاوزه؟

مرحبًا توم ، في HTML بدا الأمر كالتالي:

<a href="http://localhost:8000/endpoint/?param1=Yes+&+No&param2=something">http://localhost:8000/endpoint/?param1=Yes+%26+No&param2=something</a>

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

بالتأكيد ، سأكون سعيدًا بذلك. بالنظر إلى مجموعة الاختبار الآن ... هل سيكون المكان المناسب في اختبارات RendererEndToEndT في test_renderers.py؟

يبدو بخير.

هذا له علاقة بـ Django smart_urlquote والذي تم استدعاؤه بواسطة DRF urlize_quoted_links ، وهو ما يعالج التحويل داخل واجهة برمجة التطبيقات القابلة للتصفح. أعتقد أن الاختلاف بين نص الرابط والرابط نفسه قد يكون شيئًا هروبًا لـ Django ، لكنني بصراحة لست متأكدًا من ذلك.

smart_urlquote calls unquote قبل quote ، وهو ما يزيل الأصل. تمت إضافة هذا في https://github.com/django/django/commit/b70c371fc1f18ea0c43b503122df3f311afc7105 وتم نسخه احتياطيًا لـ Django 1.5+.

فهل نهتم أن هذا ليس _ بدقة _ ما سيراه العميل ، أم أننا نغلق هذا فقط؟
معنويًا ما زال صحيحًا

دفع هذا من الخطأ إلى التنظيف ، لأنه خط حدودي.

إرشادات DjangoCon - مراجعة عامة لهذه التذكرة - ماذا تتوقع أن يكون السلوك ، هل هو مقبول كما هو؟

أنا في سباقات django-con ويمكنني العمل على هذا. لم أساهم من قبل لذا قد أحتاج إلى بعض التوجيهات الأولية. أقرأ حاليًا إرشادات المساهمين لـ DRF وبعد إجراء الاختبارات محليًا ، قد أواجه مشكلة في شخص ما شخصيًا أو على irc.

مسكتك - لا تتردد في الاتصال بي على IRC ، أو تويتر إذا لم أستجيب هناك.

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

tomchristie أفهم أنها مشكلة بسيطة ، لكنها لا تزال خطأ. إذا قمت بالنقر فوق الارتباط ، فإنه ينتقل إلى عنوان URL الخطأ. يبدو أنه من الأنسب وضع علامة على أنها ذات أولوية منخفضة بدلاً من إغلاق مشكلة صالحة.

سوف أنظر في الأمر عندما يكون لدي الوقت.

عذرًا ، لقد فهمت هذا بشكل مختلف - أن عنوان URL لم يكن خاطئًا ، فقط لأنه عرض الرابط بأسلوب لا مفر منه ، هل أسأت فهم ذلك؟

بمعنى آخر. سبب علامة cleanup ، هل فهمت أن هذه مشكلة تجميلية؟

حسنا أرى ذلك. نعم هذا صحيح. بشكل أساسي ، يتم تخطي قيمة href وقيمة العرض ، بدلاً من قيمة العرض فقط.

شكرا لمثل هذه المكتبة العظيمة ، راجع للشغل!

عذرا ، مرة أخرى :)

نعم هذا صحيح.

هل صحيح أنها مشكلة تجميلية أم صحيح أنني أسأت فهمها وهي خطأ؟ :)

صحيح أنه خطأ. :)

الإغلاق ، حيث تم إصلاح ذلك من خلال https://code.djangoproject.com/ticket/22267

لم تنظر إلى هذا حتى الآن ولكن هل نحتاج إلى سحب أي شيء آخر نظرًا لأننا نكرر "urlize"؟ أيضا ما هو الإصدار الذي تم حل هذا فيه؟ أيضا ، عظيم! ياي!

لا يبدو أن هذا تم إصلاحه في 1.7.1 ، إذن 1.7.2 أو 1.8؟ هذا هو السلوك الذي أراه مع django 1.7.1:

>>> from django.utils.html import smart_urlquote, escape
>>> escape(smart_urlquote('http://qwerty.com'))
u'http://qwerty.com'
>>> escape(smart_urlquote('http://qwerty.com?blah=Yes+%26+No'))
u'http://qwerty.com?blah=Yes+&amp;+No'

.. والرئيس الحالي لفرع دجانجو الرئيسي:

>>> from django.utils.html import smart_urlquote, escape
>>> escape(smart_urlquote('http://qwerty.com?blah=Yes+%26+No'))
u'http://qwerty.com?blah=Yes+%26+No'

هل كان urlize_quoted_links نسخة معدلة من django.utils.html.urlize ؟ https://github.com/django/django/blob/master/django/utils/html.py#L255 -L352 مختلفة بشكل كبير ، لكن لا يمكنني معرفة سبب الإصدار المنفصل. يبدو أنه بحاجة إلى إعادة نسخه.

نعم ، تم نسخه مرة أخرى ، لأن الأصل لن يعمل مع روابط نمط " http://example.org " التي تحتوي على علامات اقتباس مفردة أو مزدوجة ، ولا يوجد تجاوز سهل للسماح بذلك. إذا كان هناك فرق كبير ، فهذا محتمل بسبب التغيير التدريجي لإصدار django بينما بقيت إصداراتنا كما هي.

الذهاب لإعادة فتح هذا للتأكد من أن لدينا تذكرة عنصر نائب لضمان معالجة ذلك.

إسقاط المرحلة الرئيسية في هذا الأمر نظرًا لوجود عناصر ذات أولوية أعلى 3.0.1.

أتساءل عما إذا كان من الممكن سحب حالة الاختبار الفاشل من # 2014

يشير هذا التعليق https://github.com/tomchristie/django-rest-framework/pull/2014#issuecomment -61525348 إلى أنه تم إصلاح هذه المشكلة في Django المنبع. سيتم إغلاق هذا ، ولكن سيتم إعادة فتحه إذا أكد أي شخص أنه لا يزال يمثل مشكلة.

أريد فقط أن أؤكد أنه يعمل الآن :)

أحب هذه المكتبة ، إنها تعمل بالفعل بشكل رائع ، ولكن حتى ذلك الحين لا تزال تتحسن! 👍

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات