Ninja Learn | نینجا لرن
1.26K subscribers
101 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
💎 همه چیز درمورد Authorization درجنگو 💎

خب، توی پست قبلی درباره 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


@ninja_learn_ir
10👍3🔥2🤩1
💎 آپلود فایل در S3 با استفاده از جنگو 💎

امروز قراره درباره یکی از موضوعات پرکاربرد و جذاب توی دنیای جنگو صحبت کنیم: آپلود فایل با استفاده از باکت 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}/

💡 نکات اضافی و پیشنهادها:

🛡 ایمن‌سازی
:
هیچوقت AWS_ACCESS_KEY_ID و AWS_SECRET_ACCESS_KEY رو توی کد قرار نده. بهتره از متغیرهای محیطی (Environment Variables) استفاده کنی تا امنیت اطلاعاتت حفظ بشه.
📟 استفاده از presigned URLs:
اگه می‌خوای کاربرها مستقیم از سمت کلاینت فایل‌ها رو آپلود کنن می‌تونی از presigned URLs استفاده کنی که هم امن‌تره و هم سریع‌تر.
🔬 مانیتورینگ و مدیریت فایل‌ها:
با استفاده از سرویس‌هایی مثل CloudWatch یا S3 Events می‌تونی عملیات‌های مربوط به فایل‌ها رو بهتر مدیریت کنی.

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

#django #s3 #aws #cloud_sto


@ninja_learn_ir
👍9🔥3👎2
💎 شورت کات ها درجنگو 💎
توی این پست میخوام درمورد یکسری شورتکات هایی که کمتر کسی بهشون توجه میکنه رو معرفی کنم

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 #کدنویسی #شورتکات #توسعه_وب #برنامه_نویسی


@ninja_learn_ir
8
💎 ساخت کامندهای کاستوم توی جنگو 💎

امروز می‌خوام یه موضوع خفن از جنگو رو بهتون توضیح بدم، اینکه چجوری می‌تونیم کامندهای کاستوم توی جنگو بسازیم. 😎

احتمالاً تا حالا با کامندهای پیش‌فرض جنگو مثل 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


@ninja_learn_ir
👍93🔥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 فوق‌العاده ساده‌ست. با یه دستور می‌تونی نصبش کنی:

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

@ninja_learn_ir
👍62
💎 پکیج Django Cleanup مدیریت خودکار فایل‌های اضافی 💎

امروز می‌خوام در مورد یه کتابخونه خیلی کاربردی به اسم 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


@ninja_learn_ir
👍112🔥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 رو نصب کنی. اگه از اوبونتو استفاده می‌کنی، این دستور رو بزن:

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


@ninja_learn_ir
👍63🔥3
💎 استفاده از PostgreSQL با Django 💎

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

چرا PostgreSQL؟ 🤔
خب PostgreSQL یه دیتابیس رابطه‌ای قدرتمنده که خیلی‌ها بهش میگن "Postgres". این دیتابیس اوپن سورس، خیلی خوب با Django هماهنگ میشه و خیلی امکانات و قابلیت‌های پیشرفته‌ای رو ارائه میده که وقتی با جنگو کار می‌کنی حسابی به درد می‌خوره. از جمله پشتیبانی از JSONB، قفل‌های پیچیده، پارتیشن‌بندی داده‌ها و ... 😍

چطوری از PostgreSQL توی Django استفاده کنیم؟ 🛠️

1⃣ اول از همه، باید مطمئن شی که PostgreSQL رو نصب داری.

2⃣ بعدش توی پروژه جنگویی، توی فایل settings.py باید دیتابیس رو به Postgres وصل کنی. یه همچین چیزی:
  
  
   DATABASES = {
       'default': {
           'ENGINE': 'django.db.backends.postgresql',
           'NAME': 'your_db_name',
           'USER': 'your_db_user',
           'PASSWORD': 'your_db_password',
           'HOST': 'localhost',
           'PORT': '5432',
       }
   }
  
حالا می‌تونی از قابلیت‌های خفن Postgres استفاده کنی و دیتابیس پروژه‌ت رو به یه سطح بالاتر ببری! 🚀

فیچرهای خاص 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 ArrayField
   from django.db import models

   class MyModel(models.Model):
       tags = ArrayField(models.CharField(max_length=100), blank=True)
3⃣ فیلد HStore 🗂️ 
خب HStore یه قابلیت خاص توی Postgresه که بهت اجازه میده داده‌های کلید-مقدار (key-value) رو توی دیتابیس ذخیره کنی. Django از این فیلد پشتیبانی می‌کنه و باهاش می‌تونی داده‌هایی شبیه به دیکشنری رو ذخیره کنی.

 
   from django.contrib.postgres.fields import HStoreField
   from django.db import models

   class MyModel(models.Model):
       attributes = HStoreField()
  
