Ninja Learn | نینجا لرن
1.26K subscribers
102 photos
38 videos
11 files
313 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
💎 ساختن چندتا ابجکت بصورت همزمان (bulk_create) در جنگو 💎

امروز میخوایم در مورد یکی از قابلیت‌های خیلی کاربردی جنگو به اسم Bulk Create صحبت کنیم. این قابلیت وقتی به دردتون میخوره که بخواید چندتا داده رو یکجا به دیتابیس اضافه کنید. مثلا فرض کنید میخواید اطلاعات ۱۰ تا محصول جدید رو تو فروشگاه آنلاینتون ثبت کنید. اگه بخواید هر کدوم رو تک تک سیو کنید که کلی وقتتون رو میگیره و اصلا به صرفه و بهینه نیست.

حالا ببینم Bulk Create چطوری کار میکنه؟🤔

به جای اینکه برای هر داده یه دستور سیو جداگانه بنویسیم، با Bulk Create میتونیم همه داده ها رو یکجا داخل یه لیست بریزیم و با یه دستور ساده همه رو با هم سیو کنیم. اینجوری سرعت کارمون خیلی بیشتر میشه و منابع سرور هم کمتر مصرف میشه.

1️⃣ مثال اول: اضافه کردن چندتا محصول جدید

فرض کنید مدل محصول ما این شکلیه:

class Product(models.Model):
name = models.CharField(max_length=100)
price = models.FloatField()
description = models.TextField()


حالا میخوایم چندتا محصول جدید به این شکل اضافه کنیم: 👇


products = [
Product(name='گوشی آیفون 14', price=15000000, description='بهترین گوشی سال'),
Product(name='لپتاپ دل XPS 13', price=25000000, description='لپتاپ فوق سبک و قدرتمند'),
# ... و بقیه محصولات
]

Product.objects.bulk_create(products)

با این کد، همه محصولات داخل لیست products یکجا به دیتابیس اضافه میشن.

2️⃣ مثال دوم: اضافه کردن چندتا کامنت به یک پست


class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
text = models.TextField()

comments = [
Comment(post=post, text='کامنت اول'),
Comment(post=post, text='کامنت دوم'),
# ... و بقیه کامنت‌ها
]

Comment.objects.bulk_create(comments)


اینجا هم به همین صورت، همه کامنت‌ها به یکجا به پست موردنظر اضافه میشن.

نکات مهم:

توجه: Bulk Create فقط برای ایجاد اشیاء جدید استفاده میشه. برای آپدیت کردن اشیاء موجود باید از روش‌های دیگه استفاده کنید.

بهینه سازی ⏱️: برای بهبود عملکرد، سعی کنید تعداد اشیایی که در هر بار Bulk Create ایجاد میکنید رو بهینه کنید. خیلی زیاد یا خیلی کم بودن تعداد اشیاء میتونه روی عملکرد سیستم تاثیر بگذاره.

خطاها : اگر در حین اجرای Bulk Create خطایی رخ بده، هیچکدوم از اشیاء ایجاد نمیشن. پس حتما قبل از اجرا، داده‌ها رو به خوبی اعتبارسنجی کنید.

جمع‌بندی

و در اخر Bulk Create یکی از ابزارهای قدرتمند جنگو است که به شما کمک میکنه تا عملیات ایجاد داده رو بهینه کنید. با استفاده از این قابلیت، میتونید به راحتی هزاران رکورد رو در کوتاه‌ترین زمان ممکن به دیتابیس اضافه کنید. ⏱️

اگه دوست دارید درموردش بیشتر بدونید میتونید یه سر به داکیومنت خود جنگو بزنید 😁

امیدوارم این آموزش براتون مفید بوده باشه :)

#جنگو #BulkCreate #برنامه_نویسی #پایتون #توسعه_وب #django #python #webdevelopment
👍122
💎 وب سرور gunicorn 💎

امروز میخوایم با همدیگه یکی از بهترین ابزارها برای ساخت وب‌سرورهای پایتون رو بشناسیم. اسمش Gunicorn هست!

