مرحبًا يا من هناك! باعتباري أحد موردي Filtering Flask، رأيت الكثير من الأشخاص يعانون من كيفية تصفية مسارات تطبيق Flask استنادًا إلى أنماط URL. قد يبدو الأمر تقنيًا بعض الشيء، لكن لا تقلق، فأنا هنا لأشرحه لك بطريقة سهلة وسهلة.
أولاً، دعونا نفهم سبب رغبتنا في تصفية مسارات تطبيق Flask. في تطبيق Flask الواقعي، قد يكون لديك مجموعة من الطرق. بعضها مخصص للوصول العام، وبعضها للاستخدام الداخلي، وبعضها قد يكون لأدوار مستخدم محددة. تساعد تصفية المسارات بناءً على أنماط عنوان URL في إدارة الوصول وتحسين الأمان وجعل التطبيق أكثر تنظيماً.
لنبدأ بأساسيات طرق Flask. في تطبيق Flask البسيط، يمكنك تحديد المسارات باستخدام ملف@app.routeمصمم ديكور. على سبيل المثال:
من القارورة استيراد تطبيق القارورة = Flask(__name__) @app.route('/') def Index(): return "هذه هي الصفحة الرئيسية" @app.route('/about') def about(): return "هذه هي الصفحة الرئيسية"
في هذا التطبيق البسيط، لدينا طريقان: المسار الجذري (/) والطريق حول (/عن). ولكن ماذا لو أردنا تطبيق بعض الفلاتر، على سبيل المثال، للسماح فقط بالوصول إلى أنماط معينة من عناوين URL؟
إحدى الطرق للقيام بذلك هي باستخدام Flask'sbefore_requestمصمم ديكور. يسمح لك هذا الديكور بتشغيل وظيفة قبل معالجة كل طلب. يمكننا استخدامه للتحقق من عنوان URL المطلوب مقابل مجموعة من الأنماط.
من قارورة استيراد قارورة، طلب، إحباط التطبيق = Flask(__name__) ALLOWED_PATTERNS = [ '/', '/about' ] @app.before_request def تقييد_access(): إذا لم يكن مسار الطلب في ALLOWED_PATTERNS: abort(403) @app.route('/') def Index(): إرجاع "هذه هي الصفحة الرئيسية" @app.route('/about') def about (): إرجاع "هذه هي الصفحة الخاصة"
في هذا الكود،تقييد_الوصوليتم تشغيل الوظيفة قبل كل طلب. يتحقق مما إذا كان مسار URL المطلوب موجودًا في الملفALLOWED_PATTERNSقائمة. إذا لم يكن الأمر كذلك، فإنه يُرجع خطأ محظور 403. يعد هذا نموذجًا أساسيًا جدًا للتصفية استنادًا إلى التطابقات الدقيقة لعنوان URL.