4⃣ فیلد Range 📏 
   این فیلد بهت اجازه میده که رِنج‌ها رو توی دیتابیس ذخیره کنی. مثلاً می‌خوای یه بازه تاریخی یا عددی رو نگه‌داری، این فیلد دقیقاً به درد همون کار می‌خوره.

  
   from django.contrib.postgres.fields import DateRangeField
   from django.db import models

   class MyModel(models.Model):
       date_range = DateRangeField()
  
5⃣ و در اخر Full-Text Search 🔍 
خب 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


@ninja_learn_ir
🔥126
💎 معرفی فریم‌ورک Locust 💎

امروز می‌خوام یه فریم‌ورک خفن برای تست بار بهتون معرفی کنم: 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


@ninja_learn_ir
🔥10👍53
💎 عملیات‌های 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:
می‌تونی از async و await استفاده کنی تا درخواست‌ها به صورت غیر همزمان انجام بشن و سرعت اپلیکیشن بالا بره.

- برای CPU Bound:
می‌تونی از ماژول concurrent.futures و ProcessPoolExecutor استفاده کنی تا کارهای سنگین رو در چند پروسه اجرا کنی.

جمع‌بندی 🎯
درک تفاوت‌های بین IO Bound و CPU Bound می‌تونه بهت کمک کنه تا اپلیکیشن‌های جنگو رو بهتر بهینه‌سازی کنی. اگه عملیات‌های IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.

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

#iobound #cpubound #python #django


@ninja_learn_ir
73👍3
💎 معرفی پکیج honeypot 💎

امروز می‌خوام درباره یه پکیج خفن برای جنگو به اسم 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



@ninja_learn_ir
👍122🔥1👏1
💎 معرفی GraphQL و استفاده ازش 💎

اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمی‌دونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟

حالا GraphQL چیه؟ 🤔

خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه می‌ده که دقیقاً همون داده‌هایی که نیاز دارین رو از سرور درخواست کنین. مهم‌ترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، می‌تونین مشخص کنین چه داده‌هایی رو دقیقاً می‌خواین و چه داده‌هایی رو نمی‌خواین.

به زبان ساده، GraphQL به شما کنترل بیشتری روی داده‌هایی که از API می‌گیرین می‌ده. 🌍

چرا از GraphQL استفاده کنیم؟ 🤷‍♂️

1⃣ دریافت داده‌های دقیق 🎯
یکی از بزرگ‌ترین مشکلاتی که معماری‌های سنتی API دارن اینه که گاهی داده‌هایی که لازم نداریم رو هم به ما برمی‌گردونن. GraphQL این مشکل رو حل کرده. شما توی GraphQL می‌تونین کاملاً مشخص کنین که چه فیلدهایی از داده‌ها رو نیاز دارین و فقط همون‌ها رو از سرور بگیرین.
مثال: فرض کنین می‌خواین فقط اسم و ایمیل کاربر رو از API بگیرین. کوئری GraphQL می‌تونه این‌طوری باشه:

{
user(id: 1) {
name
email
}
}

و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:

{
"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


@ninja_learn_ir
🔥16👍32
استفاده از PWA در Django 🌐

امروز می‌خوایم درباره یه موضوع داغ صحبت کنیم: Progressive Web Apps (PWA) و چطور می‌تونیم ازش توی Django استفاده کنیم. اگه دنبال این هستی که اپلیکیشن وبی بسازی که نه تنها روی مرورگرها کار کنه، بلکه تجربه‌ای شبیه به اپلیکیشن‌های موبایل به کاربران بده، PWA گزینه عالیه.


حالا PWA چی هست؟ 🤔

خب PWAها وب‌اپلیکیشن‌هایی هستن که ویژگی‌های اپلیکیشن‌های موبایل رو دارن. این ویژگی‌ها شامل:

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

2⃣ نصب روی صفحه اصلی:
می‌تونی اپلیکیشن رو مستقیماً روی صفحه اصلی گوشی نصب کنی.

3⃣ سرعت بارگذاری بالا: PWAها به دلیل cache کردن منابع، خیلی سریع بارگذاری می‌شن.


چطور PWA رو توی Django پیاده‌سازی کنیم؟ 🚀

برای ساختن PWA با Django، مراحل زیر رو دنبال کن:

1⃣ نصب Django و تنظیم پروژه

اول از همه، یه پروژه Django جدید ایجاد کن:
django-admin startproject my_pwa
cd my_pwa
python manage.py startapp my_app

2⃣ تنظیمات پروژه

حالا باید my_app رو به INSTALLED_APPS توی فایل settings.py اضافه کنی:

INSTALLED_APPS = [
...
'my_app',
]

3⃣ ساخت فایل Manifest

فایل Manifest یه فایل JSON هست که اطلاعاتی درباره اپلیکیشن تو می‌ده. این فایل رو به اسم manifest.json در پوشه static بساز:

{
"name": "My PWA",
"short_name": "PWA",
"start_url": "/",
"display": "standalone",
"background_color": "#FFFFFF",
"theme_color": "#000000",
"icons": [
{
"src": "icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}

4⃣ اضافه کردن Service Worker

ـService Worker یه جاوااسکریپت‌ فایلیه که به مرورگر اجازه می‌ده کارهایی رو در پس‌زمینه انجام بده، مثلاً cache کردن منابع. این فایل رو به اسم sw.js در پوشه static بساز:

self.addEventListener('install', (event) => {
event.waitUntil(
caches.open('my-pwa-cache').then((cache) => {
return cache.addAll([
'/',
'/static/icon-192x192.png',
'/static/icon-512x512.png',
// Add other resources here
]);
})
);
});

self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((response) => {
return response || fetch(event.request);
})
);
});

5⃣ اضافه کردن به HTML

حالا باید فایل‌های manifest و service worker رو به قالب HTML خودت اضافه کنی. به عنوان مثال، در base.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="manifest" href="{% static 'manifest.json' %}">
<title>My PWA</title>
</head>
<body>
<h1>خوش اومدی به PWA من</h1>
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/static/sw.js').then((registration) => {
console.log('Service Worker registered with scope:', registration.scope);
});
});
}
</script>
</body>
</html>