حالا Gunicorn چیه و چه کار میکنه؟
ابزار Gunicorn یه وب‌سرور WSGI هست که به زبان پایتون نوشته شده.
یعنی چی؟ یعنی این که میتونه درخواست‌های HTTP رو بگیره و به برنامه وب شما برسونه. به زبان ساده‌تر، Gunicorn مثل یه پیشخدمت بین مشتری (کاربر) و آشپز (برنامه شما) عمل می‌کنه. ‍

چرا Gunicorn اینقدر خوبه؟
1⃣ ساده و سریع: Gunicorn خیلی ساده و سبک هست و به همین خاطر خیلی سریع کار میکنه. ⚡️

2⃣ انعطاف‌پذیر: میشه Gunicorn رو با خیلی از فریمورک‌های پایتون مثل Django و Flask استفاده کرد. ️

3⃣ قابل اعتماد: Gunicorn خیلی پایداره و کم پیش میاد که خراب بشه.

4⃣ چندین کاربر همزمان: Gunicorn میتونه همزمان درخواست‌های چندین کاربر رو پردازش کنه.

چه موقع از Gunicorn استفاده کنیم؟
وقتی میخوای یک وب‌سرور پایتون بسازی.
وقتی میخوای وب‌سرورت خیلی سریع و کارآمد باشه.
وقتی میخوای وب‌سرورت بتونه تعداد زیادی درخواست رو همزمان پردازش کنه.

چطوری از Gunicorn استفاده کنیم؟
فرض کن یک برنامه وب با Flask داریم که اسمش app.py هست. برای اجرا کردن این برنامه با Gunicorn، کافیه این دستور رو در ترمینال وارد کنیم:

gunicorn app:app --workers 4 --bind 0.0.0.0:8000 

1⃣ app:app:
این قسمت مشخص میکنه که برنامه ما کجاست و نقطه ورودش کجاست.

2⃣  --workers 4:
این گزینه مشخص میکنه که چند تا فرآیند برای پردازش درخواست‌ها ایجاد بشه.

3⃣ --bind 0.0.0.0:8000:
این گزینه مشخص میکنه که Gunicorn روی چه آدرسی و پورت گوش بده.

مزایای استفاده از Gunicorn:
1⃣ عملکرد بالا: Gunicorn یکی از سریع‌ترین وب‌سرورهای پایتون هست.

2⃣ سادگی: استفاده از Gunicorn خیلی ساده است.

3⃣ انعطاف‌پذیری: میشه Gunicorn رو با خیلی از فریمورک‌ها و ابزارهای دیگه استفاده کرد.

معایب استفاده از Gunicorn:
1⃣ فقط برای پایتون: Gunicorn فقط برای برنامه‌های پایتون قابل استفاده است.

2⃣ نیاز به کانفیگ: برای تنظیمات پیچیده، نیاز به کانفیگ کردن Gunicorn داریم.

جمع‌بندی
فهمیدیم Gunicorn یک ابزار قدرتمند و کاربردی برای ساخت وب‌سرورهای پایتون هست. اگه میخوای یک وب‌سرور سریع، قابل اعتماد و انعطاف‌پذیر داشته باشی، Gunicorn بهترین گزینه برای تو هست.

#Gunicorn #Python #WebServer #Programming #Developer #Flask #Django #WebDevelopment
🔥32👍3👏1
💎 ادامه gunicorn بخش ۲ 💎

حالا که توی پست قبلی با Gunicorn آشنا شدیم، بریم سراغ جزئیات بیشتر و تخصصی‌ترش. تو این بخش می‌خوایم Gunicorn رو از زیر و رو بررسی کنیم و ببینیم که چه قابلیت‌های پنهانی داره.

