Werkzeug: السماح بتعطيل إلحاق الشرطة المائلة؟

تم إنشاؤها على ٣١ يناير ٢٠١٨  ·  7تعليقات  ·  مصدر: pallets/werkzeug

نحن نستخدم Werkzeug و Flask لبناء واجهة برمجة تطبيقات REST. في هذا السياق ، لا نريد السلوك التلقائي لإلحاق الشرطات المائلة اللاحقة ، لأن هذا يؤدي إلى عدم تناسق بين GETs والطلبات الأخرى ، ومن المقبول أن نكون صارمين هنا.

نحتاج حاليًا إلى استخدام فئة القاعدة المخصصة التي ترتبط بالأجزاء الداخلية ( Rule.match و RequestSlash ) للقيام بذلك.

هل من المنطقي إضافة هذا كخيار تهيئة من الدرجة الأولى؟ شيء مثل append_slash (لموازاة خيار Django المكافئ) على خرائط عناوين URL؟

routing

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

app.url_map.strict_slashes = False هو كل ما تحتاجه لتجنب ذلك.

ال 7 كومينتر

app.url_map.strict_slashes = False هو كل ما تحتاجه لتجنب ذلك.

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

السلوك الحالي هو:

| القاعدة بها شرطة مائلة | يحتوي المسار على شرطة مائلة | strict_slashes | النتيجة |
| - | - | - | - |
| ن | ن | True | (مباراة) |
| ن | ن | False | (مباراة) |
| ن | ص | True | 404 |
| ن | ص | False | 404 |
| ص | ن | True | 301 |
| ص | ن | False | (مباراة) |
| ص | ص | True | (مباراة) |
| ص | ص | False | (مباراة) |

أريد 404 عندما تحتوي القاعدة على شرطة مائلة ولكن المسار لا يوجد. أفعل هذا الآن عبر:

class StrictRule(Rule):
    def match(self, path, method=None):
        try:
            result = super(StrictRule, self).match(path, method)
        except RequestSlash:
            return None

        return result

لكني أفضل عدم التعمق في الأمور الداخلية.

سيكون استخدام القاعدة المخصصة هو الطريقة الصحيحة للقيام بذلك في Flask. لقد قررنا داخليًا ألا نحاول إنشاء كل شيء للجميع في القواعد. إذا كنت تريد قاعدة تتجاوز ما يتم تقديمه كمعيار ، فستحتاج إلى تحديدها. بالنسبة لبرنامج Flash ، يمكنك تعيين url_rule_class للفصل الجديد. راجع مستندات Flask لمزيد من المعلومات. http://flask.pocoo.org/docs/1.0/api/؟highlight=rule#flask.Flask.url_rule_class

تضمين التغريدة

بحسب https://github.com/pallets/werkzeug/issues/1246#issuecomment -362099342 ، فإن المشكلة هنا تتعلق بتنفيذ القاعدة المخصصة. تم وضع علامة صراحة على RequestSlash كاستثناء داخلي لكل https://github.com/pallets/werkzeug/blob/a220671d66755a94630a212378754bb432811158/src/werkzeug/routing.py#L259 -L260 ، لذلك من الصعب جدًا التعامل مع هذا في الرقم السري للمستخدم.

وعلى الرغم من أنني أوافق بالتأكيد على أن القواعد الأساسية لا ينبغي أن تدعم كل حالة استخدام محتملة ، فإن عدم المطابقة على شرطة مائلة لاحقة غائبة هو حالة استخدام شائعة جدًا. بالنسبة للفن السابق ، يعد هذا النمط أحد النماذج القليلة التي يتم عرضها بشكل صريح في تكوين Django عبر APPEND_SLASH : https://docs.djangoproject.com/en/dev/ref/settings/#append -slash.

تعني كلمة "داخلي" في هذه الحالة "يتم التعامل معها داخليًا" وليس "للاستخدام الداخلي فقط". الرمز الذي قمت بعرضه مناسب للاستخدام.

davidism شكرا للتوضيح. سأمضي قدمًا وأمضي قدمًا مع هذا ، إذن.

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