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

محمد أبو عواد

الأعضاء
  • المساهمات

    6234
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    95

كل منشورات العضو محمد أبو عواد

  1. يمكنك استخدام احدى الطرق التالية لفعل ذلك href="/#" أو الطريقة التالية href="javascript:;" أو الطريقة التالية href="javascript:void(0);" من المفترض أن ذلك سوف يخفي الخطأ
  2. يقوم NextJS بالجلب المسبق (prefetch ) افتراضيا للمسارات المرتبطة. يمكنك تعطيله لتجنب تحميل صفحات أخرى من خلال وضع قيمة prefetch false كالتالي <Link href="path" prefetch={false} />
  3. يحدث وقت البناء عند إنشاء التطبيق للإنتاج -production -. يحدث وقت التشغيل عندما يكون التطبيق قيد الإنتاج يعمل getInitialProps على كل من العميل والخادم أثناء وقت التشغيل لكل طلب صفحة. يعمل getServerSideProps فقط على الخادم أثناء وقت التشغيل لكل طلب صفحة. لا يتم تشغيل getStaticProps إلا أثناء وقت البناء, وهو أمر رائع للمواقع التي لا يتم تحديث بياناتها وصفحاتها كثيرا يتم تشغيل getStaticPaths فقط أثناء وقت البناء, إنه أمر رائع للعرض المسبق للمسارات مثل /blog/:id والتي تتطلب بيانات ديناميكية لاستخدامها في وقت البناء
  4. بداية نحتاج أن نظهر رسالة للمستخدم توضح له أن يدخل رقما و نقوم بحفظ هذا الرقم في متغير كالتالي Scanner myObj = new Scanner(System.in); System.out.println("Enter Number"); int num = myObj.nextInt(); نقوم بانشاء متغير اخر لحمل ناتج الضرب, وتكون قيمته الأولية 1, وليس صفرا, لأن ضرب أي عدد في صفر يساوي صفر int mul=1; , ثم نقوم بعمل حلقة تكرار باستخدام for , تبدأ من 1 وتنتهي عند الرقم الذي أدخله المستخدم ناقص منه واحد, يعني لو أدخل 10 سوف تنتهي الحلقة بعد تنفيذ الدورة رقم 9 for (int i=1;i<num ;i++ ) , بداخل جسم الحلقة, نقوم بفحص هل هذا الرقم فردي أم لا, نستطيع معرفة الرقم فردي أم لا من خلال عملية باقي القسمة على 2, حيث أنه اذا كان ناتج باقي القسمة يساوي صفر فانه عدد زوجي , اذا كان الناتج أكبر من صفر, فهو عدد فردي, وهذه بعض الأمثلة على ذلك, 2 % 2 =0 3 % 2 =1 الاشارة % تعني باقي القسمة , الكود: if(i%2 !=0) بداخل جسم الشرط, نقوم بتنفيذ عملية الضرب, كنا سابقا حفظنا ناتج عملية الضرب في المتغير الذي أنشأناه سابقا والذي اسمه mul mul*=i; ثم نطبع المتغير mul لنرى النتيجة System.out.println(mul);
  5. ربما تستخدم برنامج vscode studio, المشكلة فقط تكمن في إدخال vscode studio لمسافات حول الاستيراد import ('../vendorjs/jquery-3.3.1.min.js') ^^^ حاول تعديلها بدون مسافة كالتالي import('../vendorjs/jquery-3.3.1.min.js')
  6. هذا يحدث عند استخدام axios في Service Worker الخاص بكروم,لا يمكنك استخدام axios في Service Worker , يحاول axios استخدام xhr و http عند الحصول على المحول,ولكن لا يمكنك استخدام كليهما في Service Worker, لذا استخدم fetch, لاستخدام fetch، ضع عنوان URL في host_permissions,إذا لم تستخدم host_permissions ، فستتلقى خطأ, يمكنك أن تجعل الكود كالتالي, في ملف Manifest.json "background": { "service_worker": "background.js" }, "host_permissions": ["https://sample.com/*"] في ملف background.js const res = await fetch(baseUrl + word, { method: "GET", mode: "cors", }); const txt = await res.text();
  7. يمكنك تمرير المسار النسبي لملف التكوين الخاص بك في package.json ، ثم استعادته في ملف webpack الخاص بك كما هو موضح في الكود التالي //package.json "dev": "webpack serve --env development conf=configs/local.json", "stage": "webpack serve --env development conf=configs/stage.json", "build": "webpack --env production conf=configs/prod.json", // webpack module.exports = (env) => { const conf = path.resolve(process.cwd(), env.conf); return { mode: nodeEnv, entry: "./src/index.tsx", //... blabla } } كما تلاحظ في ملف package.json تم تمرير المسار النسبي لملف التكوين باستخدام الخاصية conf وتم استعادته في ملف webpack باستخدام path.resolve
  8. حاول تنفيذ الأوامر التالية امسح ملفات السجل الموجود في المسار الآتي (***** \ AppData \ Roaming \ npm-cache \ _logs) ثم قم بتنفيذ الأمر التالي npm i -g webpack-cli ثم قم بتنفيذ الاوامر التالية npm install && npm run dev
  9. ليست هناك حاجة لاستيراد مثل هذه الملفات. يدعم Next.js وضع الملفات في المجلد العام (assets in public). قم بإزالة تكوين webpack المخصص الخاص بك ، ثم قم بفعل التالي <audio controls src="/sounds/bighit.mp3" /> أيضًا ، الخطأ الذي كنت تحصل عليه كان خطأ TypeError ، لإصلاحه يمكنك محاولة: declare module "*.mp3" { const content: string; export default content; }
  10. تأكد من أنك تستخدم الأمر build الصحيح في ملف package.json, تحتاج الى تغيير السطر التالي "next build && next export" ليكون كالتالي "build": "next build" يمكنك حذف الجزء && next export أدى هذا إلى تعطيل ميزة التصدير الثابت والسماح باستخدام pages/api عند تشغيل الأمر yarn start
  11. يمكنك إنشاء cache_page الخاص بك كالتالي from django.core.cache import cache def simple_cache_page(cache_timeout): """ Decorator للعرض الذي يحاول الحصول على الصفحة من ذاكرة التخزين المؤقت و يملأ ذاكرة التخزين المؤقت إذا لم تكن الصفحة في ذاكرة التخزين المؤقت بعد. يتم تمييز ذاكرة التخزين المؤقت بواسطة اسم العرض والوسيطات. """ def _dec(func): def _new_func(*args, **kwargs): key = func.__name__ if kwargs: key += ':' + ':'.join([kwargs[key] for key in kwargs]) response = cache.get(key) if not response: response = func(*args, **kwargs) cache.set(key, response, cache_timeout) return response return _new_func return _dec لذاكرة التخزين المؤقت للصفحة منتهية الصلاحية ، يمكنك استخدام cache.set('map_view:' + self.slug, None, 0) حيث self.slug عبارة عن معامل من urls.py url(r'^map/(?P<slug>.+)$', simple_cache_page(60 * 60 * 24)(map_view), name='map'),
  12. كما ذكر سامح يمكنك استخدام CurrentUserDefault. إذا كنت لا تريد عمل override لدالة save فيمكنك استخدام الكود كالتالي from rest_framework import serializers class PostSerializer(serializers.ModelSerializer): user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault()) class Meta: model = Post
  13. كما قال سامح لأن المفتاح الفعلي ليس "posts" ، بل هو مفتاح تم إنشاؤه ديناميكيا بواسطة Django باستخدام ما يلي: args = md5_constructor(u':'.join([urlquote(resolve_variable(var, context)) for var in self.vary_on])) cache_key = 'template.cache.%s.%s' % (self.fragment_name, args.hexdigest()) سيكون المفتاح بالتنسيق: template.cache.posts.[hexdigest]. لذا فإن الجزء الصعب هو معرفة الجزء hexdigest, يمكنك استخدام الكود التالي كحل آخر from django.core.cache import cache from django.utils.hashcompat import md5_constructor from django.utils.http import urlquote def invalidate_template_cache(fragment_name, *variables): args = md5_constructor(u':'.join([urlquote(var) for var in variables])) cache_key = 'template.cache.%s.%s' % (fragment_name, args.hexdigest()) cache.delete(cache_key) من خلال الكود السابق يمكننا معرفة المفتاح بشكل فعلي ويمكننا ابطال ذاكرة التخزين المؤقت التي حددتها, نظرا لأنك لا تقوم بتمرير أي متغيرات ، يمكنك استدعاء ذلك فقط بـ Invalidate_template_cache ("posts") بخلاف ذلك ، ستحتاج إلى تمرير قائمة بجميع المتغيرات كالتالي invalidate_template_cache("posts", *variables)
  14. هناك طريقتان للقيام بذلك. الأول هو استخدام التحقق من صحة النموذج لعدم السماح لأي مستخدم بإدخال أي رقم يزيد عن 50, إذا لم يكن هناك مستخدم مشارك في العملية ، أو إذا كنت لا تستخدم نموذجا لإدخال البيانات ، فسيتعين عليك عمل override لدالة model's save لطرح استثناء أو تقييد البيانات التي تدخل الحقل.يمكنك أيضا تجربة الحل التالي SCORE_CHOICES = zip( range(1,n), range(1,n) ) score = models.IntegerField(choices=SCORE_CHOICES, blank=True)
  15. يبدو أنك تحاول وضع صورة باستخدام الخاصية background-image في ملف main.scss, وبالتالي عند معالجة ملف main.scss سوف يتم معالجة الصورة والتعامل معها كملف, أنت تستخدم حزمة file-loader لمعالجة الملفات, الخطأ لديك كالتالي Module not found: Error: Can't resolve 'file-loader' المشكلة أنك لم تقم بتثبيت الحزمة file-loader ولذلك يعطيك هذا الخطأ, هناك مشكلة أخرى أنك تحاول استخدام حزمة file-loader في webpack 5 ولكن في webpack 5 لست بحاجة لاستخدام محملات وحزم لمعالجة الملفات لأنها تأتي جاهزة لمعالجة الملفات, يمكنك الاكتفاء بكتابة الكود التالي rules: [ { test: /\.(jpe?g|png|gif|svg)$/, type: 'asset/resource', }, ]
  16. اعتقد أنك تستحدم Webpack 5 وبالتالي أنت لست بحاجة الى استخدام أدوات تحميل مثل "url-loader" أو "file-loader" في Webpack 5 , لأن Webpack 5 يأتي بشكل جاهز لمعالجة الملفات, أنت قمت باستخدام محمل file-loader وبالتالي قام Webpack بانشاء صورتين , الصورة الأولى من محمل ويباك الجاهز والصورة الثانية من محمل file-loader, لحل المشكلة يمكنك استخدام التالي rules: [ { test: /\.(jpe?g|png|gif|svg)$/, type: 'asset/resource', generator: { // إضافة تجزئة إلى اسم الملف filename: 'images/static/[name].[hash][ext]', }, }, ]
  17. ربما لم تقم بتثبيت الحزمة, يمكنك تثبيتها كالتالي npm install slick-carousel --save إذا كنت تستخدم yarn، يمكنك تثبيتها كالتالي yarn add slick-carousel ثم قم باستيراد ملفات css الخاصة بالحزمة React-slick كالتالي import "slick-carousel/slick/slick.css"; import "slick-carousel/slick/slick-theme.css"; لا حاجة لاستخدام الاشارة "~"
  18. يمكنك كتابة الكود كالتالي "scripts": { "env1": "DOTENV_CONFIG_PATH=./.env next dev", "env2": "DOTENV_CONFIG_PATH=./.env.testing next dev" } وتستطيع التبديل بينهما كما تريد واستخدام الأوامر الموجودة في أي ملف
  19. تستطيع تعيين فئة Meta افتراضيا إلى "managed = false". على سبيل المثال: class Rssemailsubscription(models.Model): id = models.CharField(primary_key=True, max_length=36) ... area = models.FloatField('Area (Sq. KM)', null=True) class Meta: managed = False db_table = 'RSSEmailSubscription' من خلال التغيير managed إلى True، سوف تبدأ ملفات التهجير في التقاط التغييرات.
  20. من الممكن أن تكون الإجابات الأخرى أن تكون بطيئة باستخدام order_by ('؟') أو تستخدم أكثر من استعلام SQL. إليك نموذج حل بدون ترتيب واستعلام واحد فقط, بافتراض Postgres: random_instance_or_none = Model.objects.raw(''' select * from {0} limit 1 offset floor(random() * (select count(*) from {0})) '''.format(Model._meta.db_table)).first() ربما أن هذا سيؤدي إلى ظهور خطأ في الفهرس إذا كان الجدول فارغ.لذلك اكتب دالة مساعدة للتحقق من ذلك
  21. بالإضافة الى الاجابات الأخرى يمكنك استخدام هذه الدالة def make_test_wrapper_for(command_module): def _run_cmd_with(*args): "" "قم بتشغيل الأمر might_add_alert بالوسيطات المزودة" "" cmd = command_module.Command() (opts, args) = OptionParser(option_list=cmd.option_list).parse_args(list(args)) cmd.handle(*args, **vars(opts)) return _run_cmd_with لاستخدامها كالتالي from myapp.management import mycommand cmd_runner = make_test_wrapper_for(mycommand) cmd_runner("foo", "bar") الميزة هنا هي أنك إذا استخدمت خيارات إضافية و OptParse ، فسيؤدي ذلك إلى حل المشكلة لك,ستستخدم قاعدة بيانات الاختبار ويمكنك بعد ذلك اختبار تأثيرات قاعدة البيانات.
  22. من خلال تعلمك لغة php أو غيرها من اللغات سوف تتعلم الخوارزميات والداتا ستركشر ولكن ربما تواجهك بعض الصعوبات والمشاكل سببها عدم فهمك للداتا ستركشر الذي تتعامل معه, من خلال حل للمشكلة التي واجهتك سوف تتعلم الداتا ستركشر
  23. كبداية في لغة c يعتبر امر جيد, يمكنك من خلالها معرفة أساسيات البرمجة والتعرف على مختلف المصطلحات التي سوف تتكرر معك في جميع اللغات مثل المتغيرات والمصفوفات وحلقات التكرار وجمل الشرط, تقريبا تتبع نفس المبدا في كل اللغات, لذلك كبداية في لغة c يعتبر أمر جيد, يمكنك أيضا البداية بلغة جافا أو c++ والبدء بهما أفضل من البدء بلغة c لأنك من خلالها ستتعرف على البرمجة كائنية التوجه والتي سوف تواجهك في php , بعد ذلك يمكنك الدخول في دورة تطوير تطبيقات الويب باستخدام لغة PHP, الجدير بالذكر أنه حتى لو لم يكن لديك أي خبرة بالبرمجة من قبل سوف يتم توضيح كل شيء والبداية من الصفر في هذه الدورة, يمكنك بعدها أن تكون backend جيد, ولكن يفضل قبل البداية في هذا المسار أن يكون لديك معرفة بجزء الفرونت اند, لكي تستطيع توظيف قسم الباك اند مع الفرونت اند وسوف تواجه صعوبات كثيرة اذا لم تكن على معرفة ولو بسطية في html , بالنسبة الخوارزميات فهي مهمة ويفضل أن يكون لديك معرفة بها, من خلالها سوف تستطيع أفضل الحلول للمشاكل التي تواجهك وأيهما أسرع , فالسرعة مهمة في المواقع والبرمجة بشكل عام, أما الداتا ستركتشر مهمة جدا لكي تستطيع تحديد نوع البيانات التي تتعامل معها, أثناء تعلم php سوف تلاحظ هذه الأشياء وسوف تلاحظ أن الداتا ستركتشر مهمة جدا
  24. لا يتطلب وجود رابط مثل <link href="/style.css" rel="stylesheet" /> في ملف html أداة تحميل في webpack.config.js. يبدو أنك تحصل على خطأ 404 في console في المتصفح يفيد بأن ملف غير موجود. إذا كانت هذه هي الحالة ، فإن الجزء href="/style.css" لا يشير إلى ملفك. لذلك تأكد من مسار الملف ثم حاول مرة أخرى
  25. أفضل حل تم نشره لـ Django الاصدارين 1.7 ، 1.9 هو تسجيل تحويل (register a transform) كالتالي from django.db import models class MySQLDatetimeDate(models.Transform): lookup_name = 'date' def as_sql(self, compiler, connection): lhs, params = compiler.compile(self.lhs) return 'DATE({})'.format(lhs), params @property def output_field(self): return models.DateField() يؤدي هذا إلى تنفيذ بحث SQL مخصص عند استخدام "__date" مع datetimes. لتمكين التصفية على التواريخ التي تقع في تاريخ معين ، قم باستيراد هذا التحويل وتسجيله في DateTimeField, ثم يمكنك استخدامه في عوامل التصفية الخاصة بك كالتالي Foo.objects.filter(created_on__date=date)
×
×
  • أضف...