🅰 مدل کاری Gunicorn: پری فورک (Pre-fork)
باید بدونید Gunicorn از مدل پری فورک استفاده می‌کنه. یعنی وقتی که Gunicorn اجرا میشه، چندین فرآیند فرزند ایجاد می‌کنه. هر کدوم از این فرآیندها می‌تونن درخواست‌های HTTP رو به صورت مستقل پردازش کنن.
این مدل باعث میشه که Gunicorn بتونه همزمان درخواست‌های زیادی رو مدیریت کنه و عملکرد خیلی خوبی داشته باشه.

تنظیمات کلیدی Gunicorn
باید بدونید Gunicorn گزینه‌های تنظیمات زیادی داره که به شما اجازه میدن تا رفتار سرور رو به دلخواه خودتون تغییر بدید. چند تا

از مهم‌ترین این گزینه‌ها عبارتند از:
1⃣ workers:
تعداد ورکرها.

🔴 ورکر چیه؟ فکر کن یه کافه خیلی شلوغ رو تصور کن. مشتریا دارن پشت سر هم سفارش میدن و یه نفر دیگه هم داره این سفارش‌ها رو آماده می‌کنه. اون کسی که سفارش‌ها رو آماده می‌کنه، یه جوریه مثل یه ورکره!
2⃣ bind:
آدرس و پورت برای اتصال.

3⃣ timeout:
حداکثر زمانی که یک درخواست می‌تونه طول بکشه.

4⃣ daemon:
اجرا کردن Gunicorn به عنوان یک دِمون.

🔴 دیمن (Daemon) چیه؟: یه برنامه کامپیوتریه که تو پس‌زمینه سیستم اجرا میشه و منتظر اتفاق خاصی هست تا کارش رو شروع کنه. فکر کن یه نگهبان شب که بیدار میمونه و منتظره اتفاقی بیفته.
5⃣ accesslog:
مسیر فایل لاگ دسترسی.


6⃣ errorlog:
مسیر فایل لاگ خطا.

🧪 مثال یک تنظیمات کامل:
gunicorn 
app:app \
--workers 3\
--bind unix:/tmp/gunicorn.sock \
--timeout 300 \
--daemon \
--accesslog - \
--errorlog -

در این مثال، Gunicorn با 3 فرآیند ورکر اجرا میشه، به یک سوکت یونیکس متصل میشه، تایم اوت 5 دقیقه‌ای داره و خروجی‌های لاگ به خروجی استاندارد و خطای استاندارد هدایت میشه.

🖇 استفاده از Gunicorn با Nginx
برای بهبود عملکرد و امنیت، معمولاً Gunicorn رو پشت یک پروکسی معکوس مثل Nginx قرار می‌دیم. Nginx می‌تونه درخواست‌های HTTP رو دریافت کنه، آنها رو به Gunicorn پروکسی کنه و همچنین ویژگی‌هایی مثل کش کردن، بارگذاری تعادلی و SSL رو فراهم کنه.

🔩 اپشن های پیشرفته
باید بدونید Gunicorn گزینه‌های پیشرفته زیادی داره که به شما اجازه میدن تا رفتار سرور رو به طور دقیق تنظیم کنید. مثلاً می‌تونید:

1⃣ ورکر های مختلف: از ورکر های مختلفی مثل sync، eventlet، gevent و ... استفاده کنید.

2⃣ حالت توسعه: Gunicorn رو در حالت توسعه اجرا کنید تا بتونید تغییرات کد رو بدون نیاز به ریستارت کردن سرور ببینید.

3⃣ کانفیگ با فایل: تنظیمات Gunicorn رو در یک فایل قرار بدید.

✳️ مشکلات رایج و راه حل‌ها

😵 خطاهای 502: معمولاً به دلیل ترافیک زیاد یا مشکل در برنامه رخ میده.

😪 خاموش شدن ناگهانی سرور: ممکنه به دلیل مشکلات حافظه یا خطاهای برنامه رخ دهد.

😵‍💫 مشکلات در تنظیمات: بررسی کنید که تنظیمات Gunicorn و Nginx به درستی تنظیم شده باشه.