جمع بندی 🎉

با انجام این مراحل، شما یک PWA با Django ساختید که می‌تونه به کاربران تجربه‌ای مشابه با اپلیکیشن‌های موبایل بده. این یعنی کاربرها می‌تونن اپلیکیشن شما رو نصب کنن و حتی وقتی اینترنت ندارن هم بهش دسترسی داشته باشن. PWAها به سرعت در حال محبوبیت هستن و می‌تونی با استفاده از Django و این تکنیک‌ها، یه اپلیکیشن عالی بسازی.

امید وارم مفید بوده باشه :)❤️

#django #pwa


🔆 CHANNEL | GROUP
18👍12🔥1
سیستم مدریت محتوا (CMS) Wegtail 🐦

امروز می‌خوام یه کم درمورد Wagtail صحبت کنیم؛ یه CMS حرفه‌ای و خوش‌دست که این روزا بین توسعه‌دهنده‌های جنگو حسابی محبوب شده. اگه یه بار بخواین یه سیستم مدیریت محتوا (CMS) حرفه‌ای و انعطاف‌پذیر برای پروژه‌هاتون راه بندازین و دیگه وردپرس و اون پلاگین‌ها و پیچیدگی‌هاش خسته‌تون کرده، حتماً Wagtail یه گزینه ایده‌آل براتونه. 😎


حالا Wagtail چیه؟ 🐦
یه سیستم مدیریت محتوای اپن‌سورس و مبتنی بر جنگو که برای ساخت سایت‌های داینامیک و مقیاس‌پذیر طراحی شده. توی Wagtail از امکانات عالی جنگو استفاده شده و همینطور یه UI ساده و مینیمال داره که کار باهاش رو خیلی لذت‌بخش می‌کنه. 🎨



چرا از Wagtail استفاده کنیم؟ 🤔

1⃣ سرعت و عملکرد بالا 🚀: Wagtail با پایتون و فریم‌ورک Django ساخته شده، که از لحاظ سرعت و پرفورمنس کلاً یه سر و گردن از وردپرس بالاتره.

2⃣ سفارشی‌سازی قوی 🛠️: با اینکه توی وردپرس هم می‌شه کد سفارشی نوشت، ولی با معماری Wagtail و قدرت جنگو، می‌تونید هر نوع سفارشی‌سازی‌ای رو راحت‌تر و تمیزتر انجام بدین.

3⃣ سیستم مدیریت تصاویر و ویدئو 📸: یکی از نکات قوت Wagtail سیستم مدیریت تصاویره. این CMS ابزارهای کاملی برای برش، تغییر سایز، و بهینه‌سازی تصاویر داره و بهتون کمک می‌کنه تا محتوای تصویری باکیفیت‌تری بسازید.

4⃣ ـUser Experience بهتر 🧑‍💻: UI مینیمال و ساده‌ای که داره، کار باهاش رو راحت و لذت‌بخش می‌کنه. شما و کاربرهاتون راحت‌تر می‌تونید صفحات و محتوای سایت رو مدیریت کنید.


مقایسه با وردپرس 🆚
خب، شاید بگید وردپرس رو همه بلدن و کلی پلاگین داره و اینا. درسته، ولی اینا همیشه هم مزیت نیستن پلاگین‌های وردپرس می‌تونن سنگین و پر از باگ باشن و امنیت سایت رو پایین بیارن. توی Wagtail شما یه کد تمیز و ساختار منظم دارین، که نیاز به پلاگین‌های اضافی رو خیلی کم می‌کنه.


