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

السؤال

نشر

أحاول أن أقوم بعمل مسار يحتوي على معامل واحد ولكن يجب أن يحتوي هذا المعامل على بعض الشروط، مثل أن يكون طوله من 2 إلى 5 أحرف فقط، ولا يجب أن يكون بأي أحرف غير الإنجليزية والأرقام، أي يجب أن ينطبق على التعبير التالي:

[a-zA-Z0-9]{2,5}

هل يمكن القيام بهذا الأمر في فلاسك Flask أم يجب أن أقوم بإستقبال المعامل داخل الدالة والتحقق منه يدويًا؟
 

Recommended Posts

  • 1
نشر

يمكن القيام بهذا الأمر من خلال إستخدام الصنف BaseConverter (المتوفر في werkzeug.routing) للقيام بإنشاء محول converter باسم regex على سبيل المثال، على النحو التالي:

from werkzeug.routing import BaseConverter

class RegexConverter(BaseConverter):
    def __init__(self, url_map, *items):
        super(RegexConverter, self).__init__(url_map)
        self.regex = items[0]

app.url_map.converters['regex'] = RegexConverter

ويمكنك أن تستخدمه بالشكل التالي:

from flask import Flask, render_template
from werkzeug.routing import BaseConverter

app = Flask(__name__)

class RegexConverter(BaseConverter):
    def __init__(self, url_map, *items):
        super(RegexConverter, self).__init__(url_map)
        self.regex = items[0]

app.url_map.converters['regex'] = RegexConverter


@app.route('/<regex("[a-zA-Z0-9]{2,5}"):uid>/', methods=['POST', 'GET'])
def index(uid):
    return uid

    
if __name__ == '__main__':
    app.run(debug=True)

ستلاحظ أن كل المسارات التالية تعمل لأنها تحقق الشروط:

http://127.0.0.1:5000/hi/
http://127.0.0.1:5000/12/
http://127.0.0.1:5000/123/
http://127.0.0.1:5000/hi123/
...

بينما المسارات التالية لن تعمل على الإطلاق:

http://127.0.0.1:5000/
http://127.0.0.1:5000/a/
http://127.0.0.1:5000/%D9/
http://127.0.0.1:5000/hello-world/
http://127.0.0.1:5000/helloworld/
...

يمكنك أن تقرأ أكثر حول التعابير النمطية في هذه المقالة:

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...