نظام الأشعارات

السلام عليكم كيف يمكننا بناء نظام أشعارات في الموقع
لو كانت framework Django هل نحن مضطرين لاستخدام frameworks اخرى مثل vue.js او غيرها ؟
أم يكفينا Django reset API ونستخدم القليل من JS لاظهار هذه التفاعلات في الشاشة لدى المستخدم

ما هي افضل طريقة لعمل موقع بصفحة واحدة مثل هذا المنتدى

ما هي الطريقة السليمة لاستخدام rest api django

بالنسبة للتشفير هل مستطيع تشفير ال data في. API

2 Likes

حسناً، الأمر يبدو معقد بسبب التفكير في أكثر من شيء في وقت واحد :smile:

دائما أحب البساطة في الأمور، لذا لنقم بتقسيمها:

هل تحتاج فعلاً لإشعارات؟

بسبب الفيسبوك، أغلب العملاء صاروا يظنوا أن الاشعارات (بالجرس في الأعلى) صارت الطريقة الافتراضية لاخطار المستخدمين.

في الواقع، ليس أغلب المستخدمين سيدخلوا مواقع البيع والشراء بشكل يومي مثلما يدخلوا على الفيسبوك والتويتر، لذا خاصية الجرس ليست الأمثل.

بالعكس، ما زال الايميل يعتبر من أسهل الطرق للقيام بذلك.

مثلاً: حينما يوافق العميل على طلب الزبون في موقع بيع الكتروني بإمكانك وقتها (حينما تقوم بتحديث حالة الطلب في قاعدة البيانات)، ارسال ايميل للمستخدم لاخطاره بنجاح العملية وانتهى الأمر :grin:

ربما بالفعل تحتاج لاشعارات خصوصاً في الأنظمة التي مثل الفيسبوك، ويجب أن يعرفوا بذلك في قائمة موحدة.

ويوجد هنا بعض الأمور

1. عرض الإشعارات

تحتاج هنا فقط أن تقرر كيف تأتي الأشعارات؟
هل يقوم الأدمن بإضافاتها يدوياً ويرسلها للجميع؟ هل يرسلها لأشخاص محددين؟

أو هل يقوم النظام تلقائياً باضافة الاشعارات، مثلاً عند طلب الزبون يظهر للأدمن اشعار؟ أو مثلاً عند قبول الطلب يظهر للمستخدم اشعار؟

وقتها بإمكانك اضافة مودل للاشعارات مثل:

Notification
     id
     message
     shown_users

فقط message تحتوي على الاشعار
و shown_users هي علاقة many to many فيها الأعضاء الذي رأوا هذا الاشعار من قبل.

وحينما يدخل اليوزر على الصفحة تقوم بعمل كويري (معقدة بعض الشيء) لطلب الاشعارات الخاصة باليوزر، وأيضاً يجب أن تعرف ما إذا كانت جميع الاشعارات مقروءة أم لا لكي تظهر الاشعار بالأعلى بلون مختلف (غير هكذا لا فائدة من الاشعارات) :sweat_smile:

2. عرض الاشعارات بدون تحديث الصفحة (Realtime Notifications)

هنا يكمن التحدي الحقيقي، لأن الأمر يتطلب بعض التعديلات على البرمجية لكي تظهر الاشعارات لليوزر بدون الحاجة لتحديث الصفحة.

الحل الأول الذي يخطر على بال الكثيرين هو استعمال الـ sockets، نعم هي جيدة ولكنها لا تكفي.
في أغلب الفريمورك يوجد خاصية socket، مثلا جانقو يوجد django sockets.

في رأيي الحل الأسهل (ليس الأرخص) هو استعمال خدمة جاهزة مثل OneSignal أو Firebase، هذا مثال للبايثون:

غالباً، أنت لا تحتاج realtime notifications…

أغلب المستخدمين لن يبقوا في موقع المتجر لمتابعة الاشعارات كما هو الحال مع المنتدى حيث يتشارك الناس الكثير من الأراء والردود :grin:

في حالتك، ربما الحل الأول يكفي بالإضافة لارسال الايميل :wink:

2 Likes

هذا ما يعرف بالـ SPA - Single Page Application، ويمكنك بناء مثله باستعمال Vue أو React أو أي فريمورك حديث.

يفضل استعمال مكتبة axios للجافاسكربت، فقط تجهز الـ API في الجانقو وتتواصل معها باستعمال js.

هل بإمكانك أن تخبرني المزيد حول ما تريد تشفيره بالضبط؟
تقصد حماية بيانات تسجيل الدخول عند ارسالها للـ API؟

1 Like

بالنسبة للمشروع الحالي فأكتفيت بأستخدام send email to admin
استعملت خدمة SendGrid

لكن هناك مشروع مختلف عن هذا ويحتاج بعض الامور من ضمنها الاشعارات المباشرة بنفس الصفحة دون عمل reload

قريباً سأعمل على هذه الافكار المتنوعة لعمل اشعارات

1 Like

قبل سؤالي عن التشفير
لأوضح السؤال

لدينا الرابط التالي
api/post/detale/id
هذا البوست فيه معلومات هل هي تظهر للكل لو احد قام بطلب هذا العنوان ام تكون مخفية

وعند ارسال معلومات جديدة من user لاخر عبر api
هل استطيع منع الكل من مشاهدة هذه المعلومات باستثناء المرسل والمستقبل ؟

لا اقصد نظام الرسائل
user1 يريد ارسال معلومات order ل user2 عن طريق form
ولا احد يستطيع مشاهدة هذا العنصر(البيانات)
الا المرسل والمستقبل
لنفرض اننا سأرسلها واحتفظ بها بقواعد البيانات و تحفظ في root خاص بها في api

هل يستطيع بقية الناس الاطلاع على المعلومات من الرابط
api/order/detale/id
ام استطيع منعهم من ذلك ؟

هذا ما قصدته بتشفير api

1 Like

اهاا، فهمتك.

يوجد لدينا جانبين في الحماية، ولكن يقال بشكل عام auth (لأنها تختصر الكلمتين معاً authentication + authorization).

1. المصادقة authentication (اعتبرها مثل المصافحة :handshake:)

هنا يقوم اليوزر بالتعريف عن هويته، مثلاً يدخل اليوزر نيم والباسورد.

ووقتها نعرف أنه فعلاً هو نفس الشخص.

وهذه العمليات مرتبطة بالـ Login Register ForgetPassword… إلخ

2. التفويض authorization (اعتبرها مثل الشرطي الذي يسمح لك بشيء معين :policeman: )

هنا تقوم بتحديد صلاحيات permissions معينة لنوع من الطلبات أو الوصول لبيانات… مثلاً تحدد أن اليوزر لا يمكنه الوصول لبيانات جميع الطلبات، لكن الأدمن يستطيع الوصول لها.

يتم تحديد الـ permissions غالباً في الـ views في الـ API (وبإمكانك أيضاً جعلها على على الـ models).

  • يجدر الإشارة إلى أن التفويض authorization مرتبط بشكل وثيق مع المصادقة authentication، ففي البداية تحدد هوية المستخدم وهذا يعطيه صلاحيات مختلفة.