#Gunicorn #Python #WebServer #Programming #Developer #Flask #Django #WebDevelopment
20
💎 ادامه gunicorn بخش ۳ 💎

دیمن و Gunicorn: یک دوئل در پس‌زمینه سیستم

خیلی خب، بریم سراغ جزئیات جذاب‌تر! وقتی می‌گیم Gunicorn رو به عنوان دیمن اجرا می‌کنیم، یعنی چی؟ یعنی این برنامه بعد از اجرا شدن، به صورت مستقل در پس‌زمینه سیستم کارش رو ادامه می‌ده و دیگه نیازی نیست که ترمینال رو باز نگه داریم.

چرا دیمن شدن مهمه؟
1⃣ پایداری: اگه Gunicorn به عنوان دیمن اجرا بشه، حتی اگه ترمینال رو ببندیم یا سیستم رو ریستارت کنیم، همچنان به کارش ادامه می‌ده.

2⃣ مدیریت آسان‌تر: با استفاده از ابزارهای مدیریت سیستم عامل، می‌تونیم Gunicorn رو به عنوان یک سرویس سیستم‌عامل مدیریت کنیم. یعنی می‌تونیم اون رو شروع، متوقف، ریستارت و پیکربندی کنیم.

3⃣ امنیت: اجرای Gunicorn به عنوان دیمن باعث میشه که دسترسی به تنظیمات و فایل‌های آن محدود بشه.

😁 اما این داستان پیچیده‌تر از این حرف‌هاست.

وقتی Gunicorn به عنوان دیمن اجرا میشه، یک فرآیند والد ایجاد می‌کنه که وظیفه نظارت بر فرآیندهای فرزند رو بر عهده داره.
اگه یکی از فرآیندهای فرزند با مشکلی مواجه بشه، فرآیند والد اون رو تشخیص می‌ده و یک فرآیند جدید جایگزینش می‌کنه. این مکانیزم باعث میشه که Gunicorn به شدت پایدار باشه.

👀 حالا بیا یه کم فنی‌تر به قضیه نگاه کنیم.

وقتی می‌گیم Gunicorn رو به عنوان دیمن اجرا می‌کنیم، در واقع داریم از یک سیستم مدیریت فرآیند مثل systemd (در لینوکس) یا launchd (در مک) استفاده می‌کنیم. این سیستم‌ها به ما اجازه میدن تا فرآیندهای دیمن رو به صورت خودکار هنگام بوت شدن سیستم اجرا کنیم، و همچنین اون‌ها رو مدیریت کنیم.

پس به طور خلاصه:

دیمن شدن Gunicorn باعث میشه که اون به صورت مستقل و پایدار در پس‌زمینه سیستم اجرا بشه.
فرآیند والد Gunicorn وظیفه نظارت بر فرآیندهای فرزند رو بر عهده داره.
سیستم‌های مدیریت فرآیند مثل systemd به ما کمک می‌کنن تا Gunicorn رو به عنوان یک سرویس سیستم‌عامل مدیریت کنیم.

🧪 حالا بیا یه مثال عملی بزنیم.

فرض کن می‌خوای Gunicorn رو به عنوان دیمن در لینوکس اجرا کنی. می‌تونی از دستور زیر استفاده کنی:

sudo systemctl start gunicorn 


با اجرای این دستور، Gunicorn به عنوان یک سرویس سیستم‌عامل شروع به کار می‌کنه و در پس‌زمینه سیستم اجرا میشه.

پایان


#Gunicorn #Python #WebServer #Programming #Developer #Flask #Django #WebDevelopment
👍65🐳1
💎 پروتکل HTTPS 💎

امروز میخوایم در مورد یه موضوع خیلی مهم و کاربردی تو دنیای وب حرف بزنیم: HTTPS. حتما شما هم موقع وارد شدن به سایت‌های مختلف، اون علامت قفل سبز رنگ کوچولو رو کنار آدرس سایت دیدید. این قفل همون چیزیه که بهمون اطمینان میده که اطلاعاتمون تو اون سایت امنه.

