Bottle: دليل شامل لإطار العمل المصغر في Python
مقدمة عن Bottle
Bottle هو إطار عمل مصغر وبسيط بلغة Python لإنشاء تطبيقات الويب و REST API. الإطار بأكمله مكتوب في ملف واحد بحجم أقل من 100 كيلوبايت، مما يجعله حلاً مثالياً للمشاريع الصغيرة والنماذج الأولية والأنظمة المدمجة والخدمات المصغرة. يوفر Bottle جميع المكونات اللازمة لتشغيل تطبيق ويب كامل دون أي تبعيات خارجية.
مميزات وفوائد Bottle
خفيف الوزن وسهل الاستخدام
لا يتطلب Bottle أي تبعيات خارجية ويمكن تثبيته بأمر واحد. الإطار يتكون من ملف واحد فقط، مما يبسط عملية النشر وفهم الكود.
إمكانيات مدمجة
- خادم HTTP مدمج للتطوير
- محرك القوالب الخاص SimpleTemplate Engine
- دعم WSGI للنشر في بيئة الإنتاج
- التعرف التلقائي على أنواع معاملات المسارات
- معالجة JSON والنماذج والملفات وملفات تعريف الارتباط
مرونة في البنية
Bottle متوافق مع أي مكتبات Python للتعامل مع قواعد البيانات ومحركات القوالب وخوادم WSGI. هذا يسمح بدمجه بسهولة في الأنظمة الحالية.
التثبيت والإعداد الأساسي
تثبيت Bottle
pip install bottle
إنشاء أول تطبيق
قم بإنشاء ملف app.py:
from bottle import route, run
@route('/')
def index():
return "مرحباً من Bottle!"
@route('/hello/<name>')
def greet(name):
return f"مرحباً، {name}!"
if __name__ == "__main__":
run(host='localhost', port=8080, debug=True)
تشغيل التطبيق
python app.py
سيكون التطبيق متاحاً على الرابط http://localhost:8080
التوجيه ومعالجة الطلبات
المسارات الأساسية
from bottle import route, get, post, put, delete
@route('/')
def home():
return "الصفحة الرئيسية"
@get('/users')
def get_users():
return "قائمة المستخدمين"
@post('/users')
def create_user():
return "إنشاء مستخدم جديد"
@put('/users/<id:int>')
def update_user(id):
return f"تحديث المستخدم {id}"
@delete('/users/<id:int>')
def delete_user(id):
return f"حذف المستخدم {id}"
معاملات المسارات
يدعم Bottle أنواعاً مختلفة من المعاملات:
@route('/user/<id:int>')
def user_by_id(id):
return f"معرف المستخدم: {id}"
@route('/article/<slug:path>')
def article_by_slug(slug):
return f"المقال: {slug}"
@route('/price/<amount:float>')
def price(amount):
return f"السعر: {amount}"
@route('/profile/<username:re:[a-zA-Z0-9_]+>')
def profile(username):
return f"الملف الشخصي: {username}"
معالجة معاملات الاستعلام
from bottle import request
@route('/search')
def search():
query = request.query.get('q', '')
category = request.query.get('category', 'all')
return f"البحث عن '{query}' في الفئة '{category}'"
التعامل مع بيانات الطلب
معالجة النماذج
from bottle import request, post
@post('/submit')
def submit_form():
name = request.forms.get('name')
email = request.forms.get('email')
age = request.forms.get('age', type=int)
return f"تم استلام البيانات: {name}, {email}, {age}"
التعامل مع JSON
from bottle import request, response
@post('/api/data')
def handle_json():
data = request.json
# معالجة البيانات
result = {
'status': 'success',
'received': data,
'message': 'تم استلام البيانات بنجاح'
}
response.content_type = 'application/json'
return result