اذهب إلى المحتوى

كل الأنشطة

تحدث تلقائيًا

  1. الساعة الماضية
  2. مرحبا سؤالي هل ممكن اخلي مشروع اللارافل يتصل باكثر من قاعدة بيانات وكيف أحقق هالشي؟؟
  3. الشرح عظيم جدا شكرا لك اخ علي
  4. اليوم
  5. كمبرمجين، لا بدّ وأننا تعرضنا لهذه المشكلة، ولا مناص منها، فلا داعي للقلق، ففي الأساس الأصل ليس في حفظ الأكواد البرمجية إنما في فهمها والمداومة على العمل، وعندما تتعلم لغة برمجة جديدة مثل Python، خصوصا في البداية فمن البديهي أن تنسى، فالبرمجة تتطلب ممارسة مستمرة وتعرضا دوريا للمفاهيم لترسيخها بشكل جيد في الذاكرة. كنصائح يمكن تقديمها، هو أن لا يكون هدفك الأساسي هو حفظ ما تتعلمه، فالمراجع والتوثيقات ما أنشئت إلا لهذا الأمر، لنرجع إليها في وقت الحاجة، ولا يمكن استظهارها عن ظهر قلب، فالتحديثات التقنية والبرمجية لا حصر لها فكيف يحصي المرء كل شاردة وواردة. ما ساعدني شخصيا على الفهم والترسيخ هو استخدام طريقة التعليم العكسي، أي أن تحاول أن تشرح ما تعلمته لشخص آخر فالتعليم يعزز الفهم ويساعد في ترسيخ المعلومات في الذهن بشكل جيد. يمكنك الاستفادة أكثر من هنا ومن الإجابات على هذا السؤال:
  6. تحياتي , شكرا لاهتمامك , حسنا اخي الكريم هل امكنك رؤية ملفات المشروع , انا اقوم باعداد الاتصال بين قاعدة البيانات على جهازي والمشروع , لكنني اريد ان اعرف هل هنالك خطأ ما في هيكلة المشروع او عند ارسال البيانات الى قاعدة البيانات, مثلا يوجد لدي صفحة ال register والكود الخاص بها (أعني كود ال php) يوجد في ملف اخر اسمه welcome2.php وعند ارسال البيانات لا تضاف البيانات الى قاعدة البيانات . هل هذا الترتيب خاطئ ام انه يعمل اذا كان الاتصال بقاعدة البيانات صحيح. سؤالي هنا اخي الكريم بحكم خبرتك , هل المشروع كامل منطقيا ويجب علينا فقط التاكيد على الربط الصحيح بين المشروع وقاعدة البيانات , ام هنالك امر ما خاطئ او ناقص يحب علينا مراعاته , انا اعمل الى الان على الربط بين القاعدة والمشروع . وشكرا مرة اخرى على وقتك.
  7. الخدمات المصغرة هي نمط من الهندسة البرمجية يقسم التطبيقات إلى مجموعة صغيرة من الخدمات المستقلة، كل منها تعمل في عملية مستقلة وتتواصل مع بعضها البعض باستخدام واجهات برمجة التطبيقات الخفيفة والموحدة (APIs) بحيث كل خدمة تركز على تنفيذ مهمة محددة وتمتلك قاعدة بياناتها الخاصة بها، مما يتيح لها أن تكون مستقلة في التطوير، النشر، والتشغيل. لا توجد برامج بعينها تقدم هذه الخدمة، لكن توجد برامج وأدوات تدعم التطوير بهذه التقنية ك: Docker: يوفر حاويات خفيفة لتشغيل الخدمات المصغرة بشكل معزول ومستقل. Kubernetes: نظام لأتمتة نشر، توسيع نطاق، وإدارة تطبيقات الحاويات، مثالي لإدارة تطبيقات الخدمات المصغرة على نطاق واسع. Istio: خدمة ليست مفتوحة المصدر توفر طريقة سهلة لإدارة الشبكات المعقدة للخدمات المصغرة مع توفير المصادقة، الرصد، والسياسات المركزية. Spring Boot: إطار عمل شهير لتطوير الخدمات المصغرة باستخدام Java. العديد من الفوائد يمكن استخلاصها من التطوير بالخدمات المصغرة كالتوسع والمرونة حيث يمكن توسيع كل خدمة بشكل مستقل دون الحاجة إلى توسيع التطبيق بأكمله، مما يسهل التعامل مع الأحمال المتزايدة بكفاءة، كما أن كل فريق يمكن أن يعمل على خدمة مختلفة باستخدام الأدوات واللغات التي تناسب تلك الخدمة بشكل أفضل، مما يزيد من سرعة التطوير وجودته، فالخدمات المصغرة حقيقة تسهل عملية الصيانة والتحديثات المستمرة لأن التغييرات في خدمة واحدة لا تؤثر على الخدمات الأخرى وفشل خدمة واحدة لا يؤدي بالضرورة إلى تعطل النظام بأكمله، مما يعزز من استقرار النظام وكنتيجة فنظرا لاستقلالية الخدمات، يمكن نشر كل خدمة بشكل مستقل مما يسهل عمليات التسليم والنشر المستمر (CI/CD). يمكنك الاطلاع أكثر من هنا:
  8. معدل الوصول أو "Rate Limiter" في تطبيقات الويب يستخدم للحد من معدل الطلبات التي يمكن أن يرسلها المستخدم أو النظام خلال فترة زمنية محددة، هذا الأمر يساعد في الحماية ضد الهجمات التي تحاول إغراق النظام بالطلبات (مثل هجمات DDoS) ويضمن توزيع الموارد بشكل عادل بين المستخدمين. ففي الشيفرة المقدمة في الصورة الأولى تظهر تعريف الحد الأقصى العالمي للطلبات حيث لا يمكن لأي مستخدم إرسال أكثر من 1000 طلب في الدقيقة الواحدة. use Illuminate\Support\Facades\RateLimiter; use Illuminate\Http\Request; /** * Bootstrap any application services. */ protected function boot(): void { RateLimiter::for('global', function (Request $request) { return Limit::perMinute(1000); }); } فهذا الجزء RateLimiter::for('global', ...) يعرف حدّا للطلبات ينطبق على جميع المستخدمين بينما هنا function (Request $request) { return Limit::perMinute(1000); } تحدد هذه الوظيفة أنه يمكن إجراء ما يصل إلى 1000 طلب في الدقيقة من أي مستخدم أو IP. في الصورة الثانية، يتم تحديد الحد الأقصى للطلبات على مستوى واجهة برمجة التطبيقات (API)، حيث يتم السماح بـ 60 طلب في الدقيقة الواحدة لكل مستخدم لكنه هنا يعتمد على وجود المستخدم المسجل فذا كان الطلب يأتي من مستخدم مسجل (أي لديه معرف)، فسيستخدم المعرف كمفتاح لمعدل الطلبات؛ وإذا كان الطلب غير مرتبط بمستخدم مسجل، يستخدم عنوان IP للمستخدم كمفتاح. RateLimiter::for('api', ...) يعرف حدا للطلبات خاص بواجهة برمجة التطبيقات. function (Request $request) { ... } تحدد هذه الوظيفة الحد الأقصى للطلبات لكل مستخدم. $request->user()?->id ?: $request->ip() هذا التعبير يقرر مفتاح الحد للطلبات: إذا كان هناك مستخدم مسجل ($request->user()?->id)، يستخدم عرف المستخدم كمفتاح. إذا لم يكن هناك مستخدم مسجل، يستخدم عنوان IP للمستخدم كمفتاح. ?: هو مشغل ثلاثي يعود بالقيمة الأولى إذا كانت غير null، وإلا يعود بالقيمة الثانية.
  9. بما أنك تعاملت مع هذا الموضوع من قبل، فالأمر يشبهه من حيث ترتيب الخطوات، فأنت تعاملت مع المصفوفة array والتي كان بمثابة قواعد البيانات التي تخزن فيها البيانات وتسترجعها، نفس الخطوات ستقوم بها ولكن مع بعض التفاصيل. ومن الأشياء الهامة التي يجب وضعها في الاعتبار، أنه من أنجح الطرق للربط بين الواجهة الأمامية Frontend والواجهة الخلفية Backend هو باستخدام الواجهات البرمجية APIs التي يتم إنشاؤها بالواجهة الخلفية، واستدعاؤها بالواجهة الأمامية. أولاً: إنشاء واجهة برمجية للاتصال بقاعدة البيانات: للتعامل مع أي قواعد بيانات لابد من إنشاء اتصال بها، يمكنك استخدام معلومات الاتصال (مثل اسم المستخدم وكلمة المرور واسم قاعدة البيانات) للاتصال بقاعدة البيانات. قم بفحص الاستجابة العائدة من الواجهة البرمجية للتأكد من نجاح الاتصال. العمليات الأساسية (CRUD): يتم إنشاء واجهة برمجية لكل عملية مثل: واجهة برمجية لإنشاء مستخدم جديد، وهذه يتم استدعاؤها من صفحة Register وتقوم بإضافة مستخدم جديد للجدول باستخدام الأمر insert واجهة برمجية لدخول المستخدم: نعطيها اسم المستخدم وكلمة المرور، وهي تستعلم عن هذه البيانات باستخدام الأمر select وهكذا يتم إنشاء الواجهات البرمجية APIs المطلوبة، واستدعاؤها من الواجهة الأمامية. هذه بعض الإرشادات لخطوات التعامل مع قواعد البيانات، وبالتأكيد الأمر يحتاج إلى دراسة قواعد البيانات والأوامر الأساسية بها مثل insert, update, delete, select وكذلك معرفة بإنشاء الجداول عن طريق الأمر create table وأيضًا معرفة كيفية الاتصال بين الواجهة الخلفية مع قواعد البيانات. لمعرفة المزيد عن قواعد البيانات انقر هنا
  10. يتم تعريف الخدمات المصفغرة Microservices على أنها نوع من أنواع هيكلة المشاريع، يتم فيه تقسيم المشروع إلى عدة مشروعات صغيرة مستقلة تمامًا عن بعضها البعض، كل خدمة تعتبر فعليًا مشروعًا مستقلاً له فريق مستقل وقواعد بيانات مستقلة ويتم نشره ورفعه على الخادم بشكل مستقل، ويتم التواصل بين هذه الخدمات عن طريق بروتوكولات خفيفة الوزن لتبادل البيانات بينها حتى تكتمل المنظومة كلها. وهي تكنولوجيا ظهرت حديثًا إلى حد ما، وتحتاج خبرة عالية سواء من مهيكل المشروع Solution Architecture أو فرق العمل من المطورين، ومن ضمن فوائدها أنها تقوم بتقسيم المشروعات الضخمة إلى عدة مشاريع صغيرة مستقلة تمامًا عن بعضها وبالتالي يتم تطوير كل مشروع بفريق منفصل تمامًا دون الاعتماد على أي مشروع آخر مما يعطي مرونة في تطوير البرمجيات مقابل النظام الاعتيادي Monolithic. من خلال خبرتي، ورغم أن هذه الهيكلة فعليًا مفيدة جدًا في تقسيم المشروعات الضخمة وتسهيل العمل، إلا أنني عانيت في تجربتين مختلفتين استخدمت فيهما هذا النوع من الهيكلة، والمعانات كانت بسبب عدم خبرة فرق المطورين، لذلك لا تلجأ أبدًا لهذا النوع إلا بعد تدريب الفريق جيدًا. ملحوظة: النظام الاعتيادي كان يتم فيه تطوير النظام كاملاً في مشروع واحد كله مترابط وكل جزء فيه يعتمد على الأجزاء الأخرى. فإذا أردنا المقارنة بينهما، فنشبههما بمصنعين الأول: عبارة عن ورشة ضخمة فيها جميع الخدمات تحت هذه الورشة الثاني: يتم تقسيم مساحة الأرض إلى عدة مصانع صغيرة، كل منها له مدير وفريق حسابات ومخازنه الخاصة وإدارته المستقلة تمامًا عن باقي المصانع، ثم يتم رصف طرق بين هذه المصانع المصغرة لنقل المنتجات منها وإليها. بالتأكيد النوع الثاني فيه استقلالية رائعة، ولكن في المقابل يحتاج عملية تنظيم رهيبة بمعني الكلمة بين هذه المصانع المصغرة وإلا ستفشل المنظمة ككل بسبب عدم التنسيق الجيد، وهذا ما سيحدث إذا لم يتم الانتباه لهذه النقطة عند استخدام الخدمات المصغرة Microservices. كما ذكرنا، هي ليست خدمة تقدمها بعض البرامج، إنما هي نوعية لتطوير وهيكلة البرامج الضخمة، ويمكن تطويرها بأي لغة برمجة تدعم هذه الطريقة، مثل بايثون، جافا، سي شارب.
  11. ماهي Microservices وكيف تتجلى فائدها لفريق العمل البرمجي على موقع مثلا ؟؟ وماهي البرامج التي تقدم مثل هذه الخدمة شكرا...
  12. من الطبيعى أن يشعر الإنسان بصعوبة فى استرجاع المعلومات أو النسيان بعد فترة من الزمن إذا لم يتم استخدام هذه المعلومات سواء فى مشاريع أو حل تمارين بهذه المعلومات لتجنب النسيان يمكنك القيام بالأتى:- المراجعة جيدة جدا أثناء الدراسة ولتثبيت المفاهيم الأساسبية والضرورية فى بداية تعلمك. ولكن بما أنه تم المراجعة أكثر من مرة وتم استيعاب هذه المفاهيم وقمت بعملية التطبيق على هذه المفاهيم والدروس هذا يكفى البرمجة ليست لحفظ كل شئ ولكن تعلم واستيعاب المفاهيم الأساسية وحل المشكلات التى تواجهك بالذى تعلمته. معرفة عند مواجهة مشكلة معينة نستخدم الطريقة التى تعلمتها فى درس معين أو بمفهوم معين. التطبيق على فكرة معينة فى بالك بالذى تعلمته فهذا يثبت المعلومة. التطبيق وراء المدرب فى الدرس وقارن النتيجة الخاصة بك والنتيجة فى الدرس واستكشف الأخطاء الذى ستواجهك هذا سيساعد أيضا لتجنب الأخطاء فى المستقبل. عليك بالمراجعة المنتظمة على ما تعلمته من خلال تطبيق ما تتعلم فى مشروع عملى وتمارين وتحديات هذا سيساعدك كثير. فقط عليك مواصلة رحلة التعلم لا مشكلة فى ذلك مع استرجاع المعلومات السابقة من خلال التطبيقات. ويمكنك الإطلاع على الإجابات التالية
  13. صار اربع اشهر ادرس اساسيات python راجعت ثلاث مرات ونسه هل امر طبيعي يعني اتقدم بالتعلم ام هناك مشكلة
  14. كما يوضح الاسم ,فالمشكلة ليست بسبب الكود البرمجي , بل بسبب اتفاقيات , في هذه الحالة تم رفض المعاملة بسبب ان الحساب المستخدم لتلقي المال (حساب العمل :business account) كان مسجل في الجزائر بمجرد استخدام حساب امريكي مكانه تمت العملية بنجاح
  15. البارحة
  16. يمكن القيام بذلك عبر اضافة شرط تحقق من تساوي العنصر مع الرقم 2 وبعدها طباعة مجموع 2 و 5: my_list = [1,2,3,4] for x in my_list: if x ==2: print(x + 5) يمكن تعميم الكود على اي رقم تريده وجمع له اي رقم تريده عبر اضافة متغران وجعله بالشكل التالي : حيث تم المرور على عناصر الlist واختبار تساوي الرقم مع العنصر المطلوب وبعدها زيادة له الرقم المطلوب my_list = [1, 2, 3, 4] # طلب رقم من المستخدم user_number = int(input("أدخل رقمًا تريد ان تضيف عليه من القائمة: ")) # طلب رقم الذي تريد اضافته add_number = int(input("أدخل رقم الذي تريد اضافته: ")) for x in my_list: if x == user_number: print(x + add_number) وملاحظة مهمة ان طريقة المرور على العناصر بالطريقى التي استخدمها مصطفى في التعليق الشابق تعتبر اسرع ومفيدة في عدد العناصر الكبير لكن هذه الطريقة مناسبة للقراءة اكثر ويجب انت تعرف الطريقتين
  17. لا يوجد أمر كذلك، فجميع مجالات البرمجة مطلوبة، بالطبع هناك أفضلية لمجال عن آخر حسب طبيعة سوق العمل في الوقت الحالي والتي تتغير كل 5 سنوات مثلاً لكون المجال البرمجي يتطور بشكل مستمر وهناك أمور تغير من مساره. لذا عليك تعلم أساسيات البرمجة أولاً ثم تفقد المجال البرمجي الذي يوجد عليه طلب والخبرة المطلوبة للعمل به، والمهارات البرمجية اللازمة، ثم تضع خطة وتسعى جاهدًا للوصول لذلك الهدف في مدة زمنية معينة ولن تقل عن سنة أقل من ذلك لن يصح. ومواقع التوظيف الألمانية هي: https://www.stepstone.de https://www.monster.de https://www.xing.com https://de.linkedin.com وستجد تفصيل أكثر هنا:
  18. من المهم فهم الفرق بين "الصلة"(relevance) و"التشابه"(similarity). أن التشابه يتعلق بالتشابه في مطابقة الكلمات ، الا ان الصلة تتعلق بترابط الأفكار. يمكنك تحديد المحتوى القريب لغويا باستخدام الاستعلام على قاعدة بيانات متجهة(vector database)، ولكن تحديد المحتوى ذي الصلة واسترداده يتطلب أدوات أكثر تطورا. حيث البنية العامة لنظام الاسترجاع من الشكل التالي حيث يوجد فيه قاعدة بيانات متجهة يتم الاستعلام (query)عليها بواسطة حساب التشابه بين الاستعلام والمتجهات داخل قاعدة البيانات : فان من الاستراتيجيات المتبعة هي تقسيم الملفات الى اجزاء اصغر يمكن لنظام RAG تحديد التشابه بسرعة ودقة أكبر في أجزاء نصية أصغر منه في المستندات الكبيرة. في حين أن الأجزاء الأكبر يمكن أن تلتقط المزيد من السياق ، إلا أنها تجعل نسبة التشابه اقل فعالية وتتطلب المزيد من الوقت وتكاليف الحوسبة للمعالجة.لكن القطع الأصغر قد لا تلتقط السياق الضروري بالكامل وهذه هي مشكلتك يصعب تحديد الاجزاء ذات الصلة. في حال التقطيع كيف يمكنك التأكد من اختيار الجزء الصحيح؟ تعتمد فعالية استراتيجية التقطيع إلى حد كبير على جودة وهيكل هذه القطع اي لا يوجد طريقة لتقييم مدى جودتها سوى عن طريق مراجعة يدوية. يمكن التغلب على هذه القيود عن طريق اتباع احد الاستراتيجيتان ادخال أجزاء المتداخلة : هي طريقة لتحقيق التوازن بين كل من هذه القيود. من خلال تداخل الأجزاء ، من المحتمل أن يسترد الاستعلام بيانات كافية ذات صلة عبر متجهات متعددة من أجل إنشاء استجابة سياقية بشكل صحيح.لكن أحد القيود هو أن هذه الاستراتيجية تفترض أن جميع المعلومات التي يجب عليك استردادها يمكن العثور عليها في مستند واحد. إذا تم تقسيم السياق المطلوب عبر مستندات مختلفة متعددة، فقد تفشل وسوف تفكر في الاستفادة من الحلول مثل التسلسلات الهرمية للمستندات وهي الاستراتيجية الثانية. التدرجات الهرمية للمستندات: يعد التسلسل الهرمي للمستندات طريقة فعالة لتنظيم بياناتك لتحسين استرجاع المعلومات وتاخذ الشكل التالي. تربط التدرجات الهرمية للمستندات الأجزاء بالعقد، وتنظم العقد في العلاقات بين الأصل والابن. وتحتوي كل عقدة على ملخص للمعلومات الواردة فيها، مما يسرع نظام RAG ويعرفه بالأجزاء التي يجب استخراجها. مثال : لنفترض أن الشركة متعددة البلدان لديها 10 مكاتب للموارد البشرية وأن لكل مكتب سياسة الموارد البشرية الخاصة بكل بلد ، ولكنها تستخدم نفس النموذج لتوثيق هذه السياسات. ونتيجة لذلك، فإن وثيقة سياسة الموارد البشرية لكل مكتب لها نفس التنسيق تقريبا، ولكن كل قسم سيفصل السياسات الخاصة بكل بلد لقضاء العطلات الرسمية، والرعاية الصحية، وما إلى ذلك. في قاعدة بيانات المتجهات ، ستبدو كل فقرة "أيام العطل الرسمية" متشابهة جدا. في هذه الحالة ، يمكن للاستعلام المتجه استرداد الكثير من نفس البيانات غير المفيدة ، مما قد يؤدي إلى الضياع في الحالة العادية او في الاستراتيجية الاولى.لكن باستخدام التسلسل الهرمي للمستندات، يمكن لنظام RAG الإجابة بشكل أكثر موثوقية على سؤال حول العطلات الرسمية لمكتب دمشق من خلال البحث أولا عن المستندات ذات الصلة بمكتب دمشق. ملاحظة الاستراتيجية الثانية تتطلب خبرة اكثر في بنائها. وتتطلب خبرة خاصة بالمجال أو مشكلة محددة للإنشاء لضمان أن تكون الملخصات ذات صلة كاملة بالمهمة المطروحة. يمكن انشاء الملخصات يدويا او بواسطة ادوات ونماذج قد تساعد في عملية التلخيص
  19. ما هو المجال في البرمجة المفضل في الدول الأوروبية؟
  20. لأن result ستعود لنا بقائمة list وبها رقم 7 لذا نريد طباعة الرقم فقط وليس القائمة.
  21. my_list = [1,2,3,4] for x in my_list: if x == 2: print(x + 5) الكود صحيح سؤال لما وضعت result[0]
  22. بشكل بسيط سيكون الكود كالتالي: my_list = [1, 2, 3, 4] result = [x + 5 for x in my_list if x == 2] print(result[0]) حيث نضع شرط في حلقة التكرار عندما يتم تلبيته يتم الجمع.
  23. غير متوفر دورة للأمن السيبراني في أكاديمية حسوب، لكن في حال لم يكن لديك دراية بمجال البرمجة وعلوم الحاسوب، ستحتاج إلى دورة تأهيلية لمساعدتك على إختيار المجال المناسب لك ووضعك على أرض صلبة. وتلك الدورة هي علوم الحاسوب حيث يتم بها شرح ما يلي: أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة تطبيقات عملية على أساسيات التفكير المنطقي باستخدام بيئة سكراتش Scratch التفاعلية أساسيات لغة البرمجة JavaScript وتطبيق المفاهيم التي تم شرحها باستخدامها، والتوسع في شرح التطبيقات العملية للغات البرمجة أساسيات أنظمة التشغيل المختلفة وكيفية تثبيت البرمجيات اللازمة للبرمجة عليها أساسيات سطر الأوامر في نظام لينكس، وشرح الأسس التي بني عليها النظام مع تطبيقها عمليًا أنظمة قواعد البيانات المختلفة، مع شرح تفصيلي للغة SQL للتعامل معها مبادئ أساسية في أنظمة قواعد البيانات NoSQL المفاهيم الأساسية التي تبنى فيها صفحات الويب مفاهيم أساسية في الشبكات والخوادم، وكيف يتم استقبال الطلبيات إلى الخادم والرد عليها مبادئ الحماية والأمان في الويب وبالنسبة للأمن السيبراني فهو ليس بحاجة إلى تعلمك للغات برمجة لكن من الأفضل على الأقل تعلم لغة واحدة وهي بايثون، وإن كنت تنوي العمل على مشاريع في الويب فستحتاج إلى جافاسكريبت وأساسيات PHP. وستجد تفصيل أكثر هنا:
  24. السلام وعليكم my_list = [1,2,3,4] for x in my_list: print(x + 5) كيف اخذ فقط رقم 2 وجمعه مع 5 دون القائمه كاملة
  25. باطار جانغو كلما حاولت الدفع ببايبال , وبعد تسجيل معلومات المشتري عند الضغط علة "استكمال الشراء " تظهر لي هذه المشكلة مع العلم اني اضفت PAYPAL_RECEIVER_EMAIL ='sb-b8f9d30750293@business.example.com' PAYPAL_TEST =True في settings ايضا , هذه هي الدالة المسؤولة عن الform paypal_checkout = { 'business':settings.PAYPAL_RECEIVER_EMAIL, 'amount':200, 'item_name':'just trying', 'invoice': '113', 'currency_code' :'USD', # 'notify_url': f"https://{host}{reverse('paypal-ipn')}", # 'return': f"https://{host}{reverse('payment-success')}", # 'cancel': f"https://{host}{reverse('payment-failed')}", 'notify_url': f"{host}{reverse('paypal-ipn')}", 'return': f"{host}{reverse('payment-success')}", 'cancel': f"{host}{reverse('payment-failed')}", } paypal_form = PayPalPaymentsForm(initial=paypal_checkout) return render(request,'checkout.html',{'paypal':paypal_form})
  26. لو انا عايز اتخصص cybersecurity اشترك فى انهى كورس
  27. واريد ايضا اضافة المستخدمين في قاعدة البيانات من صفحة ال register
  1. عرض المزيد
×
×
  • أضف...