تطبيق الطقس — تطبيق ويب متكامل (Weather App)
هو تطبيق ويب متكامل (Full-stack) يتيح للمستخدمين إنشاء حسابات، تسجيل الدخول، البحث عن حالة الطقس الحالية والتوقعات لعدة أيام لأي مدينة، بالإضافة إلى الاحتفاظ بسجل بحث شخصي يمكنهم مراجعته أو حذفه لاحقاً.
الميزات الأساسية:
مصادقة المستخدمين (User Authentication): تسجيل الحساب، تسجيل الدخول، وتسجيل الخروج باستخدام نظام الحماية المدمج في Django، مع نموذج تسجيل مخصص (يتطلب الاسم الأول، اسم العائلة، والبريد الإلكتروني بالإضافة إلى اسم المستخدم وكلمة المرور).
البحث عن طقس المدن: يدخل المستخدم اسم المدينة ليقوم التطبيق بجلب: درجة الحرارة الحالية، درجة الحرارة الملموسة ("feels like")، والحد الأقصى والأدنى اليومي، بالإضافة إلى نسبة الرطوبة، سرعة الرياح، والضغط الجوي، مع وصف لحالة الطقس مصحوباً بأيقونة مطابقة (شمس، سحاب، مطر، ثلج، إلخ).
توقعات الطقس لعدة أيام: جلب توقعات الطقس بناءً على تجميع وبيانات الطقس التي تحدُث كل 3 ساعات من الواجهة البرمجية (API)، وتحويلها إلى ملخصات يومية تعرض أعلى وأقل درجة حرارة لكل يوم.
سجل البحث (Search History): يتم حفظ كل عملية بحث ناجحة تلقائياً (المدينة، درجة الحرارة، الوصف، والتاريخ) وتكون مرتبطة بالمستخدم المسجل، مع إمكانية حذف أي عملية بحث بشكل فردي.
إشعارات المستخدمين: عرض رسائل النجاح أو الخطأ (مثل: فشل تسجيل الدخول، أو أخطاء جلب بيانات الطقس) عبر نظام رسائل Django (Messages framework).
التقنيات المستخدمة (Tech Stack):
الواجهة الخلفية (Backend): لغة Python + إطار العمل Django 5.2 (بمعمارية MVT)، مقسم إلى تطبيقين: تطبيق weather (للمنطق البرمجي الأساسي) وتطبيق accounts (لإدارة المستخدمين).
قاعدة البيانات: SQLite مع استخدام Django ORM (النماذج المستخدمة: SearchHistory، WeatherSearch، Profile).
الـ API الخارجي: واجهة OpenWeatherMap API (لجلب الطقس الحالي وتوقعات الـ 5 أيام/كل 3 ساعات)، ويتم استهلاك البيانات عبر مكتبة requests.
نظام المصادقة: نظام Auth المدمج في Django مع التعديل على نموذج UserCreationForm.
الواجهة الأمامية (Frontend): قوالب Django (صفحات HTML معالجة من جهة الخادم) + Bootstrap 5 للتنسيق + Font Awesome للأيقونات، بالإضافة إلى ملفات CSS و JavaScript مخصصة.
المعمارية التقنية: فصل واضح للمهام والمسؤوليات داخل الكود (Separation of concerns) — تطبيقات مخصصة، دالات العرض (Function-based views)، وتوجيه روابط الـ URLs على مستوى التطبيق.
نقاط يمكن التحدث عنها في المقابلات الشخصية (Interview Talking Points):
الربط مع الـ APIs الخارجية: كيفية تحليل وتجميع بيانات التوقعات المأخوذة كل 3 ساعات إلى ملخصات يومية (أعلى/أقل درجة حرارة في اليوم) باستخدام الـ defaultdict في بايثون.
التحكم في الصلاحيات (Access control): استخدام الـ decorator (@login_required) لحماية صفحات الطقس وسجل البحث ومنع المستخدمين غير المسجلين من الدخول إليها.
معالجة الأخطاء (Error handling): التعامل بذكاء مع فشل الـ API (مثل استجابات الخطأ غير 200، أو فقدان وصلاحية مفتاح الـ API Key) وإظهار رسائل خطأ واضحة للمستخدم.
نمذجة البيانات باستخدام الـ ORM: ربط سجل البحث بكل مستخدم عبر علاقة مفتاح أجنبي (ForeignKey)، لضمان أن كل مستخدم يستعرض سجلاته الخاصة فقط.