حالا HTTPS چیه؟ 🤔

خب، HTTPS در واقع یه نسخه امن از همون HTTP ساده‌ای هست که همه ما باهاش آشنا هستیم. HTTP پروتکلیه که برای انتقال اطلاعات بین وب سایت ها و مرورگر ما استفاده میشه. اما مشکل HTTP اینجاست که اطلاعات رو به صورت ساده و بدون هیچ‌گونه رمزنگاری منتقل می‌کنه. یعنی هر کسی که بتونه به این اطلاعات دسترسی پیدا کنه، می‌تونه اونا رو بخونه و حتی تغییر بده.

حالا HTTPS چطور اطلاعات رو امن می‌کنه؟

پرتکل HTTPS از یه سیستم رمزنگاری قوی به اسم SSL یا TLS استفاده می‌کنه. این سیستم به این شکل کار می‌کنه:

1⃣ تبادل کلید عمومی:
سرور دوتا کلید داره کلید خصوصی و کلید عمومی اول از همه، سرور کلید عمومی خودشو به مرورگر شما میده. هر پیامی که با کلید عمومی رمزگذاری بشه فقط باکلید خصوصی میتونه رمزگشایی بشه.
2⃣ ایجاد کلید متقارن:
مرورگر یک کلید متقارن تصادفی تولید میکنه. این کلید همون کلیدی هست که برای رمزگذاری و رمزگشایی اطلاعاتی که بین سرور و کلاینت ردو بدل میشه استفاده میشه.
3⃣ رمزگذاری اطلاعات:
مرورگر کلید متقارن تولید شده رو با استفاده از کلید عمومی سرور رمزگذاری میکنه و برای سرور ارسال میکنه.
4⃣ رمزگشایی اطلاعات:
سرور با استفاده از کلید خصوصی که داره، کلید متقارن رمزگذاری شده رو رمزگشایی میکنه و به کلید متقارن اصلی دسترسی پیدا میکنه.


از این مرحله به بعد، تمام داده‌هایی که بین مرورگر و سرور رد و بدل میشه، با استفاده از کلید متقارن رمزگذاری میشن.
و هم مرورگر و هم سرور با استفاده از کلید متقارن مشترک، داده‌های رمزگذاری شده رو رمزگشایی می‌کنند.
چرا HTTPS مهمه؟

1⃣ امنیت اطلاعات: مهم‌ترین دلیل استفاده از HTTPS، امنیت اطلاعاتیه. با استفاده از HTTPS، اطلاعات شما مثل رمز عبور، اطلاعات کارت بانکی و... به صورت امن منتقل میشه و هکرها نمی‌تونن به راحتی به اونها دسترسی پیدا کنن.

2⃣ جلوگیری از حملات Man-in-the-Middl HTTPS از شما در برابر حملات Man-in-the-Middle محافظت می‌کنه. در این نوع حملات، هکرها خودشون رو بین شما و سرور قرار میدن و اطلاعاتی که بین شما و سرور رد و بدل میشه رو می‌دزدن.

3⃣ اعتماد کاربران: وقتی کاربری ببینه که یه سایت از HTTPS استفاده می‌کنه، به اون سایت اعتماد بیشتری می‌کنه و خیالش راحت‌تره که اطلاعات شخصی‌ش امنه.

کلام آخر
فهمیدیم که HTTPS یه فناوری خیلی مهم و کاربردیه که برای امنیت اطلاعات تو دنیای اینترنت ضروری هست. پس همیشه سعی کنید از سایت‌هایی که از HTTPS استفاده می‌کنن استفاده کنید و اطلاعات شخصی خودتون رو در اختیار سایت‌هایی که از HTTPS استفاده نمی‌کنن قرار ندید.

امید وارم مفید واقع شده باشه :)

ممنون میشم با ریکشن زدن و شیر کردن از ما حمایت کنید❤️


#رمزنگاری #https #امنیت_اطلاعات #webdevelopment #امنیت_اینترنتی

@ninja_learn_ir
7🔥4