💎 همه چیز درمورد Authorization درجنگو 💎
خب، توی پست قبلی درباره Authentication یا همون احراز هویت صحبت کردیم.
حالا نوبت به مرحله بعدی یعنی Authorization (مجوز دسترسی) رسیده 🔓 اینجا میخوایم بررسی کنیم که بعد از اینکه کاربر احراز هویت شد، چطور میتونیم مشخص کنیم به چه بخشهایی از سایت یا اپلیکیشن دسترسی داشته باشه. 🚪
1⃣ حالا Authorization چیه؟ 🤔
2⃣ استفاده از Permissions در جنگو 🛡️
3⃣ ـGroup-Based Permissions 👥
4⃣ پیادهسازی Authorization در API ها 🔐
5⃣ ـObject-Level Permissions 🛠️
6⃣ احراز هویت بر اساس Role 🏷️
فهمیدیم Authorization یکی از مهمترین بخشهای هر اپلیکیشن وبه و با استفاده از اون میتونید دسترسی کاربران رو به خوبی مدیریت کنید. امنیت همیشه باید اولویت باشه، پس حواستون باشه که مجوزها رو درست تنظیم کنید تا کسی نتونه از طریق ضعفهای امنیتی به بخشهای حساس دسترسی پیدا کنه. 🕵️♀️
امید وارم مفید بوده باشه :) ❤️
@ninja_learn_ir
خب، توی پست قبلی درباره Authentication یا همون احراز هویت صحبت کردیم.
حالا نوبت به مرحله بعدی یعنی Authorization (مجوز دسترسی) رسیده 🔓 اینجا میخوایم بررسی کنیم که بعد از اینکه کاربر احراز هویت شد، چطور میتونیم مشخص کنیم به چه بخشهایی از سایت یا اپلیکیشن دسترسی داشته باشه. 🚪
1⃣ حالا Authorization چیه؟ 🤔
به طور ساده، Authorization یعنی تعیین سطح دسترسی کاربر به منابع مختلف. مثلا فرض کنید توی یه اپلیکیشن خبری دارید؛ نویسندهها اجازه دارن مقاله بنویسن، ولی فقط مدیران میتونن اونا رو منتشر کنن. 📝 اینجا Authorization تعیین میکنه که کی به چی دسترسی داشته باشه.
2⃣ استفاده از Permissions در جنگو 🛡️
جنگو به صورت پیشفرض یه سیستم Permission داره که با استفاده از اون میتونید برای هر مدل (Model) مشخص کنید که کدوم کاربر یا گروه به چه عملیاتی دسترسی داشته باشه.
چطور پیادهسازیش کنیم؟ 🤔
میتونید از مجوزهای پیشفرض جنگو استفاده کنید که شامل add ، change delete و view هستن.
برای ایجاد مجوزهای اختصاصی هم میتونید توی مدلها (Model) از Meta و permissions استفاده کنید و مجوز های جدید تعریف کنید.
3⃣ ـGroup-Based Permissions 👥
یکی از امکانات عالی جنگو، سیستم گروهبندی کاربراست. شما میتونید کاربرا رو توی گروههای مختلف دستهبندی کنید و بعد براساس هر گروه، مجوزهای مختلفی بهشون بدید. مثلا یه گروه مدیران (Admins) داشته باشید که همه مجوزها رو دارن، و یه گروه کاربران عادی (Users) که دسترسی محدودتری دارن.
چطور پیادهسازیش کنیم؟ 🤔
اول باید گروهها رو از طریق پنل ادمین جنگو یا از طریق کد بسازید.
بعدش میتونید کاربرا رو به گروهها اضافه کنید و مجوزهای خاص رو به گروهها اختصاص بدید.
4⃣ پیادهسازی Authorization در API ها 🔐
اگه دارید یه API میسازید، میتونید از Django Rest Framework برای مدیریت پرمیشن استفاده کنید. DRF به شما اجازه میده از کلاسهای Permission استفاده کنید تا کنترل کاملی روی این داشته باشید که چه کسی به چه چیزی دسترسی داره.
چطور پیادهسازیش کنیم؟ 🤔
میتونید از permissions.IsAuthenticated برای اطمینان از اینکه فقط کاربران احراز هویت شده به API دسترسی دارن، استفاده کنید.
همچنین میتونید مجوزهای سفارشی بسازید و ازشون استفاده کنید. مثلا permissions.IsAdminUser برای ادمینها.
5⃣ ـObject-Level Permissions 🛠️
این نوع مجوزها وقتی به کار میاد که بخواید دسترسیها رو بر اساس هر شیء خاص تعیین کنید. مثلا یه کاربر فقط بتونه پروفایل خودش رو ببینه و نه پروفایل بقیه کاربرا. جنگو و DRF هر دو از این نوع مجوزها پشتیبانی میکنن.
چطور پیادهسازیش کنیم؟ 🤔
برای DRF میتونید BasePermission رو کاستومایز کنید و لاجیک خودتون رو برای هر شیء پیاده کنید.
میتونید از روشهای مختلف مثل اورراید کردن متد get_object در ویوهای DRF استفاده کنید.
6⃣ احراز هویت بر اساس Role 🏷️
یکی از روشهای پیشرفتهتر برای Authorization، استفاده از Roleهاست. توی این روش، هر کاربر یه نقش یا Role داره و مجوزها بر اساس این نقشها تعیین میشن.جمعبندی 🧩
چطور پیادهسازیش کنیم؟
میتونید از پکیجهایی مثل django-role-permissions استفاده کنید.
رول های مختلف رو تعریف کنید و به هر رول یه سری مجوز اختصاص بدید.
فهمیدیم Authorization یکی از مهمترین بخشهای هر اپلیکیشن وبه و با استفاده از اون میتونید دسترسی کاربران رو به خوبی مدیریت کنید. امنیت همیشه باید اولویت باشه، پس حواستون باشه که مجوزها رو درست تنظیم کنید تا کسی نتونه از طریق ضعفهای امنیتی به بخشهای حساس دسترسی پیدا کنه. 🕵️♀️
#django #backend #auth
❤10👍3🔥2🤩1
〰💎 آپلود فایل در S3 با استفاده از جنگو 💎〰
امروز قراره درباره یکی از موضوعات پرکاربرد و جذاب توی دنیای جنگو صحبت کنیم: آپلود فایل با استفاده از باکت S3! 🎉
📦 باکت S3 چیه و چرا باید ازش استفاده کنیم؟
باکت S3 یا همون Simple Storage Service یکی از سرویسهای محبوب آمازون وب سرویس (AWS) هست که بهت این امکان رو میده فایلهات رو توی فضای ابری ذخیره کنی. این سرویس به خاطر ویژگیهایی مثل مقیاسپذیری بالا امنیت قوی و سرعت زیاد خیلی طرفدار داره.
یه مثال بزنم
فرض کن یه پروژه جنگویی داری که توش کلی فایل مثل عکس، ویدیو یا حتی فایلهای حجیم باید ذخیره بشن. به جای اینکه این فایلها رو روی سرور خودت نگه داری و نگران فضای ذخیرهسازی باشی، میتونی از S3 استفاده کنی تا همه چیز توی فضای ابری مدیریت بشه. 🚀
🎯 حالا چطور میتونیم توی جنگو فایل هارو روی باکت S3 آپلود کنیم؟
برای آپلود فایلها در S3 با جنگو، چند تا مرحله رو باید انجام بدیم:
📥 نصب کتابخانههای مورد نیاز:
اول از همه باید کتابخانههای
⚙ تنظیمات AWS در پروژه جنگو:
حالا باید توی فایل
🔧 تنظیمات پیشرفته S3:
میتونیم تنظیمات بیشتری رو برای بهینهسازی آپلود و دسترسی به فایلها اضافه کنیم:
- AWS_QUERYSTRING_AUTH
حالا هر وقت که بخوای فایلی رو آپلود کنی، به جای اینکه روی سرور ذخیره بشه، به صورت مستقیم به S3 ارسال میشه. خیلی راحته، نه؟ 😎 البته توی جنگو انقدر راحته😅
🧾 تنظیم مسیرهای فایل:
💡 نکات اضافی و پیشنهادها:
🛡 ایمنسازی:
امیدوارم این آموزش برات مفید بوده باشه :) ❤️
@ninja_learn_ir
امروز قراره درباره یکی از موضوعات پرکاربرد و جذاب توی دنیای جنگو صحبت کنیم: آپلود فایل با استفاده از باکت S3! 🎉
📦 باکت S3 چیه و چرا باید ازش استفاده کنیم؟
باکت S3 یا همون Simple Storage Service یکی از سرویسهای محبوب آمازون وب سرویس (AWS) هست که بهت این امکان رو میده فایلهات رو توی فضای ابری ذخیره کنی. این سرویس به خاطر ویژگیهایی مثل مقیاسپذیری بالا امنیت قوی و سرعت زیاد خیلی طرفدار داره.
یه مثال بزنم
فرض کن یه پروژه جنگویی داری که توش کلی فایل مثل عکس، ویدیو یا حتی فایلهای حجیم باید ذخیره بشن. به جای اینکه این فایلها رو روی سرور خودت نگه داری و نگران فضای ذخیرهسازی باشی، میتونی از S3 استفاده کنی تا همه چیز توی فضای ابری مدیریت بشه. 🚀
🎯 حالا چطور میتونیم توی جنگو فایل هارو روی باکت S3 آپلود کنیم؟
برای آپلود فایلها در S3 با جنگو، چند تا مرحله رو باید انجام بدیم:
📥 نصب کتابخانههای مورد نیاز:
اول از همه باید کتابخانههای
django-storages
و boto3
رو نصب کنیم. django-storages
واسه اتصال جنگو به S3 و boto3
برای تعامل با AWS استفاده میشه.pip install django-storages && boto3
⚙ تنظیمات AWS در پروژه جنگو:
حالا باید توی فایل
settings.py
تنظیمات AWS رو اضافه کنیم. برای این کار به AWS_ACCESS_KEY_ID
و AWS_SECRET_ACCESS_KEY
نیاز داری که میتونی از کنسول AWS بگیری.AWS_ACCESS_KEY_ID = 'کلید دسترسیات'
AWS_SECRET_ACCESS_KEY = 'کلید محرمانهات'
AWS_STORAGE_BUCKET_NAME = 'اسم باکتت'
AWS_S3_REGION_NAME = 'منطقه جغرافیایی S3'
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
🔧 تنظیمات پیشرفته S3:
میتونیم تنظیمات بیشتری رو برای بهینهسازی آپلود و دسترسی به فایلها اضافه کنیم:
AWS_QUERYSTRING_AUTH = False
AWS_DEFAULT_ACL = None
AWS_S3_FILE_OVERWRITE = False
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
- AWS_QUERYSTRING_AUTH
:
لینکهای فایلهات بدون امضای موقت ساخته میشن.
-
AWS_DEFAULT_ACL:
سطح دسترسی پیشفرض باکت رو اعمال میکنه.
-
AWS_S3_FILE_OVERWRITE:
اگر فایل جدیدی با همون نام آپلود بشه، فایل قبلی حذف نمیشه.
📂 آپلود فایل:حالا هر وقت که بخوای فایلی رو آپلود کنی، به جای اینکه روی سرور ذخیره بشه، به صورت مستقیم به S3 ارسال میشه. خیلی راحته، نه؟ 😎 البته توی جنگو انقدر راحته😅
🧾 تنظیم مسیرهای فایل:
در نهایت میتونیم مسیرهای مربوط به فایلهای استاتیک و مدیا رو هم به S3 متصل کنیم:
AWS_LOCATION = 'media'
STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/'
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}/
💡 نکات اضافی و پیشنهادها:
🛡 ایمنسازی:
هیچوقت📟 استفاده از presigned URLs:AWS_ACCESS_KEY_ID
و AWS_SECRET_ACCESS_KEY رو توی کد قرار نده. بهتره از متغیرهای محیطی (Environment Variables) استفاده کنی تا امنیت اطلاعاتت حفظ بشه.
اگه میخوای کاربرها مستقیم از سمت کلاینت فایلها رو آپلود کنن میتونی از presigned URLs استفاده کنی که هم امنتره و هم سریعتر.🔬 مانیتورینگ و مدیریت فایلها:
با استفاده از سرویسهایی مثل CloudWatch یا S3 Events میتونی عملیاتهای مربوط به فایلها رو بهتر مدیریت کنی.
#django #s3 #aws #cloud_sto
👍9🔥3👎2
💎 شورت کات ها درجنگو 💎
توی این پست میخوام درمورد یکسری شورتکات هایی که کمتر کسی بهشون توجه میکنه رو معرفی کنم
1⃣
این شورتکات یه پله بالا تر از
2⃣
اگه تا حالا از
3⃣
شاید با
4⃣
اگه دوست داری یه ارور 404 رو مستقیم دستی بندازی،
5⃣
اگه تو پروژههای پیچیدهتر میخوای بدونی که کاربر الان تو کدوم سایت یا دامنه قرار داره (مثلا تو پروژههایی که از multi-site استفاده میکنن)،
این شورتکاتها میتونن واقعاً تو پروژههای پیچیدهتر جنگویی به کارت بیان و کارت رو راحت تر کنن.
امیدوارم این لیست براتون مفید باشه ✌️
@ninja_learn_ir
توی این پست میخوام درمورد یکسری شورتکات هایی که کمتر کسی بهشون توجه میکنه رو معرفی کنم
1⃣
render_to_string
🧩این شورتکات یه پله بالا تر از
render
هست. اگه میخوای تمپلیت رو به یه رشته (string) تبدیل کنی، مثلا برای ارسال ایمیل یا ساختن پیام خاص، render_to_string
کارت رو راه میندازه. خیلی شیک و مجلسی میتونی تمپلیت رو رندر کنی و به جای HTML کامل، فقط رشته رو داشته باشی:from django.template.loader import render_to_string
def send_email():
message = render_to_string('email_template.html', {'key': 'value'})
# حالا میتونی message رو به عنوان متن ایمیل بفرستی
2⃣
resolve_url
🔗اگه تا حالا از
reverse
استفاده کردی، این یکی هم خیلی شبیه به اونه ولی یه خورده هوشمندتر. resolve_url
میتونه هم نام ویو رو به URL تبدیل کنه و هم خودش چک میکنه که اگه ورودی URL باشه، مستقیم همون رو برگردونه. پس دیگه نیاز نیست نگران باشی چی بهش میدی:from django.shortcuts import resolve_url
def my_view(request):
url = resolve_url('some-view-name-or-url')
# ادامه کارا
3⃣
HttpResponsePermanentRedirect
🚦شاید با
HttpResponseRedirect
آشنا باشی، ولی این یکی یه Redirect دائمی (کد 301) برمیگردونه. این وقتی خوبه که میخوای URL جدید رو دائمی کنی و به موتورهای جستجو بگی که این مسیر دیگه همیشه اینجاست:from django.http import HttpResponsePermanentRedirect
def my_view(request):
return HttpResponsePermanentRedirect('/new-url/')
4⃣
Http404
🚫اگه دوست داری یه ارور 404 رو مستقیم دستی بندازی،
Http404
بهترین گزینهست. این طوری میتونی خودت خیلی شیک کنترل کنی که کجاها ارور 404 داده بشه:from django.shortcuts import Http404
def my_view(request):
if not some_condition:
raise Http404("این صفحه وجود نداره!")
# ادامه کارا
5⃣
get_current_site
🌍اگه تو پروژههای پیچیدهتر میخوای بدونی که کاربر الان تو کدوم سایت یا دامنه قرار داره (مثلا تو پروژههایی که از multi-site استفاده میکنن)،
get_current_site
خیلی کاربردیه:from django.contrib.sites.shortcuts import get_current_site
def my_view(request):
current_site = get_current_site(request)
# حالا میتونی با current_site هر کاری کنی
این شورتکاتها میتونن واقعاً تو پروژههای پیچیدهتر جنگویی به کارت بیان و کارت رو راحت تر کنن.
#Django #Python #کدنویسی #شورتکات #توسعه_وب #برنامه_نویسی
❤8
💎 ساخت کامندهای کاستوم توی جنگو 💎
امروز میخوام یه موضوع خفن از جنگو رو بهتون توضیح بدم، اینکه چجوری میتونیم کامندهای کاستوم توی جنگو بسازیم. 😎
احتمالاً تا حالا با کامندهای پیشفرض جنگو مثل migrate, makemigrations, یا runserver کار کردید، ولی خب بعضی وقتا پیش میاد که نیاز داریم یه سری کارهای خاص رو توی پروژه انجام بدیم که با این کامندها نمیشه. اینجاست که کامندهای کاستوم وارد میشن! 🤓
مراحل ساخت کامند کاستوم توی جنگو
1⃣ ساخت پوشه management/commands
اول باید توی یکی از اپلیکیشنهاتون یه پوشه به اسم management بسازی و داخلش یه پوشه دیگه به اسم commands بذاری. این پوشه جاییه که همه کامندهای کاستومت توش قرار میگیره. یادت باشه که توی هر دو پوشه باید فایل init.py رو هم بسازی که پایتون این پوشهها رو بشناسه.
مسیرش میشه چیزی شبیه این:
2⃣ ساخت فایل کامند
حالا نوبت اینه که کامند خودتو بسازی فرض کنیم میخوای یه کامند بسازی که اطلاعات کاربرا رو پرینت کنه. یه فایل به اسم print_users.py داخل پوشه commands بساز و این کد رو داخلش بذار:
اینجا:
- از کلاس BaseCommand استفاده کردیم تا یه کامند جدید بسازیم.
- متد handle جاییه که منطق اصلی کامند رو مینویسیم. هرچی تو این متد بنویسی موقع اجرای کامند اجرا میشه.
- با self.stdout.write میتونیم پیامها رو توی کنسول پرینت کنیم.
3⃣ اجرای کامند
بعد از اینکه فایل رو ساختی، برای اجرای کامندت، میتونی این دستور رو توی ترمینال وارد کنی:
اگه همه چیز درست باشه، لیست کاربرا رو توی کنسول میبینی. 🎉
امکانات بیشتر
میتونی کامندت رو حرفهایتر هم بکنی:
- با اضافه کردن آرگومان (مثل python manage.py print_users --active برای کاربرای فعال)
- یا استفاده از ورودیهای کاربر (مثل پرسیدن سوال توی ترمینال و دریافت جواب)
مثال اضافه کردن آرگومان:
حالا اگه --active رو اضافه کنی، فقط کاربرای فعال رو نشون میده.
جمعبندی🎯
ساختن کامندهای کاستوم توی جنگو یه راه عالیه برای انجام کارهای خاصی که شاید توی پروژت نیاز داشته باشی. به راحتی میتونی با چندتا پوشه و یه کلاس ساده کامند دلخواهتو بسازی و کارای پیچیده رو توی پروژه راحتتر مدیریت کنی😎
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوام یه موضوع خفن از جنگو رو بهتون توضیح بدم، اینکه چجوری میتونیم کامندهای کاستوم توی جنگو بسازیم. 😎
احتمالاً تا حالا با کامندهای پیشفرض جنگو مثل migrate, makemigrations, یا runserver کار کردید، ولی خب بعضی وقتا پیش میاد که نیاز داریم یه سری کارهای خاص رو توی پروژه انجام بدیم که با این کامندها نمیشه. اینجاست که کامندهای کاستوم وارد میشن! 🤓
مراحل ساخت کامند کاستوم توی جنگو
1⃣ ساخت پوشه management/commands
اول باید توی یکی از اپلیکیشنهاتون یه پوشه به اسم management بسازی و داخلش یه پوشه دیگه به اسم commands بذاری. این پوشه جاییه که همه کامندهای کاستومت توش قرار میگیره. یادت باشه که توی هر دو پوشه باید فایل init.py رو هم بسازی که پایتون این پوشهها رو بشناسه.
مسیرش میشه چیزی شبیه این:
|— your_app/
|— management/
|— __init__.py
|—commands/
|— __init__.py
2⃣ ساخت فایل کامند
حالا نوبت اینه که کامند خودتو بسازی فرض کنیم میخوای یه کامند بسازی که اطلاعات کاربرا رو پرینت کنه. یه فایل به اسم print_users.py داخل پوشه commands بساز و این کد رو داخلش بذار:
from django.core.management.base import BaseCommand
from your_app.models import User
class Command(BaseCommand):
help = 'چاپ کردن لیست کاربرا'
def handle(self, *args, **kwargs):
users = User.objects.all()
for user in users:
self.stdout.write(self.style.SUCCESS(f'User: {user.username}'))
اینجا:
- از کلاس BaseCommand استفاده کردیم تا یه کامند جدید بسازیم.
- متد handle جاییه که منطق اصلی کامند رو مینویسیم. هرچی تو این متد بنویسی موقع اجرای کامند اجرا میشه.
- با self.stdout.write میتونیم پیامها رو توی کنسول پرینت کنیم.
3⃣ اجرای کامند
بعد از اینکه فایل رو ساختی، برای اجرای کامندت، میتونی این دستور رو توی ترمینال وارد کنی:
python manage.py print_users
اگه همه چیز درست باشه، لیست کاربرا رو توی کنسول میبینی. 🎉
امکانات بیشتر
میتونی کامندت رو حرفهایتر هم بکنی:
- با اضافه کردن آرگومان (مثل python manage.py print_users --active برای کاربرای فعال)
- یا استفاده از ورودیهای کاربر (مثل پرسیدن سوال توی ترمینال و دریافت جواب)
مثال اضافه کردن آرگومان:
def add_arguments(self, parser):
parser.add_argument('--active', action='store_true', help='فقط کاربرای فعال')
حالا اگه --active رو اضافه کنی، فقط کاربرای فعال رو نشون میده.
جمعبندی🎯
ساختن کامندهای کاستوم توی جنگو یه راه عالیه برای انجام کارهای خاصی که شاید توی پروژت نیاز داشته باشی. به راحتی میتونی با چندتا پوشه و یه کلاس ساده کامند دلخواهتو بسازی و کارای پیچیده رو توی پروژه راحتتر مدیریت کنی😎
#backend #django
👍9❤3🔥2🥰1
💎 خب Uvicorn چیه و چرا مهمه؟ 💎
سلام دوستان! امروز میخوام در مورد Uvicorn صحبت کنم که شاید به گوشتون خورده باشه، مخصوصاً اگه با FastAPI یا Starlette کار کرده باشید. 😎
حالا Uvicorn چیه؟
خب Uvicorn یه ASGI سرور خیلی سریع و سبک هست که برای اجرای اپلیکیشنهای پایتونی که از پروتکل ASGI استفاده میکنن، طراحی شده. برعکس WSGI که واسه فریمورکهای سنتی مثل Django و Flask استفاده میشه، ASGI این قابلیت رو داره که اپلیکیشنهای آسنکرون (async) رو هندل کنه. 🚀
به زبون سادهتر، اگه بخوای یه اپلیکیشن پایتونی سریع و مقیاسپذیر بسازی که هم درخواستهای همزمان رو بهخوبی هندل کنه و هم نیاز به عملکرد بالا داشته باشه، Uvicorn گزینهی ایدهآلیه. 💥
مزایای Uvicorn
سرعت بالا 🚀:
یکی از اصلیترین دلایل محبوبیت Uvicorn سرعت بالاشه. بهخاطر استفاده از کتابخونههای بهینه مثل uvloop و httptools.
پشتیبانی از async ⚡ :
خب Uvicorn به طور کامل از async و await پشتیبانی میکنه، که این یعنی تو میتونی باهاش اپلیکیشنهای خیلی مقیاسپذیر بسازی که درخواستهای زیادی رو بهطور همزمان هندل کنن.
سادگی در استفاده 🛠️:
استفاده از Uvicorn خیلی سادهست و به راحتی میتونی اونو با FastAPI یا هر فریمورکی که از ASGI پشتیبانی میکنه استفاده کنی.
چجوری Uvicorn رو نصب و اجرا کنیم؟
نصب Uvicorn فوقالعاده سادهست. با یه دستور میتونی نصبش کنی:
بعد از نصب، کافیه اپلیکیشنت رو اجرا کنی. فرض کن یه اپلیکیشن FastAPI داری:
اینجا
حالا Uvicorn کجاها کاربرد داره؟
اگه با فریمورکهایی مثل FastAPI کار میکنی یا حتی میخوای از اپلیکیشنهای سنگین و با تعداد درخواست بالا پشتیبانی کنی، حتماً باید از Uvicorn استفاده کنی. مثلاً برای APIهای real-time، وبسرویسها و اپلیکیشنهای چت Uvicorn میتونه فوقالعاده مفید باشه.
جمعبندی 🎯
در کل، Uvicorn یه سرور سریع، سبک و مقیاسپذیره که اگه با اپلیکیشنهای آسنکرون کار میکنی یا میخوای عملکرد بالایی توی هندل کردن درخواستها داشته باشی، بهترین گزینهست. 😎🔥
امید وارم مفید بوده باشه :)
@ninja_learn_ir
سلام دوستان! امروز میخوام در مورد Uvicorn صحبت کنم که شاید به گوشتون خورده باشه، مخصوصاً اگه با FastAPI یا Starlette کار کرده باشید. 😎
حالا Uvicorn چیه؟
خب Uvicorn یه ASGI سرور خیلی سریع و سبک هست که برای اجرای اپلیکیشنهای پایتونی که از پروتکل ASGI استفاده میکنن، طراحی شده. برعکس WSGI که واسه فریمورکهای سنتی مثل Django و Flask استفاده میشه، ASGI این قابلیت رو داره که اپلیکیشنهای آسنکرون (async) رو هندل کنه. 🚀
به زبون سادهتر، اگه بخوای یه اپلیکیشن پایتونی سریع و مقیاسپذیر بسازی که هم درخواستهای همزمان رو بهخوبی هندل کنه و هم نیاز به عملکرد بالا داشته باشه، Uvicorn گزینهی ایدهآلیه. 💥
مزایای Uvicorn
سرعت بالا 🚀:
یکی از اصلیترین دلایل محبوبیت Uvicorn سرعت بالاشه. بهخاطر استفاده از کتابخونههای بهینه مثل uvloop و httptools.
پشتیبانی از async ⚡ :
خب Uvicorn به طور کامل از async و await پشتیبانی میکنه، که این یعنی تو میتونی باهاش اپلیکیشنهای خیلی مقیاسپذیر بسازی که درخواستهای زیادی رو بهطور همزمان هندل کنن.
سادگی در استفاده 🛠️:
استفاده از Uvicorn خیلی سادهست و به راحتی میتونی اونو با FastAPI یا هر فریمورکی که از ASGI پشتیبانی میکنه استفاده کنی.
چجوری Uvicorn رو نصب و اجرا کنیم؟
نصب Uvicorn فوقالعاده سادهست. با یه دستور میتونی نصبش کنی:
pip install uvicorn
بعد از نصب، کافیه اپلیکیشنت رو اجرا کنی. فرض کن یه اپلیکیشن FastAPI داری:
uvicorn main:app --reload
اینجا
main
اسم فایل و app
اسم اپلیکیشنی هست که توش تعریف شده. با سویچ --reload
هم Uvicorn در حالت توسعه قرار میگیره و هر تغییری که بدی بهصورت خودکار اعمال میشه.حالا Uvicorn کجاها کاربرد داره؟
اگه با فریمورکهایی مثل FastAPI کار میکنی یا حتی میخوای از اپلیکیشنهای سنگین و با تعداد درخواست بالا پشتیبانی کنی، حتماً باید از Uvicorn استفاده کنی. مثلاً برای APIهای real-time، وبسرویسها و اپلیکیشنهای چت Uvicorn میتونه فوقالعاده مفید باشه.
جمعبندی 🎯
در کل، Uvicorn یه سرور سریع، سبک و مقیاسپذیره که اگه با اپلیکیشنهای آسنکرون کار میکنی یا میخوای عملکرد بالایی توی هندل کردن درخواستها داشته باشی، بهترین گزینهست. 😎🔥
#django #uvcorn #web_server #asgi_server
👍6❤2
💎 پکیج Django Cleanup مدیریت خودکار فایلهای اضافی 💎
امروز میخوام در مورد یه کتابخونه خیلی کاربردی به اسم Django Cleanup صحبت کنم که کلی از مشکلات مربوط به مدیریت فایلها رو توی پروژههای جنگو حل میکنه. 😎 اگه تا حالا با فایلهای اضافی و بیاستفاده دستوپنجه نرم کردی، این کتابخونه میتونه حسابی به کارت بیاد.
حالا Django Cleanup چیه؟ 🤔
به طور خلاصه، Django Cleanup به صورت خودکار فایلها و تصویرهای ذخیرهشده توی پروژه رو مدیریت میکنه. فرض کن یه فایل یا عکس توی پروژه آپلود کردی و بعد اون رکورد یا مدل رو حذف کردی. معمولاً فایل مرتبط توی سرور باقی میمونه و فضای سرور رو اشغال میکنه. 😒 Django Cleanup این فایلهای اضافی رو به صورت خودکار حذف میکنه تا دیگه نیاز نباشه خودت دستی این کارو انجام بدی.
چرا Django Cleanup کاربردیه؟ 🤔
1⃣ مدیریت خودکار فایلهای اضافه 🗑️:
2⃣ جلوگیری از انباشت فایلهای اضافی 🚮:
3⃣ ساده و راحت در استفاده 🛠️:
چطوری نصبش کنیم؟ 🛠️
نصب و استفاده از Django Cleanup خیلی سادهست. اول از همه باید نصبش کنی:
بعد از نصب، باید این کتابخونه رو به تنظیمات جنگو اضافه کنی:
همین دیگه نیازی نیست کاری انجام بدی. از این به بعد هر وقت رکوردی که فایل داره حذف بشه، فایلهای مرتبط هم پاک میشن.
مثال از استفاده 📂
فرض کن یه مدل ساده برای کاربر داری که یه عکس آپلود میکنه:
وقتی یه پروفایل کاربر رو حذف میکنی، فایل avatar مربوط به اون کاربر هم به صورت خودکار از پوشه
جمعبندی
فهمیدیم Django Cleanup یه ابزار خیلی ساده ولی قدرتمنده که کمک میکنه پروژههات تمیز و منظم بمونه و از انباشت فایلهای بیاستفاده جلوگیری کنی. اگه توی پروژههات با فایلهای زیادی سروکار داری، حتماً از این کتابخونه استفاده کن تا کارت راحتتر بشه 🔥
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوام در مورد یه کتابخونه خیلی کاربردی به اسم Django Cleanup صحبت کنم که کلی از مشکلات مربوط به مدیریت فایلها رو توی پروژههای جنگو حل میکنه. 😎 اگه تا حالا با فایلهای اضافی و بیاستفاده دستوپنجه نرم کردی، این کتابخونه میتونه حسابی به کارت بیاد.
حالا Django Cleanup چیه؟ 🤔
به طور خلاصه، Django Cleanup به صورت خودکار فایلها و تصویرهای ذخیرهشده توی پروژه رو مدیریت میکنه. فرض کن یه فایل یا عکس توی پروژه آپلود کردی و بعد اون رکورد یا مدل رو حذف کردی. معمولاً فایل مرتبط توی سرور باقی میمونه و فضای سرور رو اشغال میکنه. 😒 Django Cleanup این فایلهای اضافی رو به صورت خودکار حذف میکنه تا دیگه نیاز نباشه خودت دستی این کارو انجام بدی.
چرا Django Cleanup کاربردیه؟ 🤔
1⃣ مدیریت خودکار فایلهای اضافه 🗑️:
بعد از حذف رکوردهای مدل، فایلهای مرتبط بهش هم خود به خود حذف میشن.
2⃣ جلوگیری از انباشت فایلهای اضافی 🚮:
نیازی نیست که خودت دنبال فایلهای قدیمی بگردی و پاکشون کنی. این کتابخونه همه چیز رو برات مرتب میکنه.
3⃣ ساده و راحت در استفاده 🛠️:
فقط با نصب و یه سری تنظیمات ساده، همه چی رو هندل میکنه.
چطوری نصبش کنیم؟ 🛠️
نصب و استفاده از Django Cleanup خیلی سادهست. اول از همه باید نصبش کنی:
pip install django-cleanup
بعد از نصب، باید این کتابخونه رو به تنظیمات جنگو اضافه کنی:
INSTALLED_APPS = [
# بقیه اپها...
'django_cleanup.apps.CleanupConfig',
]
همین دیگه نیازی نیست کاری انجام بدی. از این به بعد هر وقت رکوردی که فایل داره حذف بشه، فایلهای مرتبط هم پاک میشن.
مثال از استفاده 📂
فرض کن یه مدل ساده برای کاربر داری که یه عکس آپلود میکنه:
class UserProfile(models.Model):
avatar = models.ImageField(upload_to='avatars/')
وقتی یه پروفایل کاربر رو حذف میکنی، فایل avatar مربوط به اون کاربر هم به صورت خودکار از پوشه
avatars/
پاک میشه و دیگه فضای اضافی نمیگیره.جمعبندی
فهمیدیم Django Cleanup یه ابزار خیلی ساده ولی قدرتمنده که کمک میکنه پروژههات تمیز و منظم بمونه و از انباشت فایلهای بیاستفاده جلوگیری کنی. اگه توی پروژههات با فایلهای زیادی سروکار داری، حتماً از این کتابخونه استفاده کن تا کارت راحتتر بشه 🔥
#django #django_clean_up #trick
👍11❤2🔥1🥰1👌1
🐇 استفاده از RabbitMQ برای Celery توی جنگو 🥦
امروز میخوایم در مورد Celery و RabbitMQ حرف بزنیم و ببینیم چطوری میتونیم از این دو تا ابزار خفن برای مدیریت کارهای پسزمینه توی Django استفاده کنیم 😎.
حالا Celery چیه؟ 🍃
اگه نمیدونید سلری چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
حالا RabbitMQ چیه؟ 🐇
اگه نمیدونید ربیت ام کیو چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
چرا باید از RabbitMQ برای Celery استفاده کنیم؟ 🧐
1⃣ پایداری و سرعت: RabbitMQ خیلی سریع و پایدار کار میکنه و میتونه حجم زیادی از پیامها رو مدیریت کنه.
2⃣ مقیاسپذیری (Scalability):
اگه پروژهات بزرگ شد، RabbitMQ میتونه بدون مشکل تسکهای بیشتری رو هندل کنه.
3⃣ پشتیبانی از Celery: Celery به خوبی با RabbitMQ سازگاره و به راحتی میتونن با هم کار کنن.
چجوری RabbitMQ رو برای Celery توی جنگو تنظیم کنیم؟ 🛠️
خب، بیایید بریم سراغ بخش فنی و ببینیم چطور میتونیم از RabbitMQ و Celery توی جنگو استفاده کنیم.
1⃣ نصب RabbitMQ و Celery
اول از همه باید RabbitMQ رو نصب کنی. اگه از اوبونتو استفاده میکنی، این دستور رو بزن:
حالا Celery رو نصب کن:
2⃣ تنظیمات Celery توی پروژه جنگو
توی پروژه جنگوت، یه فایل جدید به اسم
بعد توی فایل init.py پروژهات این خط رو اضافه کن تا Celery لود بشه:
3⃣ تنظیمات RabbitMQ توی settings.py:
توی settings.py، تنظیمات مربوط به RabbitMQ رو به Celery اضافه کن:
4⃣ ساختن تسکها (Tasks)
حالا که تنظیمات انجام شد، میتونیم تسکهای پسزمینه رو بسازیم. توی هر اپلیکیشنی که تسکها رو میخوای ایجاد کنی، یه فایل tasks.py بساز و تسکهات رو توش تعریف کن:
5⃣ اجرای Celery Worker
برای اینکه Celery تسکها رو هندل کنه، Worker راه بندازی. با این دستور میتونی Worker رو اجرا کنی:
جمعبندی 🎯
فهمیدیم RabbitMQ و Celery یه ترکیب عالی برای اجرای تسکهای پسزمینه توی پروژههای جنگو هستن. با استفاده از RabbitMQ بهعنوان message broker و Celery برای مدیریت تسکها، میتونی کارهای سنگین و زمانبر رو به صورت پسزمینه اجرا کنی و تجربه کاربری اپلیکیشن رو بهتر کنی 😎
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم در مورد Celery و RabbitMQ حرف بزنیم و ببینیم چطوری میتونیم از این دو تا ابزار خفن برای مدیریت کارهای پسزمینه توی Django استفاده کنیم 😎.
حالا Celery چیه؟ 🍃
اگه نمیدونید سلری چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
حالا RabbitMQ چیه؟ 🐇
اگه نمیدونید ربیت ام کیو چیه و چیکار میکنه میتونید به این پست سر بزنید 😉
چرا باید از RabbitMQ برای Celery استفاده کنیم؟ 🧐
1⃣ پایداری و سرعت: RabbitMQ خیلی سریع و پایدار کار میکنه و میتونه حجم زیادی از پیامها رو مدیریت کنه.
2⃣ مقیاسپذیری (Scalability):
اگه پروژهات بزرگ شد، RabbitMQ میتونه بدون مشکل تسکهای بیشتری رو هندل کنه.
3⃣ پشتیبانی از Celery: Celery به خوبی با RabbitMQ سازگاره و به راحتی میتونن با هم کار کنن.
چجوری RabbitMQ رو برای Celery توی جنگو تنظیم کنیم؟ 🛠️
خب، بیایید بریم سراغ بخش فنی و ببینیم چطور میتونیم از RabbitMQ و Celery توی جنگو استفاده کنیم.
1⃣ نصب RabbitMQ و Celery
اول از همه باید RabbitMQ رو نصب کنی. اگه از اوبونتو استفاده میکنی، این دستور رو بزن:
sudo apt-get install rabbitmq-server
حالا Celery رو نصب کن:
pip install celery
2⃣ تنظیمات Celery توی پروژه جنگو
توی پروژه جنگوت، یه فایل جدید به اسم
celery.py
بساز و تنظیمات Celery رو توش بنویس. این فایل معمولاً توی کنار settings.py قرار میگیره.from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
بعد توی فایل init.py پروژهات این خط رو اضافه کن تا Celery لود بشه:
from .celery import app as celery_app
3⃣ تنظیمات RabbitMQ توی settings.py:
توی settings.py، تنظیمات مربوط به RabbitMQ رو به Celery اضافه کن:
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
4⃣ ساختن تسکها (Tasks)
حالا که تنظیمات انجام شد، میتونیم تسکهای پسزمینه رو بسازیم. توی هر اپلیکیشنی که تسکها رو میخوای ایجاد کنی، یه فایل tasks.py بساز و تسکهات رو توش تعریف کن:
from celery import shared_task
@shared_task
def send_email_task(email_address):
# کد ارسال ایمیل
print(f"ایمیل به {email_address} ارسال شد.")
5⃣ اجرای Celery Worker
برای اینکه Celery تسکها رو هندل کنه، Worker راه بندازی. با این دستور میتونی Worker رو اجرا کنی:
celery -A your_project worker --loglevel=info
جمعبندی 🎯
فهمیدیم RabbitMQ و Celery یه ترکیب عالی برای اجرای تسکهای پسزمینه توی پروژههای جنگو هستن. با استفاده از RabbitMQ بهعنوان message broker و Celery برای مدیریت تسکها، میتونی کارهای سنگین و زمانبر رو به صورت پسزمینه اجرا کنی و تجربه کاربری اپلیکیشن رو بهتر کنی 😎
#django #celery #rabbitmq #ambq
👍6❤3🔥3
💎 استفاده از PostgreSQL با Django 💎
امروز میخوایم درباره PostgreSQL و اینکه چرا این دیتابیس رابطهای با Django فوقالعاده مچ میشه، صحبت کنیم. همچنین چندتا از فیچرهای خاصی که جنگو برای این دیتابیس داره رو معرفی میکنیم
چرا PostgreSQL؟ 🤔
خب PostgreSQL یه دیتابیس رابطهای قدرتمنده که خیلیها بهش میگن "Postgres". این دیتابیس اوپن سورس، خیلی خوب با Django هماهنگ میشه و خیلی امکانات و قابلیتهای پیشرفتهای رو ارائه میده که وقتی با جنگو کار میکنی حسابی به درد میخوره. از جمله پشتیبانی از JSONB، قفلهای پیچیده، پارتیشنبندی دادهها و ... 😍
چطوری از PostgreSQL توی Django استفاده کنیم؟ 🛠️
1⃣ اول از همه، باید مطمئن شی که PostgreSQL رو نصب داری.
2⃣ بعدش توی پروژه جنگویی، توی فایل settings.py باید دیتابیس رو به Postgres وصل کنی. یه همچین چیزی:
فیچرهای خاص Django برای PostgreSQL 📦
1⃣ مدلهای JSONField 📄
با استفاده از Postgres توی Django، میتونی از فیلد JSONField استفاده کنی. این فیلد بهت اجازه میده که دادههای JSON رو بهراحتی توی دیتابیس ذخیره کنی و بعداً کوئریهای خفن روشون بزنی! دیگه نیازی نیست همیشه ساختار دادهت فقط رابطهای باشه.
2⃣ فیلد ArrayField 🔢
اگه یه لیست یا آرایه داری و میخوای اون رو مستقیم توی دیتابیس ذخیره کنی، ArrayField بهترین انتخابه. با این فیلد، میتونی یه لیست از مقادیر (مثلاً یه سری عدد یا استرینگ) رو توی یه ستون ذخیره کنی.
خب HStore یه قابلیت خاص توی Postgresه که بهت اجازه میده دادههای کلید-مقدار (key-value) رو توی دیتابیس ذخیره کنی. Django از این فیلد پشتیبانی میکنه و باهاش میتونی دادههایی شبیه به دیکشنری رو ذخیره کنی.
این فیلد بهت اجازه میده که رِنجها رو توی دیتابیس ذخیره کنی. مثلاً میخوای یه بازه تاریخی یا عددی رو نگهداری، این فیلد دقیقاً به درد همون کار میخوره.
خب Postgres قابلیت جستجوی متنی پیشرفته داره و Django هم از این قابلیت پشتیبانی میکنه. با استفاده از این فیچر میتونی بهصورت سریع و بهینه توی متنها جستجو کنی.
استفاده از PostgreSQL توی Django یه انتخاب خیلی خوبه، چون هم دیتابیس قویایه و هم فیچرهای اختصاصی زیادی برای جنگو داره که میتونه کارتو سریعتر و راحتتر کنه. از ذخیره JSON گرفته تا جستجوی متنی، Postgres و Django یه ترکیب طلایین
امیدوارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم درباره PostgreSQL و اینکه چرا این دیتابیس رابطهای با Django فوقالعاده مچ میشه، صحبت کنیم. همچنین چندتا از فیچرهای خاصی که جنگو برای این دیتابیس داره رو معرفی میکنیم
چرا PostgreSQL؟ 🤔
خب PostgreSQL یه دیتابیس رابطهای قدرتمنده که خیلیها بهش میگن "Postgres". این دیتابیس اوپن سورس، خیلی خوب با Django هماهنگ میشه و خیلی امکانات و قابلیتهای پیشرفتهای رو ارائه میده که وقتی با جنگو کار میکنی حسابی به درد میخوره. از جمله پشتیبانی از JSONB، قفلهای پیچیده، پارتیشنبندی دادهها و ... 😍
چطوری از PostgreSQL توی Django استفاده کنیم؟ 🛠️
1⃣ اول از همه، باید مطمئن شی که PostgreSQL رو نصب داری.
2⃣ بعدش توی پروژه جنگویی، توی فایل settings.py باید دیتابیس رو به Postgres وصل کنی. یه همچین چیزی:
DATABASES = {حالا میتونی از قابلیتهای خفن Postgres استفاده کنی و دیتابیس پروژهت رو به یه سطح بالاتر ببری! 🚀
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
فیچرهای خاص Django برای PostgreSQL 📦
1⃣ مدلهای JSONField 📄
با استفاده از Postgres توی Django، میتونی از فیلد JSONField استفاده کنی. این فیلد بهت اجازه میده که دادههای JSON رو بهراحتی توی دیتابیس ذخیره کنی و بعداً کوئریهای خفن روشون بزنی! دیگه نیازی نیست همیشه ساختار دادهت فقط رابطهای باشه.
from django.db import models
class MyModel(models.Model):
data = models.JSONField()
2⃣ فیلد ArrayField 🔢
اگه یه لیست یا آرایه داری و میخوای اون رو مستقیم توی دیتابیس ذخیره کنی، ArrayField بهترین انتخابه. با این فیلد، میتونی یه لیست از مقادیر (مثلاً یه سری عدد یا استرینگ) رو توی یه ستون ذخیره کنی.
from django.contrib.postgres.fields import ArrayField3⃣ فیلد HStore 🗂️
from django.db import models
class MyModel(models.Model):
tags = ArrayField(models.CharField(max_length=100), blank=True)
خب HStore یه قابلیت خاص توی Postgresه که بهت اجازه میده دادههای کلید-مقدار (key-value) رو توی دیتابیس ذخیره کنی. Django از این فیلد پشتیبانی میکنه و باهاش میتونی دادههایی شبیه به دیکشنری رو ذخیره کنی.
from django.contrib.postgres.fields import HStoreField4⃣ فیلد Range 📏
from django.db import models
class MyModel(models.Model):
attributes = HStoreField()
این فیلد بهت اجازه میده که رِنجها رو توی دیتابیس ذخیره کنی. مثلاً میخوای یه بازه تاریخی یا عددی رو نگهداری، این فیلد دقیقاً به درد همون کار میخوره.
from django.contrib.postgres.fields import DateRangeField5⃣ و در اخر Full-Text Search 🔍
from django.db import models
class MyModel(models.Model):
date_range = DateRangeField()
خب Postgres قابلیت جستجوی متنی پیشرفته داره و Django هم از این قابلیت پشتیبانی میکنه. با استفاده از این فیچر میتونی بهصورت سریع و بهینه توی متنها جستجو کنی.
from django.contrib.postgres.search import SearchVectorجمعبندی 🎯
from .models import MyModel
MyModel.objects.annotate(search=SearchVector('title', 'description')).filter(search='keyword')
استفاده از PostgreSQL توی Django یه انتخاب خیلی خوبه، چون هم دیتابیس قویایه و هم فیچرهای اختصاصی زیادی برای جنگو داره که میتونه کارتو سریعتر و راحتتر کنه. از ذخیره JSON گرفته تا جستجوی متنی، Postgres و Django یه ترکیب طلایین
#django #postgressql #postgres
🔥12❤6
💎 معرفی فریمورک Locust 💎
امروز میخوام یه فریمورک خفن برای تست بار بهتون معرفی کنم: Locust
حالا Locust چیه؟ 🐛
خب Locust یه فریمورک open-source برای تست بار (Load Testing) و بررسی عملکرد (Performance Testing) اپلیکیشنهاست. با Locust میتونی هزاران کاربر شبیهسازی کنی و ببینی وقتی کلی درخواست به سرورت میاد، چطور رفتار میکنه. بر خلاف خیلی از ابزارهای تست بار، Locust از پایتون استفاده میکنه که باعث میشه راحت و منعطف باشه 😍
چرا Locust؟ 💡
1⃣ ساده و قابلفهم: توی Locust کد تست رو با پایتون مینویسی، یعنی اگه با پایتون آشنا باشی، خیلی سریع میتونی تستها رو پیاده کنی.
2⃣ قابلیت گسترش: Locust بهت اجازه میده که به راحتی تعداد کاربران رو افزایش بدی و رفتار واقعی کاربرها رو شبیهسازی کنی.
3⃣ داشبورد وب: یه رابط کاربری وب خفن داره که میتونی تستها رو از اونجا مدیریت کنی و نتایج رو همون لحظه ببینی 📊
4⃣ انعطافپذیر: با هر API یا وب اپلیکیشنی سازگار هست و میتونی برای اپلیکیشنهای REST، SOAP و حتی اپلیکیشنهای استاتیک ازش استفاده کنی.
چطور از LOCUST استفاده کنیم؟ 🚀
برای استفاده، کافیه Locust رو نصب کنی:
بعدش میتونی یه تست ساده بنویسی. مثلاً:
این تست داره هر 1 تا 5 ثانیه یه درخواست به آدرسی که مشخص کردی میفرسته. وقتی تست رو اجرا کنی، میتونی کاربرهای شبیهسازی شده رو تنظیم کنی و نتایج رو از داشبورد ببینی.
اجرای تست 🖥️
وقتی تستت رو نوشتی، با دستور زیر میتونی Locust رو اجرا کنی:
حالا برو به آدرس
جمعبندی 🎯
فهمیدیم Locust یکی از بهترین فریمورکها برای تست بار و عملکرده. باهاش میتونی بفهمی سرورت تحت فشار چطوری کار میکنه و کلی امکانات داره که کارو برات راحت میکنه. حتماً امتحانش کن و ببین چقدر کارتو راحتتر میکنه.
امید وارم براتون مفید بود باشه :)
@ninja_learn_ir
امروز میخوام یه فریمورک خفن برای تست بار بهتون معرفی کنم: Locust
حالا Locust چیه؟ 🐛
خب Locust یه فریمورک open-source برای تست بار (Load Testing) و بررسی عملکرد (Performance Testing) اپلیکیشنهاست. با Locust میتونی هزاران کاربر شبیهسازی کنی و ببینی وقتی کلی درخواست به سرورت میاد، چطور رفتار میکنه. بر خلاف خیلی از ابزارهای تست بار، Locust از پایتون استفاده میکنه که باعث میشه راحت و منعطف باشه 😍
چرا Locust؟ 💡
1⃣ ساده و قابلفهم: توی Locust کد تست رو با پایتون مینویسی، یعنی اگه با پایتون آشنا باشی، خیلی سریع میتونی تستها رو پیاده کنی.
2⃣ قابلیت گسترش: Locust بهت اجازه میده که به راحتی تعداد کاربران رو افزایش بدی و رفتار واقعی کاربرها رو شبیهسازی کنی.
3⃣ داشبورد وب: یه رابط کاربری وب خفن داره که میتونی تستها رو از اونجا مدیریت کنی و نتایج رو همون لحظه ببینی 📊
4⃣ انعطافپذیر: با هر API یا وب اپلیکیشنی سازگار هست و میتونی برای اپلیکیشنهای REST، SOAP و حتی اپلیکیشنهای استاتیک ازش استفاده کنی.
چطور از LOCUST استفاده کنیم؟ 🚀
برای استفاده، کافیه Locust رو نصب کنی:
pip install locust
بعدش میتونی یه تست ساده بنویسی. مثلاً:
from locust import HttpUser, task, between
class MyUser(HttpUser):
wait_time = between(1, 5)
@task
def my_test(self):
self.client.get("/some-url")
این تست داره هر 1 تا 5 ثانیه یه درخواست به آدرسی که مشخص کردی میفرسته. وقتی تست رو اجرا کنی، میتونی کاربرهای شبیهسازی شده رو تنظیم کنی و نتایج رو از داشبورد ببینی.
اجرای تست 🖥️
وقتی تستت رو نوشتی، با دستور زیر میتونی Locust رو اجرا کنی:
locust -f my_test_file.py
حالا برو به آدرس
https://localhost:8089
تا داشبورد Locust رو ببینی و اپتو تست کنی.جمعبندی 🎯
فهمیدیم Locust یکی از بهترین فریمورکها برای تست بار و عملکرده. باهاش میتونی بفهمی سرورت تحت فشار چطوری کار میکنه و کلی امکانات داره که کارو برات راحت میکنه. حتماً امتحانش کن و ببین چقدر کارتو راحتتر میکنه.
#python #django #locust
🔥10👍5❤3
💎 عملیاتهای IO Bound و CPU Bound در جنگو 💎
امروز میخوایم درباره عملیاتهای IO Bound و CPU Bound صحبت کنیم و اینکه این دو نوع عملیات چطور روی عملکرد اپلیکیشنهای جنگو تاثیر میذاره.
حالا IO Bound چیه؟ 🤔
عملیاتهای IO Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف ورود و خروج دادهها میشه. مثلاً وقتی داریم با دیتابیس، فایلها یا شبکه کار میکنیم. این نوع عملیات معمولاً منتظر میمونن تا دادهها از دیسک یا شبکه بیاد.
مثالهایی از IO Bound:
- خوندن و نوشتن در دیتابیس
- ارسال یا دریافت دادهها از API
- بارگذاری فایلها
حالا CPU Bound چیه؟ 🧠
عملیاتهای CPU Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف محاسبات سنگین میشه. یعنی برای پردازش و محاسبات نیاز به قدرت پردازشی بالا دارن. در اینجا عملکرد CPU نقش کلیدی رو ایفا میکنه.
مثالهایی از CPU Bound:
- پردازش تصاویر و ویدئوها
- انجام محاسبات ریاضی پیچیده
- اجرای الگوریتمهای پیچیده
تفاوتهای اصلی بین IO Bound و CPU Bound 🔍
1⃣ مدت زمان انتظار:
-عملیات های IO Bound معمولاً منتظر ورود و خروج دادهها هستن و زمان زیادی رو صرف این کار میکنن.
- عملیات های CPU Bound بیشتر زمانشون رو برای پردازش و محاسبات صرف میکنن.
2⃣ تکنیکهای بهینهسازی:
- برای عملیاتهای IO Bound میتونی از Async و Threading استفاده کنی تا زمان انتظار رو کاهش بدی.
- برای CPU Bound باید به سراغ Multiprocessing بری تا بتونی از چند هسته CPU به طور همزمان استفاده کنی.
چطور در جنگو با اینها کار کنیم؟ 🚀
- برای IO Bound:
میتونی از
- برای CPU Bound:
میتونی از ماژول
جمعبندی 🎯
درک تفاوتهای بین IO Bound و CPU Bound میتونه بهت کمک کنه تا اپلیکیشنهای جنگو رو بهتر بهینهسازی کنی. اگه عملیاتهای IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم درباره عملیاتهای IO Bound و CPU Bound صحبت کنیم و اینکه این دو نوع عملیات چطور روی عملکرد اپلیکیشنهای جنگو تاثیر میذاره.
حالا IO Bound چیه؟ 🤔
عملیاتهای IO Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف ورود و خروج دادهها میشه. مثلاً وقتی داریم با دیتابیس، فایلها یا شبکه کار میکنیم. این نوع عملیات معمولاً منتظر میمونن تا دادهها از دیسک یا شبکه بیاد.
مثالهایی از IO Bound:
- خوندن و نوشتن در دیتابیس
- ارسال یا دریافت دادهها از API
- بارگذاری فایلها
حالا CPU Bound چیه؟ 🧠
عملیاتهای CPU Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف محاسبات سنگین میشه. یعنی برای پردازش و محاسبات نیاز به قدرت پردازشی بالا دارن. در اینجا عملکرد CPU نقش کلیدی رو ایفا میکنه.
مثالهایی از CPU Bound:
- پردازش تصاویر و ویدئوها
- انجام محاسبات ریاضی پیچیده
- اجرای الگوریتمهای پیچیده
تفاوتهای اصلی بین IO Bound و CPU Bound 🔍
1⃣ مدت زمان انتظار:
-عملیات های IO Bound معمولاً منتظر ورود و خروج دادهها هستن و زمان زیادی رو صرف این کار میکنن.
- عملیات های CPU Bound بیشتر زمانشون رو برای پردازش و محاسبات صرف میکنن.
2⃣ تکنیکهای بهینهسازی:
- برای عملیاتهای IO Bound میتونی از Async و Threading استفاده کنی تا زمان انتظار رو کاهش بدی.
- برای CPU Bound باید به سراغ Multiprocessing بری تا بتونی از چند هسته CPU به طور همزمان استفاده کنی.
چطور در جنگو با اینها کار کنیم؟ 🚀
- برای IO Bound:
میتونی از
async
و await
استفاده کنی تا درخواستها به صورت غیر همزمان انجام بشن و سرعت اپلیکیشن بالا بره.- برای CPU Bound:
میتونی از ماژول
concurrent.futures
و ProcessPoolExecutor
استفاده کنی تا کارهای سنگین رو در چند پروسه اجرا کنی.جمعبندی 🎯
درک تفاوتهای بین IO Bound و CPU Bound میتونه بهت کمک کنه تا اپلیکیشنهای جنگو رو بهتر بهینهسازی کنی. اگه عملیاتهای IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.
#iobound #cpubound #python #django
⚡7❤3👍3
💎 معرفی پکیج honeypot 💎
امروز میخوام درباره یه پکیج خفن برای جنگو به اسم django-admin-honeypot صحبت کنم که به شما کمک میکنه جلوی دسترسیهای غیرمجاز به پنل ادمین پروژهتون رو بگیرین. این پکیج بهصورت حرفهای میتونه هکرها و رباتهایی که سعی دارن به پنل ادمین سایتتون دسترسی پیدا کنن رو گیر بندازه 😎
حالا django-admin-honeypot چیه؟ 🤔
خب django-admin-honeypot یه پکیج امنیتی برای Django هست که یک صفحه لاگین جعلی برای پنل ادمین شما ایجاد میکنه. این صفحه شبیه به صفحه لاگین اصلی به نظر میرسه، ولی در واقع تلهایه که کاربرهای غیرمجاز رو فریب میده تا اطلاعات ورودشون رو وارد کنن. از این طریق، شما میتونید بهراحتی متوجه بشید چه افرادی قصد دسترسی به پنل شما رو دارن. 💀
چه فایدهای داره؟ 🤷♂️
1⃣ ردیابی حملات:
شما میتونین هر کسی که سعی داره بدون اجازه وارد پنل ادمین بشه رو شناسایی کنین.
2⃣ کاهش ریسک حملات:
هکرها به اشتباه فکر میکنن وارد صفحه اصلی شدن و شما میتونین از این فرصت استفاده کنین تا حمله رو مدیریت کنین.
3⃣ سادگی استفاده:
بدون نیاز به تغییرات پیچیده توی پروژهتون، بهراحتی میتونید این پکیج رو نصب و استفاده کنین.
چطور از django-admin-honeypot استفاده کنیم؟ 🚀
1⃣ نصب پکیج
برای شروع، کافیه پکیج رو نصب کنی:
2⃣ اضافه کردن به پروژه
بعد از نصب، باید django-admin-honeypot رو به تنظیمات پروژه اضافه کنی. توی فایل
3⃣ تنظیمات URL
حالا وقتشه که یه مسیر جعلی برای پنل ادمین بسازی! توی فایل
نتیجه:
- مسیر
- مسیر
4⃣ تست و بررسی
حالا اگه کسی به
جمع بندی 🎯
فهمیدیم استفاده از django-admin-honeypot یه راه عالی برای گمراه کردن هکرها و افرادیه که سعی دارن به پنل ادمین شما دسترسی پیدا کنن. با ساختن یه تله ساده، میتونین از دسترسیهای غیرمجاز جلوگیری کنین و امنیت پروژهتون رو بالاتر ببرین.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوام درباره یه پکیج خفن برای جنگو به اسم django-admin-honeypot صحبت کنم که به شما کمک میکنه جلوی دسترسیهای غیرمجاز به پنل ادمین پروژهتون رو بگیرین. این پکیج بهصورت حرفهای میتونه هکرها و رباتهایی که سعی دارن به پنل ادمین سایتتون دسترسی پیدا کنن رو گیر بندازه 😎
حالا django-admin-honeypot چیه؟ 🤔
خب django-admin-honeypot یه پکیج امنیتی برای Django هست که یک صفحه لاگین جعلی برای پنل ادمین شما ایجاد میکنه. این صفحه شبیه به صفحه لاگین اصلی به نظر میرسه، ولی در واقع تلهایه که کاربرهای غیرمجاز رو فریب میده تا اطلاعات ورودشون رو وارد کنن. از این طریق، شما میتونید بهراحتی متوجه بشید چه افرادی قصد دسترسی به پنل شما رو دارن. 💀
چه فایدهای داره؟ 🤷♂️
1⃣ ردیابی حملات:
شما میتونین هر کسی که سعی داره بدون اجازه وارد پنل ادمین بشه رو شناسایی کنین.
2⃣ کاهش ریسک حملات:
هکرها به اشتباه فکر میکنن وارد صفحه اصلی شدن و شما میتونین از این فرصت استفاده کنین تا حمله رو مدیریت کنین.
3⃣ سادگی استفاده:
بدون نیاز به تغییرات پیچیده توی پروژهتون، بهراحتی میتونید این پکیج رو نصب و استفاده کنین.
چطور از django-admin-honeypot استفاده کنیم؟ 🚀
1⃣ نصب پکیج
برای شروع، کافیه پکیج رو نصب کنی:
pip install django-admin-honeypot
2⃣ اضافه کردن به پروژه
بعد از نصب، باید django-admin-honeypot رو به تنظیمات پروژه اضافه کنی. توی فایل
settings.py
خط زیر رو اضافه کن:INSTALLED_APPS = [
# برنامههای دیگه
'admin_honeypot',
]
3⃣ تنظیمات URL
حالا وقتشه که یه مسیر جعلی برای پنل ادمین بسازی! توی فایل
urls.py
این تغییرات رو اعمال کن:from django.urls import path, include
import admin_honeypot.urls
urlpatterns = [
path('admin/', include('admin_honeypot.urls', namespace='admin_honeypot')),
path('real-admin/', admin.site.urls), # مسیر اصلی پنل ادمین واقعیتون
]
نتیجه:
- مسیر
/admin/
حالا صفحه جعلی ادمینه که تلهی شماست 😈 - مسیر
/real-admin/
هم مسیر واقعی پنل ادمین شماست که فقط خودتون میدونید.4⃣ تست و بررسی
حالا اگه کسی به
/admin/
بره و سعی کنه وارد پنل بشه، اطلاعات تلاشهاش توی لاگها ذخیره میشه و میتونین بررسی کنین که چه کسی سعی داشته پنل ادمین رو هک کنه. هر لاگ شامل زمان، آیپی و اطلاعات لاگین اشتباه فرد مهاجم میشه. 📜جمع بندی 🎯
فهمیدیم استفاده از django-admin-honeypot یه راه عالی برای گمراه کردن هکرها و افرادیه که سعی دارن به پنل ادمین شما دسترسی پیدا کنن. با ساختن یه تله ساده، میتونین از دسترسیهای غیرمجاز جلوگیری کنین و امنیت پروژهتون رو بالاتر ببرین.
#django #honeypot
👍12❤2🔥1👏1
💎 معرفی GraphQL و استفاده ازش 💎
اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمیدونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟
حالا GraphQL چیه؟ 🤔
خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه میده که دقیقاً همون دادههایی که نیاز دارین رو از سرور درخواست کنین. مهمترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، میتونین مشخص کنین چه دادههایی رو دقیقاً میخواین و چه دادههایی رو نمیخواین.
به زبان ساده، GraphQL به شما کنترل بیشتری روی دادههایی که از API میگیرین میده. 🌍
چرا از GraphQL استفاده کنیم؟ 🤷♂️
1⃣ دریافت دادههای دقیق 🎯
و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:
این یعنی فقط همون دادههایی که خواستین برمیگرده و هیچ اطلاعات اضافهای به شما داده نمیشه.
2⃣ بهینهسازی درخواستها 🚀
این بهینهسازی توی عملکرد و سرعت، تاثیر زیادی روی تجربه کاربری داره. 💡
3⃣ پشتیبانی از تکامل تدریجی 💻
1⃣ فیسبوک: همونطور که گفته شد، GraphQL توسط فیسبوک ایجاد شد و فیسبوک همچنان از اون توی بسیاری از محصولات خودش استفاده میکنه، مثل اپلیکیشن فیسبوک و اینستاگرام.
2⃣ گیت هاب: GraphQL به عنوان یک API اصلی توی GitHub استفاده میشه و شما میتونین از طریق GraphQL به اطلاعات پروژهها و کاربران GitHub دسترسی داشته باشین.
3⃣ شاپیفای (Shopify): توی پلتفرم Shopify، از GraphQL برای بهینهسازی و سرعت بخشیدن به APIها استفاده میشه.
حچطور از GraphQL استفاده کنیم؟ 🛠️
راهاندازی GraphQL توی پروژههای مختلف واقعاً سادهست. توی پلتفرمهایی مثل Django یا Node.js، پکیجها و کتابخونههای آمادهای وجود دارن که شما میتونین سریعاً ازشون استفاده کنین.
برای مثال، در Django، شما میتونین با استفاده از Graphene-Django خیلی راحت یه API GraphQL بسازین.
توجه ⚠️:
این فقط یه مثال ساده برای شروع هستش:
و بعد توی پروژهتون:
این کد یه کوئری ساده به اسم
جمعبندی 🎯
فهمیدیم GraphQL با انعطافپذیری و سرعت بالا، باعث میشه که APIهای بهتری طراحی کنین و تجربه کاربری بهتری ارائه بدین.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمیدونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟
حالا GraphQL چیه؟ 🤔
خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه میده که دقیقاً همون دادههایی که نیاز دارین رو از سرور درخواست کنین. مهمترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، میتونین مشخص کنین چه دادههایی رو دقیقاً میخواین و چه دادههایی رو نمیخواین.
به زبان ساده، GraphQL به شما کنترل بیشتری روی دادههایی که از API میگیرین میده. 🌍
چرا از GraphQL استفاده کنیم؟ 🤷♂️
1⃣ دریافت دادههای دقیق 🎯
یکی از بزرگترین مشکلاتی که معماریهای سنتی API دارن اینه که گاهی دادههایی که لازم نداریم رو هم به ما برمیگردونن. GraphQL این مشکل رو حل کرده. شما توی GraphQL میتونین کاملاً مشخص کنین که چه فیلدهایی از دادهها رو نیاز دارین و فقط همونها رو از سرور بگیرین.مثال: فرض کنین میخواین فقط اسم و ایمیل کاربر رو از API بگیرین. کوئری GraphQL میتونه اینطوری باشه:
{
user(id: 1) {
name
}
}
و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:
{
"data": {
"user": {
"name": "Ali",
"email": "[email protected]"
}
}
}
این یعنی فقط همون دادههایی که خواستین برمیگرده و هیچ اطلاعات اضافهای به شما داده نمیشه.
2⃣ بهینهسازی درخواستها 🚀
یکی از مشکلات رایج توی APIهای سنتی، تعداد زیاد درخواستها (requests) برای گرفتن اطلاعات مختلفه. GraphQL به شما این امکان رو میده که با یک درخواست همه دادههای مورد نیازتون رو بگیرین. شما میتونین توی یه کوئری، اطلاعات از چندین منبع مختلف رو دریافت کنین و نیازی به ارسال چندین درخواست نیست.مثال: فرض کنین میخواین اطلاعات کاربر، لیست سفارشها و محصولاتی که خریده رو بگیرین. کوئری GraphQL بهراحتی این اطلاعات رو توی یک درخواست برمیگردونه:
{
user(id: 1) {
name
orders {
id
product {
name
price
}
}
}
}
این بهینهسازی توی عملکرد و سرعت، تاثیر زیادی روی تجربه کاربری داره. 💡
3⃣ پشتیبانی از تکامل تدریجی 💻
یکی از ویژگیهای مهم GraphQL اینه که بهراحتی میتونین API خودتون رو بدون اینکه تغییرات بزرگی به وجود بیارین، توسعه بدین. این یعنی میتونین فیلدهای جدیدی به دادههاتون اضافه کنین بدون اینکه نیاز به تغییر توی کل API داشته باشین. این قابلیت، انعطافپذیری زیادی توی توسعه و نگهداری API داره.4⃣ مستندات خودکار 📚
یکی دیگه از ویژگیهای عالی GraphQL، مستندسازی خودکارشه. از اونجایی که GraphQL یک سیستم تایپینگ قوی داره، میتونه بهصورت خودکار مستندات API رو بسازه و شما همیشه مستندات بهروز و کاملی دارین. این خیلی به درد تیمهای توسعهای میخوره که از پروژههای مختلف استفاده میکنن و همیشه باید به مستندات دقیق دسترسی داشته باشن.کاربردهای واقعی GraphQL 📈
1⃣ فیسبوک: همونطور که گفته شد، GraphQL توسط فیسبوک ایجاد شد و فیسبوک همچنان از اون توی بسیاری از محصولات خودش استفاده میکنه، مثل اپلیکیشن فیسبوک و اینستاگرام.
2⃣ گیت هاب: GraphQL به عنوان یک API اصلی توی GitHub استفاده میشه و شما میتونین از طریق GraphQL به اطلاعات پروژهها و کاربران GitHub دسترسی داشته باشین.
3⃣ شاپیفای (Shopify): توی پلتفرم Shopify، از GraphQL برای بهینهسازی و سرعت بخشیدن به APIها استفاده میشه.
حچطور از GraphQL استفاده کنیم؟ 🛠️
راهاندازی GraphQL توی پروژههای مختلف واقعاً سادهست. توی پلتفرمهایی مثل Django یا Node.js، پکیجها و کتابخونههای آمادهای وجود دارن که شما میتونین سریعاً ازشون استفاده کنین.
برای مثال، در Django، شما میتونین با استفاده از Graphene-Django خیلی راحت یه API GraphQL بسازین.
توجه ⚠️:
این فقط یه مثال ساده برای شروع هستش:
pip install graphene-django
و بعد توی پروژهتون:
import graphene
class Query(graphene.ObjectType):
hello = graphene.String()
def resolve_hello(self, info):
return "Hello, world!"
schema = graphene.Schema(query=Query)
این کد یه کوئری ساده به اسم
hello
میسازه که وقتی از GraphQL درخواست بشه، مقدار "Hello, world!"
رو برمیگردونه.جمعبندی 🎯
فهمیدیم GraphQL با انعطافپذیری و سرعت بالا، باعث میشه که APIهای بهتری طراحی کنین و تجربه کاربری بهتری ارائه بدین.
#django #api #graphql
🔥16👍3❤2