لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 10/19/22 في كل الموقع
-
1 نقطة
-
1 نقطة
-
قم بإعداد ASGI لتطبيقك قبل البدء ، قم بتثبيت التبعيات المدرجة أدناه والتي ستكون ضرورية لإعداد WebSockets. Django 3.0(or greater) channels 3.0.4 channels-redis 3.3.1 بمجرد تثبيت التبعيات المذكورة أعلاه ، سيتعين علينا إضافة "channels" إلى قائمة قسم "INSTALLED_APPS" في ملف settings.py. بشكل افتراضي ، تعمل تطبيقات Django على خوادم WSGI ولهذا السبب سنحتاج إلى إعداد تطبيقنا يدويًا للتشغيل على خادم ASGI. انتقل إلى ملف settings.py وأضف السطر التالي. ملاحظة: "your_project" في الكود أدناه هو اسم الدليل للمجلد الجذر الذي سيحتوي على ملف "settings.py" ASGI_APPLICATION = 'your_project.asgi.application' الآن لكي يعمل جزء الكود أعلاه ، سيتعين علينا التأكد من وجود ملف "asgi.py" في دليل التطبيق الجذر لدينا مثل: 2) إنشاء نموذج الإشعارات class notifications(models.Model): user_sender=models.ForeignKey(Users,null=True,blank=True,related_name='user_sender',on_delete=models.CASCADE) user_revoker=models.ForeignKey(Users,null=True,blank=True,related_name='user_revoker',on_delete=models.CASCADE) status=models.CharField(max_length=264,null=True,blank=True,default="unread") type_of_notification=models.CharField(max_length=264,null=True,blank=True) 3) قم بإعداد ملف customers.py الخاص بك المستهلكون إلى WebSockets كوجهات النظر إلى HTTP. ملف customers.py هو المكان الذي يتم فيه التعامل مع جميع طلبات WebSocket وإرسالها مرة أخرى إلى الواجهة الأمامية. هناك أنواع مختلفة من مستهلكي WebSocket مثل "AsynConsumer" و "WebSocketConsumer" و "AsyncWebSocketConsumers" على سبيل المثال لا الحصر. انتقل إلى أحد التطبيقات داخل مشروعك وأنشئ ملف "customers.py". قم باستيراد التبعيات التالية from channels.generic.websocket import WebsocketConsumer,AsyncWebsocketConsumer from channels.db import database_sync_to_async from asgiref.sync import async_to_sync,sync_to_async from channels.layers import get_channel_layer يحتاج كل "مستهلك" في قنوات Django إلى ثلاث طرق محددة. الاتصال والاستلام وقطع الاتصال. يتم استخدام الاتصال لإنشاء اتصالات بين الواجهة الأمامية والخلفية. يُستخدم الاستلام للتعامل مع الطلبات المرسلة من الواجهة الأمامية والتعامل معها وفقًا لذلك. يُستخدم فصل الاتصال للتعامل مع ما يجب أن يحدث إذا تم إغلاق WebSocket أو إيقاف تشغيله. إذن كيف ستعمل WebSockets لدينا؟ سيقوم WebSocket الخاص بنا أولاً "بإنشاء" اتصال. بمجرد إنشاء الاتصال ، فإن الواجهة الخلفية "تستمع" لأي حدث قد ترسله الواجهة الأمامية إليه وتعالج ذلك في طريقة "الاستلام". دعونا نلقي نظرة خاطفة على ذلك سننشئ أولاً وظيفة سيتم استخدامها لإنشاء كائن إعلام في كل حدث. @database_sync_to_async def create_notification(receiver,typeof="task_created",status="unread"): notification_to_create=notifications.objects.create(user_revoker=receiver,type_of_notification=typeof) print('تم') return (notification_to_create.user_revoker.username,notification_to_create.type_of_notification) بعد ذلك سنلقي نظرة على "المستهلك" الرئيسي لدينا. دعونا نلقي نظرة على طريقة الاتصال أولاً. class NotificationConsumer(AsyncWebsocketConsumer): async def websocket_connect(self,event): print('تم الإتصال',event) print('تم اﻷمر') print(self.scope['user'].id) await self.accept() await self.send(json.dumps({ "type":"websocket.send", "text":"مرحبا" })) 4) أدخل Redis الآن مع طريقة الاتصال بعيدًا عن الطريق. سنحتاج إلى إعداد "Redis". Redis هو مخزن بنية بيانات مفتوح المصدر (مرخص من BSD) ، يستخدم كقاعدة بيانات وذاكرة تخزين مؤقت ووسيط رسائل. إنه جزء لا يتجزأ من تشغيل WebSockets الخاص بنا. انتقل إلى ملف settings.py وأضف الكود التالي لإعداد Redis. CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [("127.0.0.1", 6379)], }, }, } 5) إعداد جهاز التوجيه URL الخاص بنا import os from channels.routing import ProtocolTypeRouter,URLRouter from channels.auth import AuthMiddlewareStack from stories import consumers from django.urls import re_path,path from django.core.asgi import get_asgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mirror_project.settings') import stories.routing application = ProtocolTypeRouter({ "http": get_asgi_application(), "websocket":AuthMiddlewareStack( URLRouter( [path('stories/notification_testing/',consumers.NotificationConsumer.as_asgi())] )) }) إذا نظرت إلى جزء "ProtocolTypeRouter" داخل الكود ، فلدينا قسمان ، "HTTP" و "WebSocket". "HTTP" مخصص لـ ASGI لرعاية طلبات العرض التقليدية بينما يتم استخدام "WebSocket" للتعامل مع طلبات مأخذ التوصيل. ملاحظة ، لقد حددت "مسارًا" يحتوي على "مسار" وبجانبه يوجد شيء مشابه لطريقة عرض. رمز يرتبط بـ "فئة مستهلك الإشعارات". 6) جمع كل ذلك معًا السبب في قيامنا بدمج Redis في المقام الأول هو أننا نحتاج إلى طريقة "لبث" حدث إنشاء الإشعارات متى تم إنشاؤه في "غرفة". وبعد ذلك يمكن للواجهة الأمامية التحقق من المعلومات وتقرر إما عرضها أو رفضها. دعونا نلقي نظرة على الكود النهائي الخاص بنا لملف customers.py. @database_sync_to_async def get_user(user_id): try: return Users.objects.get(id=user_id) except: return AnonymousUser() @database_sync_to_async def create_notification(receiver,typeof="task_created",status="unread"): notification_to_create=notifications.objects.create(user_revoker=receiver,type_of_notification=typeof) print('تم') return (notification_to_create.user_revoker.username,notification_to_create.type_of_notification) class NotificationConsumer(AsyncWebsocketConsumer): async def websocket_connect(self,event): print(self.scope) await self.accept() await self.send(json.dumps({ "type":"websocket.send", "text":"مرحبا" })) self.room_name='test_consumer' self.room_group_name='test_consumer_group' await self.channel_layer.group_add(self.room_group_name,self.channel_name) self.send({ "type":"websocket.send", "text":"room made" }) async def websocket_receive(self,event): print(event) data_to_get=json.loads(event['text']) user_to_get=await get_user(int(data_to_get)) print(user_to_get) get_of=await create_notification(user_to_get) self.room_group_name='test_consumer_group' channel_layer=get_channel_layer() await (channel_layer.group_send)( self.room_group_name, { "type":"send_notification", "value":json.dumps(get_of) } ) print('receive',event) async def websocket_disconnect(self,event): print('disconnect',event) async def send_notification(self,event): await self.send(json.dumps({ "type":"websocket.send", "data":event })) print('تم') print(event) 6) اختبر اتصالات socket الخاص بك ws://127.0.0.1:8000/stories/notification_testing/ 7) قم بإنشاء إعلام عن طريق إرسال معرف المستخدم. أخيرًا ، نرسل معرف مستخدم إلى WebSocket الخاص بنا1 نقطة
-
1 نقطة
-
سلام عليكم عاوز لما اليوزر يدخل على لينك ، بعد ما يسجل دخول يفتح له اللينك ده مش يحوله للصفحة الرئيسيه حاولت اعمل اعادة التوجيه بالكود ده header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); بس بيفضل في مكانه لما بيسجل دخول ما بيغيرش حاجة1 نقطة
-
بالطبع لا تنسى استئناف الجلسة بحقن السطر التالي في اعلى الملف المستهدف session_start();1 نقطة
-
يحدث هذا لأنك تسند القيمة space-between الى الخاصية justify-content الخاصة بالصندوق المرن حاوي البطاقات. سيحافظ هذا على توزيع العناصر ضمن المستوى الافقي، لن تلاحظ هذا في حال ما كان عدد البطاقات الاجمالي هو 4 مثلا. للتخلص من هاته المشكلة أسند القيمة center لهاته الخاصية فيكون: #feature { display: flex; align-items: center; flex-wrap: wrap; justify-content: center; } أيضا للحفاظ على توزيع المسافات بين البطاقات قد تحتاج اسناد قيمة مناسبة للخاصية gap كـ: #feature { display: flex; align-items: center; flex-wrap: wrap; justify-content: center; gap: 20px; } قم ايضا بضبط عرض مناسب للبطاقات fe-box، اقترح بدل ضبط عرض ثابت كـ: #feature .fe-box { width: 180px; استعمال عرض نسبي كـ: #feature .fe-box { width: 30%; تصنيف:CSS Flexbox - موسوعة حسوب الخاصية justify-content - موسوعة حسوب1 نقطة
-
سلام عليكم اريد طريقة عمل تنبيهات فورية لاي حدث اختارة (بيان جديد تم اضافته مثلا ، تاريخ اوشك على الانتهاء ) الخ زي ما موجود في اكادمية حسوب كده لما حد يرد او بعمل اعجاب1 نقطة
-
مرحبا بالجميع ،انا مهتم ب MERN stack, بس مالقيت دورة ل MERN stack في اكادمية حسوب؟ هل هناك دورة قريبة ام لا. شكراً1 نقطة
-
دورة JavaScript فيها شرح لكل من MongoDB و Express و React و Node والتي تختصر بـ MERN بالإضافة للمزيد من المهارات وتحتوي على مشاريع مبنية بهذا التقنية. كما فيها شرح للـ NEXT JS وهو يجمع كل من Express و React و Node.1 نقطة
-
انا خلصت مشاريع الدوره وعملت portfolio website بس مش عارف اجيب افكار مشاريع تانيه احطها في البورتفوليو https://mohamed-montaser1.github.io/my_portfolio/public/1 نقطة
-
لا اعتقد أنه جيد لأنه سيسيئ إلا تجربة المستخدم ولن يمنع الوصول إلى كود الموقع. وإذا تصفحت المواقع الشهيرة والكبيرة وحتى تلك التي تبيع المواقع الجاهزة، ستجد أنها لا تقوم بهذا الأمر.1 نقطة
-
لا أعتقد أنك تستطيع ان تمنعه أصلاً، وإنما تستطيع تصعيب الوصول إليه.1 نقطة
-
الموقع جيد جداً بشكل عام ولكن يوجد بعض الملاحظات مثل : الموقع خفيف جداً وليس بحاجة للإشارة الخاصة بجاري التحميل و التي تظهر في البداية، ونستخدم هذه الحركة عندما يكون الموقع ثقيل فقط، اما في الموقع الخاص بك فهي قد أساءت لتجربة المستخدم لأنك تستطيع ان ترى ان الموقع فاتح بالفعل قبل الانتهاء من الحركة. عند الضغط على services يظهر الموقع بالشكل التالي : حيث يختفي نصف الصور من الاعلى ويجب عليك السحب للأعلى حتى ترى القسم بشكل جيد. ليس هنالك حاجة للصورة التالي على الشاشات الصغير ويمكنك اخفائها عندما تكون الشاشة اصغر من قيمة معينة، حيث أنها تجبر المستخدم على النزول كثيراً حتى يصل للقسم التالي : أما باقي الموقع فهو رائع جداً فكرة الوضع الليلي جميلة أيضاً. @Mohamed Montaser31 نقطة
-
يمكنك عمل مدونة إذاً. هذه اكثر الافكار الرائجة، ويمكنني ان اعطيك المزيد من الافكار ولكن ليس هنالك الكثير من الطلب عليها. والافضل الان ان تبحث عن شخص يحتاج لموقع الكتروني ولو قمت بتنفيذه بمقابل رمزي وهذا افضل من تصميم مواقع للـ portfolio.1 نقطة
-
ولكنهم كلهم مشروحين في الدوره ولقد فعلتهم عدا موقع أكاديمية أو مدرسة.1 نقطة
-
الموقع الذي شاركته جيد جداً و هذه بعض الافكار المهمة والبسيطة : صفحة هبوط لمنتج معين صفحة سيتم اطلاق الموقع بعد كذا ..إلخ. صفحة الصفحة غير موجودة 404. لوحة تحكم. موقع للتسوق (متجر) موقع أكاديمية أو مدرسة.1 نقطة
-
1 نقطة
-
احتاج مساعده، انا ابي اسوي داله لخصم التأمينات في حال ان الجنسيه سعوديه يخصم، وفي الجنسيه غير سعوديه تكون 0 وشكراً1 نقطة