ولكن ماذا لو أردنا استخدام أنماط أكثر مرونة، مثل التعبيرات العادية؟ حسنًا، لا يحتوي Flask على تصفية المسار المستندة إلى regex، ولكن يمكننا تنفيذها بأنفسنا.
فيما يلي مثال لكيفية استخدام التعبيرات العادية لتصفية المسارات:
import re from flask import Flask, request, abort app = Flask(__name__) ALLOWED_REGEX = [ re.compile(r'^/$'), re.compile(r'^/about$') ] @app.before_request def regex_restrict_access(): للنمط في ALLOWED_REGEX: if Pattern.match(request.path): فاصل آخر: abort(403) @app.route('/') def Index(): return "هذه هي الصفحة الرئيسية" @app.route('/about') def about(): return "هذه هي الصفحة الرئيسية"
في هذا الكود، قمنا بتحديد قائمة من التعبيرات العادية المجمعة. الregex_restrict_accessتتكرر الوظيفة عبر هذه الأنماط وتتحقق مما إذا كان أي منها يطابق مسار عنوان URL المطلوب. إذا تم العثور على تطابق، يتم السماح بالطلب؛ وإلا فسيتم حظره بسبب خطأ 403.
الآن، دعونا نتحدث قليلاً عن التطبيقات العملية لتصفية المسار. على سبيل المثال، في أحد تطبيقات التجارة الإلكترونية، قد ترغب في تقييد الوصول إلى المسارات الإدارية. يمكنك تحديد نمط لجميع عناوين URL ذات الصلة بالمسؤول، مثل/مسؤل/*والسماح فقط للمستخدمين الإداريين المعتمدين بالوصول إلى هذه المسارات.
يمكن أن تكون حالة استخدام أخرى في واجهة برمجة التطبيقات (API). قد ترغب في تقييد الوصول إلى نقاط نهاية معينة لواجهة برمجة التطبيقات (API) بناءً على مستوى ترخيص العميل. ومن خلال تصفية المسارات بناءً على أنماط عنوان URL، يمكنك بسهولة تنفيذ هذا النوع من التحكم في الوصول.
كمورد لقارورة الترشيح، أود أيضًا أن أذكر منتجاتنا. نحن نقدم مجموعة واسعة من قوارير الترشيح عالية الجودة المثالية للاستخدام في المختبر. تحقق من لديناقوارير تصفية زجاجية شفافة للمختبرات مزودة بأنبوب علويوقوارير ترشيح Erlenmeyer زجاجية مخروطية الشكل للمختبر مع أنابيب علوية. هذه القوارير مصنوعة من مواد زجاجية عالية الجودة ومصممة لعمليات ترشيح فعالة وموثوقة.
دعونا نتعمق قليلاً في سيناريوهات تصفية المسار الأكثر تقدمًا. على سبيل المثال، قد يكون لديك تطبيق متعدد المستأجرين حيث يكون لكل مستأجر مجموعته الخاصة من المسارات المسموح بها. للتعامل مع هذا، يمكنك تخزين الأنماط المسموح بها في قاعدة بيانات والاستعلام عنها بناءً على معلومات المستأجر في الطلب.
من قارورة استيراد قارورة، طلب، إحباط استيراد sqlite3 app = Flask(__name__) def get_allowed_patterns(tenant_id): conn = sqlite3.connect('tenants.db') cursor = conn.cursor() cursor.execute("حدد أنماط من المستأجرين حيث المعرف =؟"، (tenant_id،)) النتيجة = cursor.fetchone() conn. Close() إذا كانت النتيجة: return result[0].split(',') return [] @app.before_request def Tenant_restrict_access(): Tenant_id = request.headers.get('X - Tenant - ID') if Tenant_id:allow_patterns = get_allowed_patterns(tenant_id) إذا لم يكن مسار الطلب في الأنماط المسموح بها: abort(403) @app.route('/') def Index(): return 'This is الصفحة الرئيسية' @app.route('/about') def about(): return "هذه هي الصفحة الخاصة"
في هذا المثال، نقوم بالاستعلام عن قاعدة بيانات SQLite للحصول على الأنماط المسموح بها لمستأجر معين. يتم استرداد معرف المستأجر من رؤوس الطلب. إذا لم يكن عنوان URL المطلوب موجودًا في قائمة الأنماط المسموح بها لهذا المستأجر، فسيتم رفض الوصول.
بالإضافة إلى الأمان والتحكم في الوصول، يمكن أيضًا استخدام تصفية المسار لتحسين الأداء. على سبيل المثال، يمكنك إعادة توجيه الطلبات التي تطابق أنماطًا معينة إلى خادم مختلف أو تخزين الاستجابات مؤقتًا لأنماط عنوان URL محددة.
حسنًا، هذا ملخص لكيفية تصفية مسارات تطبيق Flask بناءً على أنماط URL. آمل أن تكون مشاركة المدونة هذه قد أعطتك فهمًا جيدًا للموضوع. إذا كنت مهتمًا بقوارير التصفية الخاصة بنا أو كانت لديك أي أسئلة حول تصفية المسار في Flask، فلا تتردد في التواصل معنا لإجراء مناقشة حول المشتريات. نحن هنا لمساعدتك في تلبية جميع احتياجاتك!
مراجع:
- توثيق القارورة
- توثيق التعبيرات العادية لبيثون
- وثائق سكليتي
