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

Salah Eddin Beriani2

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

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

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

كل منشورات العضو Salah Eddin Beriani2

  1. مرحيبا يمكنك البحث أولا على ال doc الذي تريد تحديثه ثم يمكنك تعديله و هناك typeorm يسمى mongoose يمكنه تسهيل العمل عليك await Product.findByIdAndUpdate(6252911686465f30a89dbcbe ,{price:200}) product هو ال model الخاص بالمنتوجات والطريقة findByIdAndUpdate تساعدك في ايجاد doc معين بالاستعانة بال _id الخاص به وتعديله في نفس الوقت
  2. يمكنك جلب الماك عن طريق NODEJS بالاستعانة بالمكتبة getmac npm install -g getmac طريقة الاستخدام مباشرة import getMAC, { isMAC } from 'getmac' // جلب الماك الخاص بالكمبيوتر console.log(getMAC()) // جلب الماك الخاص ب واجهة معينة console.log(getMAC('eth0'))
  3. هناك تكوينات مختلفة لـ webpack 4 و webpack 5 نبدأ بـ webpack 4 إذا كنت تستخدم webpack 5 فانتقل لأسفل إلى قسم webpack 5 أول شيء سنفعله هو تثبيت file-loader npm install --save-dev file-loader ثم تعديل اعدادت webpack لتستخدم file loader { test: /\.(png|svg|jpg|jpeg|gif)$/i, use: [ { loader: "file-loader", options: { name: "[name].[ext]", outputPath: "images", }, }, ], }, اعدادات ملف webpack 5 لقد ألغى Webpack 5 أداة تحميل file-loader إذا كنت تستخدم webpack 5 فيجب إجراء بعض التعديلات على الاعدادات الخاصة بك. module: { rules: [ { test: /\.png$/, type: 'asset/resource' } ] } أيضًا لم تعد بحاجة إلى إضافة file-loader في package.json. عندما تقوم بتعديل اعدادات webpack config الخاص بك يمكنك الوصول إلى ملفات PNG (أو أي ملحقات ملفات قمت بتكوينها) تمامًا كما هو موضح سابقًا.
  4. يمكنك ببساطة معرفة الاستعلامات التي قام بها django في جلسة عن طريق >>> from django.conf import settings >>> settings.DEBUG = True >>> from django.db import connection >>> Model.objects.count() >>> print(len(connection.queries)) 1
  5. كلا التكنولوجيتين fetch و ajax تمكنانك من ارسال طلبات للسيرفر لكن fetch يعد النسخة العصرية لفعل ذلك يتمتع Fetch بالعديد من المزايا مقارنة بـ ajax للعديد من المطورين. أولاً ، واجهة برمجة التطبيقات أبسط. إذا كنت تقارن Fetch بـ XHR القديم البسيط ، فستعرف مدى سهولة الوصول إلى استجابة الطلب. إنها مبنية على promise وهي طريقة رائعة حقًا للعمل فهي تساعد في كتابة كود نظيف وتسمح لك باستخدام أشياء جديدة مثل غير async/await. يحتوي على تعريف دقيق لما هو الطلب وما هو الرد هذا يعني أنه يمكنك كتابة دالة "لتعديل" طلب قبل إرساله. على سبيل المثال ، يمكن أن يكون لديك وظيفة تأخذ كائن طلب init وتعيده مع إضافة بيانات الاعتماد. بشكل افتراضي لا يرسل ملفات تعريف الارتباط يجب التعامل مع المصادقة يدويًا. بشكل عام يبدو أن Fetch يتناسب بشكل أفضل مع طريقة عمل الأشخاص مقارنة بـ XHR.
  6. لا يوجد أمر مدمج ولكن يمكنك القيام بذلك بسهولة عبر > python manage.py shell $ from django.contrib.auth.models import User $ User.objects.get(username="name", is_superuser=True).delete()
  7. حدث النسخة sudo apt update sudo apt upgrade أعد تفعيل واجهة الرسوميات sudo systemctl set-default graphical ثم قم بعمل restart ل gdm sudo systemctl start gdm3 ثم قم باعادة التشغيل
  8. يتم تزويد كل مكون شاشة في تطبيقك بعنصر التوجيه تلقائيًا يحتوي على معلومات متنوعة تتعلق بالمسار الحالي وهذا في react-navigation النسخة 6 من المكتبة يمكنك جلب اسم الشاشة ب function HomeScreen({ route }) { return ( <View> <Text>This is the profile screen of the app</Text> <Text>{route.name}</Text> </View> ); } أو يمكنك استخدام طريقتك لكن في مكون الشاشة وليس في Navigation لأنه ليس داخل navigator import { useRoute } from '@react-navigation/native'; function HomeScreen() { const route = useRoute(); return ( <View> <Text>This is the profile screen of the app</Text> <Text>{route.name}</Text> </View> ); }
  9. تُستخدم خاصية الطفو لتحديد موضع المحتوى وتنسيقه على سبيل المثال دع الصورة تطفو إلى اليسار على النص الموجود في الحاوية. يمكن أن تحتوي الخاصية float على إحدى القيم التالية: left - يطفو العنصر إلى يسار الحاوية الخاصة به right - يطفو العنصر على يمين الحاوية الخاصة به none - لا يطفو العنصر (سيتم عرضه في مكان ظهوره في النص فقط) inherit - يرث العنصر القيمة العائمة للعنصر الأصل في أبسط استخدام لها ، يمكن استخدام خاصية الطفو لالتفاف النص حول الصور. في العموم يجب عليك التجربة بنفسك لتأخذ فكرة أفضل كما يمكنك تجنب استخدام float واستخدام تقنيات عصرية أكثر ك flexbox و grid
  10. موضوع ال authentication جد معقد ويلزم له برمجة فلو فرضنا انك تريد تسجيل الدخول للمستخدمين لموقعك فقبل ذلك يجب أولا تسجيلهم كمستخدمين ضمن قاعدة بيانات الموقع وهذا يضمن تسجيل معلوماتهم وتشفير كلمة السر الخاصة بهم وحفضها في قاعدة البيانات من ثم يمكنك التفكير في كيفية تسجيل الدخول وهذا أيضا يتطلب جلب المستخدم من قاعدة البيانات من ثم اعادة فك تشفير كلمة السر من قاعدة البيانات لمقارنتها مع كلمة السر التي ادخلها المستخدم لتسجيل الدخول اذا تطابقت يبقى أن تفتح له session او تولد له توكن كي يبقى مجسلا للدخول لفترة يحددها المبرمج فاذا كنت مبرمج وتجيد لغة ما ابحث عن كيفية بناء authentication فستجد حتما المصادر أما اذا كنت مالك للموقع ولا تجيد البرمجة فلابد من توظيف مستقل يجيد البرمجة ليتكفل هو ببناءه لك
  11. يمكن استخدام make_random_password بهذه الطريقة مثلا for user in users_list: password = User.objects.make_random_password() user.set_password(password) user.save(update_fields=['password']) بهذه الطريقة يمكنك أن تعين لكل مستخدم كلمة سر عشوائية
  12. يمكن تحديد مسار مجلد التحميل الافتراضي والحجم الأقصى للملفات التي تم تحميلها في إعدادات التكوين لكائن Flask. حدد المسار إلى مجلد التحميل app.config['UPLOAD_FOLDER'] يحدد الحجم الأقصى (بالبايت) للملفات المراد تحميلها app.config['MAX_CONTENT_PATH'] تحتوي الشفرة التالية على قاعدة عنوان URL "/ upload" التي تعرض’upload.html "في مجلد النماذج وقاعدة عنوان URL" / upload - file "لاستدعاء وظيفة upload لمعالجة عملية التحميل. يحتوي "upload.html" على زر اختيار ملف وزر إرسال. <html> <body> <form action = "http://localhost:5000/uploader" method = "POST" enctype = "multipart/form-data"> <input type = "file" name = "file" /> <input type = "submit"/> </form> </body> </html> بمجرد تحديد ملف ، انقر فوق إرسال. تستدعي طريقة نشر النموذج عنوان URL "/ upload_file". ينفذ برنامج تحميل الوظيفة uploader عملية حفظ. كود Python لتطبيق Flask. from flask import Flask, render_template, request from werkzeug import secure_filename app = Flask(__name__) @app.route('/upload') def upload_file(): return render_template('upload.html') @app.route('/uploader', methods = ['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['file'] f.save(secure_filename(f.filename)) return 'file uploaded successfully' if __name__ == '__main__': app.run(debug = True)
  13. يمكنك استخدام ال query لهذه العملية @app.route("/") def hello(): return request.args.get("page") app.run(host="0.0.0.0", port=8080) مع تغيير في ال url http://localhost:8080?page=1 http://localhost:8080?page=2 http://localhost:8080?page=3 http://localhost:8080?page=4
  14. هدفنا هو استخدام عنوان URL مثل هذا /v1/magazines?page=1&per-page=50 لإنشاء نتائج JSON مثل هذا: { "results": [ { "Programming Today", "publisher": "Harper Collins" }, { "title": "Mountain Biking", "publisher": "Outdoors Limited" } ], "pagination": { "count": 2, "page": 1, "per_page": 50, "pages": 1 } } @app.route("/magazines") def magazines(): # process query parameters page = request.args.get("page", 1, type=int) per_page = request.args.get("per-page", 100, type=int) # query magazines = Magazine.query.paginate(page, per_page) # combine results with pagination results = { "results": [{"title": m.title, "publisher": m.publisher} for m in magazines.items], "pagination": { "count": magazines.total, "page": page, "per_page": per_page, "pages": magazines.pages, }, } return jsonify(results) هذا هو! تمنحنا طريقة ترقيم الصفحات في استعلام sqlalchemy الكثير من المرونة مع القليل جدًا من التعليمات البرمجية وإرجاع مجموعة نتائج محدودة وعرض إجمالي السجلات المتاحة أثناء حساب الصفحات المتبقية بناءً على إعدادنا لكل صفحة.
  15. السبب هو الباب 81 هو باب مخصص في linux جرب تغييره الى 3000 أو 5000 app.run(host="127.0.0.1", port=3000, debug=True)
  16. لقد نسيت حرف r بحيث تكون created_at يعني اذا كنت تدخلها على اساس created_at فذلك هو سبب الخطأ created_at = models.DateField(_("Date"), default=datetime.now)
  17. from rest_framework import status from rest_framework.response import Response def empty_view(self): content = {'please move along': 'nothing to see here'} return Response(content, status=status.HTTP_404_NOT_FOUND) يمكنك ارجاع ال status بالطريقة الموافقة لفوق ويمكنك استيراد status من rest_framwork و هو يحتوي كل الاكواد مثلا الاكواد المتعلقة ب 500 HTTP_500_INTERNAL_SERVER_ERROR HTTP_501_NOT_IMPLEMENTED HTTP_502_BAD_GATEWAY HTTP_503_SERVICE_UNAVAILABLE HTTP_504_GATEWAY_TIMEOUT HTTP_505_HTTP_VERSION_NOT_SUPPORTED HTTP_506_VARIANT_ALSO_NEGOTIATES HTTP_507_INSUFFICIENT_STORAGE HTTP_508_LOOP_DETECTED HTTP_509_BANDWIDTH_LIMIT_EXCEEDED HTTP_510_NOT_EXTENDED HTTP_511_NETWORK_AUTHENTICATION_REQUIRED
  18. هذه فقط تحذيرات متعلقة بعدم توافق المكتبة مع نسخة react native الجديدة وسيتم في القريب اصلاح الأمر من قبل مطوري المكتبة يمكنك تجاهل التحذير أو اخفاءه بهذه الطريقة import { LogBox } from 'react-native'; LogBox.ignoreLogs(['new NativeEventEmitter']);
  19. تتعلم reactjs لمدة شهر أو شهرين حتى تتمكن من اطار العمل ثم تبدأ بإنشاء مكونات React الأساسية لمطابقة HTML الأصلي والذي كان عبارة عن الكثير من عناصر div تحويل المتغيرات الى state أو استعمال state manger لذلك تحويل كل event listener الى احداث مكونات react بالنسبة لل styles الابقاء على classes في المكونات سيجنبك تعديل ملفات ال style القديمة
  20. هذا في اغلب الظن ال margin الذي استعملته من اجابة المدرب السابقة لو لاحظت الاجابة جيدا ستجد أنه قال لك استعمل اما margin او translate وليس الاثنين يمكنك ازالة ازالة ال margin footer{ margin-right:50px }
  21. الخطأ ربما يكون صادر من هنا @app.route('/my-form') def my_form(): posts = [] for post in session.query(models.Post): posts.append((post.title, post.content)) return render_template('posts.html', posts=posts) جرب اضافة methods في app.route @app.route('/my-form', methods=['GET', 'POST']) def my_form(): posts = [] for post in session.query(models.Post): posts.append((post.title, post.content)) return render_template('posts.html', posts=posts)
  22. الشيفرة جيدة ويمكن استعمالها للتامين لقد قمت باعادة كتابة الشيفرة وأظفت ميزة التأكد من ارسال صفحة خطأ اذا ماحدث خطأ في الشيفرة exports.loginRequired = (req, res, next) => { const refreshToken = req.cookies['refresh-token']; const token = req.cookies['access-token']; if (!refreshToken) res.status(401).sendFile(path.join(__dirname, '../views/index.html')); try { const refexp = jwt.verify(refreshToken, process.env.REFRESH_TOKEN_SECRET); if (refexp) { const refAcToken = createToken(User.email); res.cookie('refresh-token', refAcToken); } else { if (!token) res.status(401).sendFile(path.join(__dirname, '../views/index.html')); const tokexp = jwt.verify(token, process.env.ACCESS_TOKEN_SECRET); if (tokexp) { const accessToken = createToken(User.email); res.cookie('access-token', accessToken); next(); } else { next(); } } } catch (error) { res.status(401).sendFile(path.join(__dirname, '../views/index.html')); } };
  23. كل العمليات الحسابية المكلفة والمعقدة يتم عادة التعامل معها في سيرفر وليس في الواجهة لاسباب كثيرة لا يمكنك معرفة قدرات حواسيب المستخدمين لديك وقد يسبب لهم هذا تجربة مستخدم كارثية بتجمد المتصفح لديهم كل ما دخلو للموقع يجب العمل داءما على ابقاء واجهة المستخدم سلسة وخفيفة توفر أدوات تساعد في أداء العمليات الحسابية في السيرفر تخفيض حجم request و response تنفيذ error handling للعمليات الحسابية في السيرفر
  24. يمكنك استخدام مكتبة django-redis python -m pip install django-redis لبدء استخدام django-redis يجب عليك تغيير إعدادات ذاكرة التخزين المؤقت لـ Django إلى شيء مثل: CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } يمكنك القراءة حول استخدامات المكتبة ككيفية حماية redis بكلمة سر وخصائص أخرى في التوثيق الرسمي للمكتبة django redis
  25. دورة علوم حاسوب دورة ممهدة لمجال الحاسوب والبرمجة وهي مكان جيد للبدء في طريقك محو التعمق في المجال ويمكنك اعتبارها دورة عامة لذلك هي مناسبة للجميع أما عن ماذا يمكنك ان تشتغل ففي هذا المجال كونك أصبحت متمكن منه فيمكنك ان تشتغل أي شئ لديه علاقة بالحواسب والبرمجة وهذا العمل عادة يكون من امنزل كمتعاقد حر أو في شركة ومجال الحاسوب والبرمجة مجال ذو مستقبل وفرص كثيرة لذا أنصحك به كمجال أساسي لك
×
×
  • أضف...