مثال ساده از قدرت Wagtail 💡

فرض کنین می‌خواین یه صفحه لندینگ طراحی کنید که هم داینامیک باشه و هم زیبا. با Wagtail می‌تونید با چند خط کد، بلوک‌های محتوایی دلخواه خودتون رو بسازید و به هر شکلی که بخواین نمایش بدین. مثلاً یه بلاک تصویر، یه بلاک متن و یه بلاک دکمه که قابل ترتیب‌دهی باشه. این کار توی Wagtail خیلی ساده‌تر و سریع‌تر از وردپرس انجام می‌شه. 🎉


امنیت و به‌روزرسانی 🔐
ـWagtail به خاطر معماری امن‌تر جنگو و جامعه فعالی که پشتیبانشه، همیشه به‌روز و امنه. دیگه نیازی نیست نگران اون همه آپدیت‌های وردپرس و ناسازگاری پلاگین‌ها باشین.

جمع بندی 📚

کلاً اگه دنبال یه CMS سریع، امن و منعطف هستید که کدهای تمیز و حرفه‌ای داشته باشه، حتماً یه بار Wagtail رو امتحان کنین. هم از کار باهاش لذت می‌برید، هم پروژه‌تون ساختارمندتر و حرفه‌ای‌تر می‌شه. 👌

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

#cms #django #python


🔆 CHANNEL | GROUP
🔥94
الستیک سرچ در جنگو

اگه یه سیستم داری که نیاز داره روی دیتا جستجوهای سریع و پیشرفته انجام بشه، الستیک سرچ (Elasticsearch) یکی از بهترین انتخاب‌هاست. این ابزار جستجوی قدرتمند بهت کمک می‌کنه تا جستجوهایی مثل فیلترهای پیچیده، جستجوی تمام‌متنی (Full-Text Search) و حتی پیشنهادات مرتبط رو راحت پیاده‌سازی کنی. حالا بیا ببینیم چطور می‌تونی ازش تو پروژه‌های جنگو استفاده کنی.


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

تا باهاش می‌تونی:

🔍 جستجوهای سریع‌تر داشته باشی حتی با دیتاست‌های بزرگ

جستجوی full-text یا فازی (مثل پیشنهاد‌های تایپ‌شده اشتباه) انجام بدی

داده‌ها رو بر اساس 📊 اولویت و امتیاز (Relevance) مرتب کنی


راه‌اندازی Elasticsearch در جنگو
برای اینکه الستیک سرچ رو به پروژه جنگوت اضافه کنی، مراحل زیر رو دنبال کن:

1⃣ نصب Elasticsearch
اول از همه باید الستیک سرچ رو نصب و راه‌اندازی کنی. می‌تونی از Docker استفاده کنی:
docker run -d -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.10.1  

2⃣ نصب کتابخونه‌ها
پکیج‌هایی مثل elasticsearch-dsl و django-elasticsearch-dsl کار رو خیلی راحت می‌کنن:
pip install elasticsearch-dsl django-elasticsearch-dsl  

3⃣ تنظیمات اولیه
توی فایل تنظیمات جنگو (settings.py)، آدرس و پورت الستیک سرچ رو مشخص کن:
ELASTICSEARCH_DSL = {  
'default': {
'hosts': 'localhost:9200'
}
}




ایجاد ایندکس و اتصال به مدل‌ها
حالا باید داده‌هات رو به الستیک سرچ وصل کنی و ایندکس بسازی.

ایجاد Document برای مدل‌ها
خب Document جاییه که مدل‌های جنگو رو به ایندکس الستیک سرچ وصل می‌کنه:
from django_elasticsearch_dsl import Document  
from django_elasticsearch_dsl.registries import registry
from .models import Article

@registry.register_document
class ArticleDocument(Document):
class Index:
name = 'articles' # اسم ایندکس

class Django:
model = Article
fields = [
'title',
'content',
'published_at',
]

ایندکس کردن داده‌ها
برای انتقال داده‌های فعلی به الستیک سرچ:
python manage.py search_index --rebuild  




پیاده‌سازی جستجو در ویوها
حالا بیا یه API برای جستجو درست کنیم:

ویو جستجو
from django.http import JsonResponse  
from .documents import ArticleDocument

def search_articles(request):
query = request.GET.get('q', '')
results = ArticleDocument.search().query("multi_match", query=query, fields=["title", "content"])
data = [hit.to_dict() for hit in results]
return JsonResponse({'results': data})



اضافه کردن به URL‌ها
from django.urls import path  
from .views import search_articles

urlpatterns = [
path('search/', search_articles, name='search_articles'),
]


ادامه پست بعدی

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

#python #django #web


🔆 CHANNEL | GROUP
117👍4