لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/27/21 في كل الموقع
-
فى الكلاس كومبونينت يمكننا انشاء دوال تعبر عن دورة حياة الcomponent, كيف يمكننا فعل شئ مثل هذا فى الfunctional component?2 نقاط
-
Public class B{ int num; public setNum(int n){ num=n; } public int getNum(){ return num; } } Public class A{ public B b; } ممكن تعريف كائن من الكلاس A واستدعاء دوال Bمن خلاله🤔 اريد معرفة طريقة لجعل ذلك ممكن2 نقاط
-
السلام عليكم ورحمة الله وبركاته لدي مشكلة في أن البيانات يتم ارسالها للقاعدة لكن بعد الارسال لا يتم تفريغ الفورم ما المشكلة في ذلك <form method="post" id="messages"> <textarea name="message" id="message" ></textarea> <INPUT type="submit" name="post" id="post" value="ارسال"> </form> <script> $(document).ready(function(e) { $("#messages").on('submit', function(e) { e.preventDefault(); $.ajax ({ type: 'POST', url: 'send.php', data: new FormData(this), dataType: 'json', contentType: false, cache: false, processData:false, success: function(response) { $('#messages')[0].reset(); } }); }); }); </script>2 نقاط
-
السلام عليكم لا استطيع ان اكمل رفع المشروع node - react على منصة هيركو , يظهر الخطأ و كأنه لا يجد الserver 021-08-27T19:16:25.395317+00:00 heroku[router]: at=info method=GET path="/" host=alishouaa-project.herokuapp.com request_id=b4b5fad5-a7d4-4416-94ae-7540d2c0c1f2 fwd="80.79.145.135" dyno=web.1 connect=0ms service=2ms status=404 bytes=544 protocol=https1 نقطة
-
مثلا اشتركت في دورة حسوب هل كل مسارات تصير مفتوحة ام واحدة1 نقطة
-
لقد قمت بتنشيط Virtualenv ثم قمت بتثبيت جانغو Django من خلال الأمر التالي: pip3 install Django و م تنزيل وتثبيت جانغو Django بنجاح. الآن أريد فتح مجلد جانغو Django (الحزمة نفسها). أين يقع هذا المجلد؟ وهل يمكنني إخيار مكان التثبيت في المستقبل؟1 نقطة
-
هل يمكن عمل passing لكلاس في الدالة؟ وكيف استدعيها في الmain1 نقطة
-
لاحظ أنه عند إنشاء علاقة بين نموذجين أننا نستعمل OneToOneField أو ForeignKey، ولكن ما هو الإختلاف بينهما؟ أليس كلاهما يقوم بعمل علاقة بين جدولين؟ وفي حالة وجود إختلاف، هل يمكن لأحدهما أن يقوم بعمل الآخر بطريقة مختلفة؟ أي هل يمكن أن يستبدل أحدهما الآخر؟1 نقطة
-
السلام عليكم عندي سؤال مهم وهو هل لديكم كورس عن Cyber Security؟ و شكرا1 نقطة
-
يمكنك أن تستخدم نفس الطريقة من خلال تمرير معامل ثالث إلى اللون، كالتالي: import pygame def draw_rect_alpha(surface, color, rect): shape_surf = pygame.Surface(pygame.Rect(rect).size, pygame.SRCALPHA) pygame.draw.rect(shape_surf, color, shape_surf.get_rect()) surface.blit(shape_surf, rect) def draw_circle_alpha(surface, color, center, radius): target_rect = pygame.Rect(center, (0, 0)).inflate((radius * 2, radius * 2)) shape_surf = pygame.Surface(target_rect.size, pygame.SRCALPHA) pygame.draw.circle(shape_surf, color, (radius, radius), radius) surface.blit(shape_surf, target_rect) def draw_polygon_alpha(surface, color, points): lx, ly = zip(*points) min_x, min_y, max_x, max_y = min(lx), min(ly), max(lx), max(ly) target_rect = pygame.Rect(min_x, min_y, max_x - min_x, max_y - min_y) shape_surf = pygame.Surface(target_rect.size, pygame.SRCALPHA) pygame.draw.polygon(shape_surf, color, [(x - min_x, y - min_y) for x, y in points]) surface.blit(shape_surf, target_rect) pygame.init() window = pygame.display.set_mode((250, 250)) window.fill((255, 255, 255)) # نقوم بتحديد الألوان هنا # يمكنك تغير رقم 127 لكي تغير الشفافية YELLOW = (255, 255, 0, 127) BLUE = (0, 0, 255, 127) RED = (255, 0, 0, 127) draw_rect_alpha(window, BLUE, (55, 90, 140, 140)) draw_circle_alpha(window, RED, (150, 100), 80) draw_polygon_alpha(window, YELLOW, [(100, 10), (100 + 0.8660 * 90, 145), (100 - 0.8660 * 90, 145)]) في الكود السابق ثلاث دوال كل منها تقوم برسم شكل معين، وتأخذ إحداثيات مكانه ولونه وحجمه.1 نقطة
-
قمت بتدريب نموذجي وأريد حفظ نتائج ال loss وال accuracy التي تمت خلال التدريب كيف نقوم بذلك: history = model.fit(X_train, y_train, batch_size=32, nb_epoch=10, validation_data=(X_test, y_test))1 نقطة
-
يمكنك أن تتحكم في الشفافية الخاصة بلون أي خط من خلال تمرير قيمة Alpha كعنصر ثالث عند كتابة لون الخط، كالتالي: import pygame pygame.init() # تحديد خصائص النافذة size = [600, 600] screen = pygame.display.set_mode(size) screen.fill((255, 255, 255)) vertical_line = pygame.Surface((100, 600), pygame.SRCALPHA) vertical_line.fill((0, 0, 255, 50)) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255 screen.blit(vertical_line, (0, 0)) horizontal_line = pygame.Surface((600, 100), pygame.SRCALPHA) horizontal_line.fill((255, 0, 0, 50)) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255 screen.blit(horizontal_line, (0, 0)) يقوم الكود السابق بعمل خطين أحدهما أحمر والثاني أزرق وعندما يتلاقى الخطين (في أعلى اليسار) ستجد مربع لونه بنفسجي، كما في الصورة: أو يمكنك أن تستعمل التابع set_alpha أيضًا للحصول على نفس النتيجة كالتالي: vertical_line = pygame.Surface((100, 600), pygame.SRCALPHA) vertical_line.set_alpha(50) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255 vertical_line.fill((0, 0, 255)) screen.blit(vertical_line, (0, 0)) horizontal_line = pygame.Surface((600, 100), pygame.SRCALPHA) horizontal_line.set_alpha(50) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255 horizontal_line.fill((255, 0, 0)) screen.blit(horizontal_line, (0, 0)) الأمثلة السابقة للتوضيح وبالتأكيد سوف تحتاج إلى حلقة لكي لا تغلق النافذة تلقائيًا. اذا اردت ان افعل نفس الشئ بالنسبه لدائرة او مثلث ماذا أفعل؟1 نقطة
-
قمت بعمل تطبيق باستخدام flutter واستعملت فيه تسجيل الدخول باستخدام firebase عن طريق ال phone number واشتغل مية مية، لكن عند الرفع على المتجر Google Play لم يعد يعمل، توصلت إلى أن التطبيق عند رفعه على المتجر، يتم تغيير ال sha1 هل هذا صحيح؟ وإن كان نعم، كيف أحصل عليه حتى أستطيع إضافته إلى ال firebase console حتى يعمل التطبيق؟1 نقطة
-
انتقلت ل Play App Signing page (Release > Setup > App integrity).1 نقطة
-
أظن أني وجدت هذا الحل على stackoverflow لكن شكل الموقع ( Google Play Console ) يبدو أنه قد تغير، بحيث لا تظهر معي Release Management1 نقطة
-
كلا لايتغير SH1 إنما عليك إضافة المفتاح لديك و مفاتيح التشفير في google play console.. تابع هذا الحل:1 نقطة
-
1 نقطة
-
related_name أمر لا بد منه في حالة وجود اثنين ForeignKey في النموذج الذي يشير إلى نفس الجدول. على سبيل المثال في حالة فاتورة المواد @with_author class BOM(models.Model): name = models.CharField(max_length=200,null=True, blank=True) description = models.TextField(null=True, blank=True) tomaterial = models.ForeignKey(Material, related_name = 'tomaterial') frommaterial = models.ForeignKey(Material, related_name = 'frommaterial') creation_time = models.DateTimeField(auto_now_add=True, blank=True) quantity = models.DecimalField(max_digits=19, decimal_places=10) لذلك عندما يتعين عليك الوصول إلى هذه البيانات ، يمكنك فقط استخدام related_name bom = material.tomaterial.all().order_by('-creation_time')1 نقطة
-
لا غير مؤهلة لسوق العمل,ولكنها لا تقل أهمية عن باقي الدورات, تعبتر حجر الأساس لعالم البرمجة بشكل خاص والحاسوب بشكل عام, لذلك اذا كانت مهارتك ضعيفة في التعامل مع الحاسوب وأنظمته ولا تمتلك أي أفكار عن البرمجة فيجب أن تكون أول دورة تشترك فيها, لأنها كما قلت حجر الأساس لباقي الدورات وسوف تجعل الامر أسهل وأبسط بكثير1 نقطة
-
import 'package:flutter/material.dart'; import 'package:logindesign/modules/archivedtask.dart'; import 'package:logindesign/modules/donetask.dart'; import 'package:logindesign/modules/newtask.dart'; import 'package:sqflite/sqflite.dart'; class HomeLayot extends StatefulWidget { @override _HomeLayotState createState() => _HomeLayotState(); } class _HomeLayotState extends State<HomeLayot> { int currentIndex = 0; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { List<Widget> screen = [ NewTasks(), DoneTasks(), ArchiveTasks(), ]; List<String> title = ['Tasks', 'Done Tasks', 'Archived Tasks']; var ScaffoldKey=GlobalKey<ScaffoldState>(); bool isBottomSheetShown=false; IconData fabIcon=Icons.edit; return Scaffold( key: ScaffoldKey, appBar: AppBar( title: Text(title[currentIndex]), ), body: screen[currentIndex], floatingActionButton: FloatingActionButton( child: Icon(fabIcon), onPressed: () { if(isBottomSheetShown){ Navigator.pop(context); isBottomSheetShown=false; setState(() { fabIcon=Icons.edit; }); } else{ ScaffoldKey.currentState?.showBottomSheet((context) { return Container( width: double.infinity, height: 120.0, color: Colors.amber, ); }); isBottomSheetShown=true; setState(() { fabIcon=Icons.add; }); }}, ), bottomNavigationBar: BottomNavigationBar( type: BottomNavigationBarType.fixed, //elevation:0 , showSelectedLabels: false, // backgroundColor: Colors.blue, currentIndex: currentIndex, onTap: (index) { setState(() { currentIndex = index; }); print(index); }, items: [ BottomNavigationBarItem( icon: Icon(Icons.menu), label: 'Tasks', ), BottomNavigationBarItem( icon: Icon(Icons.check_circle_outline), label: 'Done'), BottomNavigationBarItem( icon: Icon(Icons.archive_outlined), label: 'Archived'), ], ), ); } هذا الكود يجب ظهور Bottomsheet عند النقر علئ floatactionbutton ,وتتغير الأيقونة أيضًا لكنها لاتعمل ..لماذا1 نقطة
-
لا أجد أي أخطاء في الكود, حاول استخدام Dom في تحديد العنصر كالتالي document.getElementById("messages").reset(); أو حاول استخدام trigger كالتالي $('messages').trigger("reset");1 نقطة
-
مرحبا , لقد تعلمت useCallback, and useMemo hooks واعلم كيف استخدمهم ولكن لا افهم ما الفرق بينهما1 نقطة
-
useCallback تفيدك في حالة كنت تريد المحافظة على مرجعية دالة تريد انشائها داخل الدالة render في المكون (أو داخل دالة المكون في حال لم يكن مكون صف) // كل مرة ينفذ فيها هذا السطر ينشئ تابع جديد const myFunction = () => {/*...*/} return ( <div> {/* سيتلقى المكون التالي في كل مرة تابع جديد ولن يستطيع معرفةاذا كنت تمرر نفس التابع دومًا */} <OtherComponent callback={myFunction} /> </div> ) // عند أول تنفيذ لهذا السطر فقط سيتم انشاء تابع جديد // والمرات القادمة سيعيد التابع التابع الأول نفسه const myFunction = useCallback(() => {/*...*/} ,[]) return ( <div> {/* سيتلقى المكون التالي نفس التابع في كل مرة */} <OtherComponent callback={myFunction} /> </div> ) useMemo تفيدك في حال كان لديك عملية حسابية تستهلك وقتا أو موارد تقوم الدالة بتنفيذ العملية فقط عند تغير المتحولات في المصفوفة الممرة لها (أو لا تقوم أبدا بإعادة تنفيذ العملية في حال لم تمرر قيم للمصفوفة) // كل مرة ينفذ فيها هذا السطر سنعيد تنفيذ نفس التابع لحساب النتيجة const value = veryExpensiveCalculation(); return ( <div>{value}</div> ) // عند أول تنفيذ فقط لهذا السطر سيتم حساب القيمة // والمرات القادمة سيعيد نفس الناتج بسرعة دوما const myFunction = useMemo(() => veryExpensiveCalculation(),[]) return ( <div>{value}</div> ) يمكن أيضا استخدام useMemo بطريقة تعمل عمل useCallback (فقط لفهم أوسع لكن حاول استخدام useCallback بدلا عن الطريقة التالية) // عند أول تنفيذ فقط لهذا السطر سيتم انشاء دالة جديدة // والمرات القادمة سيعيد نفس الدالة السابقة وبنفس المرجع const myFunction = useMemo(() => { return () => {/*...*/} },[]) return ( <div> {/* سيتلقى المكون التالي نفس التابع في كل مرة */} <OtherComponent callback={myFunction} /> </div> )1 نقطة
-
في react عندما تنشئ function وتمررها الى child component , ففى كل مرة تتغير حالة الparent component ويحدث re-render نجد أن الجافاسكريبت تتعامل وقتها مع الcallback function ع أنها دالة جديدة فيحدث re-render للchild component ,هنا حدثت عملية render اضافية بلا فائدة مما يؤثر سلبا على الاداء,إذا ما الحل؟ الحل أن نقم بعملية memoization للدالة الممررة للchild component حتى تتعامل معها الجافاسكريبت كل مرة ع أنها نفس الدالة مالم يحدث لها تغيير وبهذا نكون عالجنا مشكلة الrender الاضافي مما يحسن الأداء مثال: function Parent({ ... }) { const [a, setA] = useState(0); const onPureChange = useCallback(() => {doSomething();}, []); ... return ( ... <Pure onChange={onPureChange} /> ); } في هذا المثال عندما تتغير قيمة a يحدث render لل parent component وال Child component بينما إذا قمنا باستخدام الuseCallback على هذا الوجه في المثال الادنى: const [a, setA] = useState(0); const onPureChange = useCallback(() => {doSomething();} لا يحدث render لل child component عند تغيير قيمة الa اما بالنسبة لل useMemo فإنها تقم ايضا بعملية memoization ولكن ليس للدالة نفسها وانما للناتج , ويستخدم عندما يكون لدينا دالة تقم بعمليات حسابية طويلة وتستهلك موارد وأداء وفى نفس الوقت لا يتغير ناتج الدالة كثيرا, في هذه الحالة يكن الحل الامثل ان نخزن الناتج فى useMemo hook حتى لا يحدث render اضافى عند تمرير الدالة وفى نفس الوقت لا نحتاج لنداء نفس الدالة كل مرة يحتاجها الchild component لأن ببساطة ناتج الدالة مخزن بالفعل فلو قمنا باستخدام useMemo عوضا عن useCallback فى المثال السابق,فاننا لسنا فقط نخزن الreference الخاص بالدالة انما ايضا نقم بتخزين ناتج الدالة فلا نحتاج لاستدعائها1 نقطة
-
القسم هو صف من خصائصه المدير والموظفين والعمال داخله، يمكن للصف نفسه التصريح فيما إذا كان يمكن مشاركة العمال مع قسم آخر class Department { // ... public Manager manager; public Employee[] employees; public Worker[] workers; // ... public Boolean canShareWorkersWith(Department otherDepartment) { // بالاعتماد على قواعد مشاركة العمال } // Setters and Getters... } // نستعلم عن امكانية المشاركة if(department.canShareWorkersWith(otherDepartment)){ otherDepartment.setWorkers(department.workers); // تعيين عمال قسم في آخر } باقي الصفوف من مدراء و موظفين و عمال لن تحتاج إلى الوراثة من صف القسم1 نقطة
-
يمكنك أن تتحكم في الشفافية الخاصة بلون أي خط من خلال تمرير قيمة Alpha كعنصر ثالث عند كتابة لون الخط، كالتالي: import pygame pygame.init() # تحديد خصائص النافذة size = [600, 600] screen = pygame.display.set_mode(size) screen.fill((255, 255, 255)) vertical_line = pygame.Surface((100, 600), pygame.SRCALPHA) vertical_line.fill((0, 0, 255, 50)) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255 screen.blit(vertical_line, (0, 0)) horizontal_line = pygame.Surface((600, 100), pygame.SRCALPHA) horizontal_line.fill((255, 0, 0, 50)) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255 screen.blit(horizontal_line, (0, 0)) يقوم الكود السابق بعمل خطين أحدهما أحمر والثاني أزرق وعندما يتلاقى الخطين (في أعلى اليسار) ستجد مربع لونه بنفسجي، كما في الصورة: أو يمكنك أن تستعمل التابع set_alpha أيضًا للحصول على نفس النتيجة كالتالي: vertical_line = pygame.Surface((100, 600), pygame.SRCALPHA) vertical_line.set_alpha(50) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255 vertical_line.fill((0, 0, 255)) screen.blit(vertical_line, (0, 0)) horizontal_line = pygame.Surface((600, 100), pygame.SRCALPHA) horizontal_line.set_alpha(50) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255 horizontal_line.fill((255, 0, 0)) screen.blit(horizontal_line, (0, 0)) الأمثلة السابقة للتوضيح وبالتأكيد سوف تحتاج إلى حلقة لكي لا تغلق النافذة تلقائيًا. مكتبة Pygame ليست معدة لعمل تطبيقات أندرويد بل لعمل الألعاب البسيطة على أنظمة التشغيل الخاصة بالحسوب مثل Windows و Linux و MacOS، كما أنه لا ينصح إستعمال لغة Python على العموم في عمل تطبيقات الهاتف، حيث أن هناك تقنيات أخرى أفصل وأسهل ومعدة خصيصًا لهذا الأمر مثل Flutter أو React Native أو حتى إستعمال لغات مثل Java و Swift لعمل تطبيقات أندرويد و iOS ، لكن هذا لا يمنع أنه يمكن إستخدام لغة بايثون لعمل تطبيقات الأندرويد، حيث يمكن إستعمال مكتبات مثل Kivy (التي تدعم شاشات اللمس، وتعدد الأصابع على الشاشة) لعمل تطبيقات أندرويد. نعم، يمكنك أن تستعمل مكتبات مثل arabic-reshaper للكتابة باللغة العربية في نافذة Pygame، أولًا يجب أن تقوم بتثبيت المكتبة عبر الأمر التالي: pip install --upgrade arabic-reshaper وإن كنت تستعمل anaconda فيمكنك أن تستعمل الأمر: conda install -c mpcabd arabic-reshaper بعد تثبيت المكتبة يجب أن تقوم بتثبيت حزمة python-bidi أيضًا من خلال الأمر التالي: pip install python-bidi وأخيرًا ستحتاج إلى خط يدعم العربية مثل خط Cairo ويمكنك تحميله من خلال خطوط جوجل من هنا، وفي النهاية يجب أن تقوم بتمرير النص إلى التابع reshape من مكتبة arabic-reshaper ثم يجب تمرير النتيجة إلى الدالة get_display من حزمة python-bidi وأخيرًا تستطيع عرض النص في النافذة: import pygame import arabic_reshaper from bidi.algorithm import get_display pygame.display.init() pygame.font.init() win = pygame.display.set_mode((500, 500)) font = pygame.font.Font('Cairo-Regular.ttf', 20) # اسم ومسار الخط وحجم الخط # هنا النص الذي ترغب بعرضه text_to_be_reshaped = 'نص باللغة العربية' # عملية تحويل النص reshaped_text = arabic_reshaper.reshape(text_to_be_reshaped) bidi_text = get_display(reshaped_text) print(reshaped_text) text = font.render(bidi_text, True, (255, 255, 255)) win.fill((0, 0, 0)) win.blit(text, (0, 0)) النتيجة:1 نقطة
-
تقوم الخاصية related_name بتحديد اسم العلاقة العكسية بين النموذج Answer و النموذج Question، وإذا لم تقم بتحديد هذه الخاصية سوف يقوم Django بتوليد اسم من خلال إضافة _set إلى اسم النموذج لتصبح النتيجة Answer.question_set على سبيل المثال، إذا كان لديك كائن مستخدم first_answer، فيمكنك استخدام first_answer.questions.all () للحصول على جميع مثيلات نموذج السؤال التي لها علاقة بالسؤال الأول. بالطبع بإمكانك إستخدامه بعده أشكال كعادة باقي العلاقات العادية: q = answer.questions.all().order_by('-creation_time')1 نقطة
-
في لغة SQL يُعد هذا هو السلوك الذي يجب اعتماده عند حذف الكائن المشار إليه. وهذه ليست خاصة في Django نفسه. بل هو جزء من SQL. يتم استخدام on_delete لإخبار Django بما يجب فعله مع النموذج التي تعتمد على كائنات أخرى الذي قمت بحذفه. (على سبيل المثال، علاقة ForeignKey)، مثلًا المنشور الواحد في مدونة ما قد يكون له علاقة ForeignKey مع جدول comments لعرض التعليقات الخاصة بمنشور معين، وهذه الخاصية هي التي تحدد ما الذي سيحدث في حالة حذف المنشور، هل سيتم حذف التعليقات أم إبقائها أم ربما تريد إظهار خطأ يمنعك من حذف أي منشور لديه تعليقات عن طريق الخطأ. وهناك سبعة إجراءات يمكن اتخاذها عند وقوع مثل هذا الحدث (أي عند حذف كائن من جدول ما): CASCADE: عند حذف الكائن المشار إليه، احذف أيضًا الكائنات التي لها مراجع (عندما تقوم بإزالة منشور من مدونة ما على سبيل المثال، قد ترغب في حذف التعليقات الخاصة بهذا المنشور أيضًا).في لغة SQL يتم إستعمال كلمة CASCADE PROTECT: منع حذف الكائن المشار إليه (إن كان هناك أي إشارات له من كائنات أخرى). ولحذفه، سيتعين عليك حذف جميع الكائنات التي تشير إليه يدويًا، في لغة SQL يتم إستعمال كلمة RESTRICT RESTRICT: (تم إضافتها في الإصدار 3.1 من Django)، تشبه الخيار السابق، ولكنها تتبع معيار لغة SQL بشكل أدق، وفي حالة حدوث خطأ يتم عرض خطأ من نوع RestrictedError ، بخلاف PROTECT، تسمح بحذف الكائن المشار إليه إذا كان يشير أيضًا إلى كائن مختلف يتم حذفه في نفس العملية، ولكن عبر علاقة CASCADE. SET_NULL: يتم تعيّن المرجع إلى NULL (يتطلب أن يكون الحقل nullable أي أن قيمة null تساوي True). على سبيل المثال، عندما تحذف مستخدمًا، قد ترغب في الاحتفاظ بالتعليقات التي نشرها في منشورات المدونة، ويتم عرض التعليقات من قِبل مستخدم مجهول أو تم حذفه. في لغة SQL يتم إستعمال كلمة SET NULL SET_DEFAULT: يقوم بتعيين القيمة الافتراضية default. في لغة SQL يتم إستعمال كلمة SET DEFAULT SET(): تقوم بتعيين قيمة معينة. هذا ليس جزءًا من معيار SQL ويتم التعامل معه بالكامل بواسطة Django فقط، وهنا مثال لكيفية إستخدامها من توثيق Django الرسمي: from django.conf import settings from django.contrib.auth import get_user_model from django.db import models def get_sentinel_user(): return get_user_model().objects.get_or_create(username='deleted')[0] class MyModel(models.Model): user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user), ) DO_NOTHING: يتم إستخدامها للإشارة إلى كائن غير موجود بالفعل، وقد تسبب الكثير من المشاكل في قاعدة البيانات مما ينتج عنه مشاكل وأخطاء تظهر للمستخدمين، في لغة SQL يتم إستعمال NO ACTION يمكنك الوصول إلى توثيق كل الخيارات السابقة في وثائق Django من هنا. في أغلب الحالات، CASCADE هو الخيار الأكثر إستخدامًا، ولكن بالنسبة لكل مفتاح ForeignKey، يجب أن تسأل نفسك دائمًا ما هو السلوك المتوقع في هذا الموقف. أحيانًا ما يكون PROTECT و SET_NULL مفيدًا في بعض الحالات. تحتوي الأكاديمية على مقالة (النماذج Models والاستعلام عن البيانات في Django) تمكنك من تجهيز وإعداد نماذج في Django وتتضمن أيضًا عمل علاقة ForeignKey بين النماذج.1 نقطة
-
يمكنك استخدام celery لتنفيذ المطلوب pip install -U Celery لاستدعاء مهمة بشكل دوري ، يجب عليك إضافة إدخال إلى قائمة beat schedule. from celery import Celery from celery.schedules import crontab app = Celery() @app.on_after_configure.connect def setup_periodic_tasks(sender, **kwargs): # Calls test('hello') every 10 seconds. sender.add_periodic_task(10.0, test.s('hello'), name='add every 10') # Calls test('world') every 30 seconds sender.add_periodic_task(30.0, test.s('world'), expires=10) # Executes every Monday morning at 7:30 a.m. sender.add_periodic_task( crontab(hour=7, minute=30, day_of_week=1), test.s('Happy Mondays!'), ) @app.task def test(arg): print(arg) @app.task def add(x, y): z = x + y print(z) يمكنك الجدولة كل يوم اثنين مثلا from celery.schedules import crontab app.conf.beat_schedule = { # Executes every Monday morning at 7:30 a.m. 'add-every-monday-morning': { 'task': 'tasks.add', 'schedule': crontab(hour=7, minute=30, day_of_week=1), 'args': (16, 16), }, }1 نقطة
-
بالإضافة لما تم شرحه في التعليق السابق يمكنك استخدام مكتبة مثل APScheduler حيث تسهل عليك عمل مثل هذه المهام لاحظ المثال التالي from apscheduler.schedulers.background import BackgroundScheduler scheduler = BackgroundScheduler() job = None def tick(): print('One tick!')\ def start_job(): global job job = scheduler.add_job(tick, 'interval', seconds=3600) try: scheduler.start() except: pass1 نقطة
-
هنا حل آخر يغطي حالة ال use-case، عند استخدام RunPython. يمكنك الوصول إلى جدول ال ORM من خلال: from django.db.migrations.recorder import MigrationRecorder MigrationRecorder.Migration.objects.all() MigrationRecorder.Migration.objects.latest('id') MigrationRecorder.Migration.objects.latest('id').delete() وبالتالي يمكنك الاستعلام عن الجداول وحذف ماتريده. وبهذه الطريقة يمكنك التعديل بالتفصيل. تحتاج أيضاً في عمليات ترحيل RynPython، إلى الاهتمام بالبيانات التي تمت إضافتها أو تغييرها أو إزالتها.1 نقطة
-
يمكنك القيام بذلك كالتالي: أولاً إنشاء " custom management command " ، على سبيل المثال: python manage.py my_cool_command واستخدم cron على Linux أو at على Windows لتشغيل الأمر الخاص بك في الوقت الذي تحتاجه.ويعمل حل cron بشكل جيد جداً مع التطبيقات الصغيرة والمتوسطة الحجم وحيث لا تريد الكثير من التبعيات الخارجية. وهو حل بسيط لا يتطلب تثبيت مكدس AMQP. أيضاً يمكنك استخدام Celery وهو عبارة عن قائمة انتظار مهام موزعة ، مبنية على AMQP (RabbitMQ). كما أنه يتعامل مع المهام الدورية بطريقة تشبه كرون. ومن السهل جداً إعداد Celery باستخدام django ، وستتخطى المهام الدورية فعلياً المهام الفائتة في حالة حدوث تعطل. يحتوي Celery أيضاً على آليات إعادة المحاولة المضمنة، في حالة فشل المهمة.1 نقطة
-
يمكنك التراجع عبر التهجير الى التهجير السابق على سبيل المثال ، إذا كان آخر تهجيرين لك هما: 0010_previous_migration 0011_migration_to_revert ثم ستقوم بتنفيذ: ./manage.py migrate my_app 0010_previous_migration لا تحتاج فعليًا إلى استخدام اسم التهجير الكامل ، فالرقم كافٍ ، أي ./manage.py migrate my_app 0010 ثم بعد ذلك يمكنك حذف التهجير 0011_migration_to_revert. إذا كنت تستخدم Django 1.8 ومافوق ، فيمكنك إظهار أسماء جميع عمليات التهجير باستخدام ./manage.py showmigrations my_app لعكس جميع عمليات التهجير لأحد التطبيقات ، يمكنك تنفيذ: ./manage.py migrate my_app zero لكن يجب الإشارة إلى أنه لا يمكن عكس جميع الهجرات . يحدث هذا إذا لم يكن لدى Django قاعدة للقيام بعملية العكس. بالنسبة لأغلب التغييرات التي أجريت عمليات التهجير بشكل تلقائي بإستخدام /manage.py makemigrations سيكون الإلغاء أو التراجع ممكنًا. مع ذلك فإن النصوص البرمجية المخصصة ستحتاج إلى كتابة الأمام والعكس. وايضاً لا تحذف ملف التهجير إلا بعد الرجوع. لأنه بدون ملف التهجير ، لم تكن قاعدة البيانات تعرف الأشياء التي يجب إزالتها. python manage.py showmigrations python manage.py migrate {app name from show migrations} {00##_migration file.py} إذا كنت تريد التراجع عن جميع عمليات التهجير ، فاستخدم zero كاسم التهجير: python manage.py migrate app_name_here zero احذف ملف التهجير. بمجرد أن يكون التهجير المطلوب في نماذجك ... python manage.py makemigrations python manage.py migrate1 نقطة
-
يمكنك عمل ذلك عن طريق التهجير الى ملف التهجير السابق للاخير مثال اذا اعتبرنا وجود ملفان تهجير 0010_previous_migration 0011_migration_to_revert يمكنك إذا تنفيذ الامر التالى migrate my_app 0010_previous_migration ومن ثم بامكانك ان تمسح اخر ملف تهجير الغير مرغوب فيه 0011_migration_to_revert1 نقطة
-
يمكنك إدراج الأنماط الانسيابية CSS داخل صفحات HTML بإحدى الطرق الثلاثة التالية : طريقة الملف الخارجي هي الأفضل عند تطبيقها على عدد كبير من الملفات ، حيث يمكنك إجراء تعديلات على طريقة عرض جميع الصفحات من خلال التعديل في ملف واحد فقط . في هذه الطريقة يتم إدراج جميع أوامر CSS في ملف نصي يتم استدعاءه من خلال جميع صفحات الـ HTML عن طريق الأمر " link " و يجب أن يتم إدراج هذا الأمر في منطقة رأس الصفحة " head " ، كما بالمثال التالي : <link rel="stylesheet" href="style.css"> مع مراعاة أن يكون مسار الملف الصحيح, على سبيل المثال, لو كان ملف css داخل مجلد داخلي آخر يتم كتابة كود إستدعاء الملف بهذه الطريقة <link rel="stylesheet" href="css/style.css"> الطريقة الثانية embedded style sheets و هي تعني التضمين " الإدراج " داخل رأس الصفحة ، و يجب عليك استخدام النمط الداخلي في حالة تطبيقه على مستند وحيد ، حيث تقوم بتحديد النمط في رأس الصفحة " head " عن طريق استخدام الوسم <style> كما يلي : <head> <style type="text/css"> hr {color: sienna} p {margin-left: 20px} body {background-image: url("images/back40.gif")} </style> </head> الطريقة الثالثة Inline Styles, في هذه الطريقة يتم إدراج أوامر CSS داخل أكواد HTML مباشرة ، فعلى سبيل المثال يمكنك أن تختار فقرة ما أو سطر ما داخل صفحة HTML لتطبق عليها التنسيق ، و تستخدم هذه الطريقة لإدراج تنسيق خاص لا يتكرر كثيراً أو لتغيير التنسيق المدرج في صفحة الأنماط الخارجية ، و سوف يتم استخدام كلمة style مع المتغير و القيمة داخل الوسم المراد تنسيقه . <p style="color: red;"> الكتابة هنا تظهر باللون الأحمر </p>1 نقطة