Django Experience
709 subscribers
4 videos
8 links
در این چنل تجربه‌ ها و پروژه‌ های شخصی‌ خودم رو
در مورد زبان پایتون و فریم‌ ورک Django به اشتراک میزارم؛ همراه با نکات فنی و مسیر یادگیری در توسعه‌ی وب

📩 ارتباط با من: @web_project10
Download Telegram
Channel created
Django Experience
Video
پروژه شرکتی سایت javidpeyma
فرانت اند :
Html, Css, Js, Boostrap
بک اند :
Python, Django

ویژگی های سایت:

صفحه login

صفحه Register

بخش وبلاگ و قابلیت ایجاد بلاگ توسط ادمین سایت

پنل ادمین اختصاصی

بخش نظرات و ارسال کامنت

بخش نمونه کار ها به صورت داینامیک(انتقال دیتا از سمت سرور به سمت کلاینت)

بخش تیم ما به صورت داینامیک

بخش ارتباط با ما و ارسال دیتا از فرم به دیتابیس


My Site : parsajavidi.ir
🔥132👍2
Django Experience
Video
پروژه سایت شخصی

  بخش مهارت ها
نمونه کار ها
صفحه login, register
  وبلاگ 
کاملا داینامیک
پنل ادمین اختصاصی

فرانت اند :
Html
Css
Bootstrap ‌
Javascript

بک اند :
Python , Django


My Site : parsajavidi.ir
🔥152👌2👍1
Django Experience
Video
طراحی و توسعه سایت شخصی معماری

لینک : fakhariarchitect.ir


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

ویژگی‌ها:

طراحی واکنش‌گرا: وبسایت برای نمایش صحیح و بهینه در تمامی دستگاه‌ها (کامپیوتر، تبلت، موبایل) طراحی شده است.

رابط کاربری مدرن و جذاب: استفاده از طراحی مدرن با تمرکز بر تجربه کاربری آسان و دسترسی سریع به اطلاعات.

جزئیات پروژه‌ها: صفحه‌های اختصاصی کاملا داینامیک برای هر پروژه که شامل توضیحات کامل، نقشه‌ها و طرح‌ها، و گالری تصاویر مربوطه می‌باشد.

بخش وبلاگ: امکان انتشار مقالات و اخبار مرتبط با معماری و پروژه‌های در حال اجرا.

اطلاعات تماس: فرم تماس جهت سهولت ارتباط کاربران.

فناوری‌های استفاده شده:

بک‌اند: جنگو (Django) برای مدیریت محتوا، داده‌ها و ایجاد عملکردهای پیچیده

پایگاه داده: PostgreSQL برای ذخیره و مدیریت داده‌ها

فرانت اند : HTML5 و CSS3 برای ساختار طراحی صفحات

JavaScript و jQuery برای ایجاد تعاملات پویا

ریسپانسیو : استفاده از فریمورک Bootstrap برای طراحی واکنش‌گرا و سریع
16
Django Experience
Video
پروژه رزرو نوبت آرایشگاه یک سیستم مدیریت آنلاین برای رزرو و پرداخت نوبت‌های خدمات آرایشی و بهداشتی است که به کاربران امکان می‌دهد به‌راحتی نوبت موردنظر خود را انتخاب و رزرو کنند. این سیستم به‌گونه‌ای طراحی شده که نیازهای یک سالن آرایشگاه یا اسپا را پوشش دهد و تجربه کاربری ساده و موثری برای مشتریان فراهم کند.

آدرس وبسایت :
kati-barber.ir

ویژگی‌های پروژه

1. فرآیند رزرو آنلاین:
- کاربران می‌توانند روز و ساعت موردنظر خود را از بین زمان‌های موجود انتخاب کنند.
- در صورتی که زمانی انتخاب شده قبلاً رزرو شده یا ظرفیت روز تکمیل باشد، سیستم به‌طور خودکار به کاربر هشدار می‌دهد.

2. ارسال ایمیل یادآوری:
- پس از تأیید پرداخت، ایمیل یادآوری خودکار برای مشتری ارسال می‌شود.
- این ایمیل به گونه‌ای زمان‌بندی شده که مثلاً دو ساعت پیش از موعد رزرو به مشتری اطلاع دهد و از فراموش شدن نوبت جلوگیری کند.

3. پرداخت آنلاین:
- سیستم به درگاه پرداخت زرین‌پال متصل است و کاربران پس از انتخاب زمان و تایید نهایی به صفحه پرداخت هدایت می‌شوند.
- وضعیت پرداخت پس از انجام عملیات بانکی به‌طور خودکار بررسی شده و نوبت در صورت موفقیت پرداخت تایید می‌شود.

4. رابط کاربری ساده و کاربرپسند:
- از فرم‌ها و انتخاب‌گرهای تاریخ و زمان مناسب استفاده شده تا کاربران به‌آسانی و بدون پیچیدگی نوبت خود را ثبت کنند.
- تایم‌پیکر با محدودیت زمانی برای ساعات کاری (مثلاً ۹ صبح تا ۹ شب) پیاده‌سازی شده و به کاربر اجازه انتخاب خارج از این محدوده را نمی‌دهد.

5. استفاده از پایگاه داده و اعتبارسنجی داده‌ها:
- سیستم از مدل‌های داده Django برای مدیریت مشتریان، نوبت‌ها و پرداخت‌ها استفاده می‌کند.
- از clean در فرم‌ها برای بررسی و اعتبارسنجی داده‌ها استفاده شده، مثلاً جلوگیری از ثبت نوبت در زمان‌های گذشته یا ظرفیت‌های تکمیل شده.

6. استفاده از Django و Python:
- پروژه با استفاده از چارچوب Django توسعه یافته است و با پیاده‌سازی اصول MVC، کدها به‌صورت تمیز و قابل گسترش نگه داشته شده‌اند.
- ارسال ایمیل و ارتباط با API درگاه پرداخت به کمک کتابخانه‌های Django انجام می‌شود که این پروژه را قدرتمند و پایدار می‌سازد.

تکنولوژی‌های به‌کاررفته
- Backend: Django, Python
- پایگاه‌داده: Postgresql
- سیستم پرداخت: زرین‌پال API برای پرداخت‌های آنلاین
- ارسال ایمیل: پیکربندی SMTP و استفاده از کتابخانه ایمیل Django
- کتابخانه‌های جانبی: استفاده از threading.Timer برای زمان‌بندی ارسال ایمیل و Jalali برای نمایش تاریخ به شمسی

ارزش افزوده پروژه
- با این سیستم، آرایشگاه‌ها و سالن‌های زیبایی می‌توانند فرآیند رزرو و پرداخت‌های خود را به‌صورت دیجیتال و آنلاین انجام دهند و نیاز به پیگیری دستی و تماس‌های تلفنی را به حداقل برسانند.
- کاربران می‌توانند به‌راحتی از خانه یا هر مکان دیگری نوبت خود را ثبت کرده و در زمان‌های شلوغ به مدیریت زمان خود کمک کنند.
🔥18❤‍🔥1👍1🆒1
Forwarded from Python Hints
#تجربه #جنگو

چیزی که توی کدهای Django توی ایران به معنای واقعی اصلا و هیچوقت ندیدم؛ اما جزو مهمترین موارد هست.

تست نویسی برای سرویس‌های third-party هست که از طریق API استفاده می‌کنیم.

همینجا اضافه کنم؛ همیشه فرض ما این هست که هیچ اتفاقی برای اون سرویس‌ها نمیوفته ولی چندتا سوال؛

۱- سرویس ما چه اتفاقی باید براش بیوفته اگر سرویس دهنده تغییراتی داشته باشه ؟ و درخواست‌های ما 400, 404 , ... برگرده ؟

۲- چه اتفاقی برای سرویس‌های ما خواهد افتاد اگر سرویس دهنده بخاطر محدودیت‌های جدید یا .... بهمون 500, 503, ... برگردونه ؟

اینا چیزهایی هست که ننوشتن تست براش می‌تونه خسارت زیادی به سرویس بزنه مثلاً:

فرض کنید، من یک فروشگاه اینترنتی دارم؛ اگر سرویس درگاه پرداخت به هر دلیلی کار نکنه یعنی فروشگاه من هیچ خروجی نداره دوتا مورد باید هرچه سریعتر انجام بشه :

۱- یک ایمیل critical برای ادمین بره تا بتونه پیگیری کنه موضوع رو از سرویس دهنده

۲- خطای مناسب (اینکه سرویس پرداخت غیرفعال هست) به کاربر نشون داده بشه تا از رفرش و DDOS شدن توسط کاربرهای خودمون جلوگیری بشه

بخصوص روی سرویس‌های auto-scale که با زیاد شدن درخواست سرورهای جدیدی بالا میاد و این یعنی هزینه بیشتر.


توی زبان‌های برنامه‌نویسی مختلف ابزارهای متفاوتی برای اینکار وجود داره؛ توی پایتون هم پکیج
Responses

کمک می‌کنه اینکار رو انجام بدید.

واقعاً نمی‌دونم چرا؛ ولی اینکه این تست‌های توی کدهای شرکت‌های بزرگ داخلی نمی‌بینم یا حتی توی آموزش‌ها و .... مغزم سوت می‌کشه.

بعد اینا از gorilla تست صحبت می‌کنند.


حالا که این موارد رو توی آموزش و کدها ندیدم (توی سرویس‌هایی که تیم‌ خودم می‌نویسه همیشه وجود داره)

گفتم بگم که شما خودتون یاد بگیرید، شاید یک روزی کدهای شما به من رسید یا هم تیمی شدیم.
26👍8🔥4
Python Hints
#تجربه #جنگو چیزی که توی کدهای Django توی ایران به معنای واقعی اصلا و هیچوقت ندیدم؛ اما جزو مهمترین موارد هست. تست نویسی برای سرویس‌های third-party هست که از طریق API استفاده می‌کنیم. همینجا اضافه کنم؛ همیشه فرض ما این هست که هیچ اتفاقی برای اون سرویس‌ها…
تست‌نویسی برای سرویس‌های third-party و سناریوهای خطا یه چیزیه که خیلی جاها یا نادیده گرفته میشه یا اصلاً بهش توجه نمیشه ولی عملاً می‌تونه جلوی کلی دردسر و خسارت بزرگ رو بگیره
امیدوارم این بحث تو جامعه‌ی پایتون‌ کارای ما بیشتر جا بیفته و تو پروژه‌ ها و آموزش‌ ها جدی گرفته بشه
واقعا این نوع تست‌ ها همون چیزایی هستن که پروژه‌ ها رو حرفه‌ای و پایدار نگه میداره
21👍6🔥3
📌 پروژه Rest Blog API با Django Rest Framework

با سلام،
در این پروژه یک RESTful API برای سیستم وبلاگ‌نویسی طراحی و پیاده‌سازی شده است که با استفاده از فریم‌ورک‌های قدرتمند Django و Django Rest Framework توسعه یافته است.

هدف اصلی از توسعه این پروژه، ارائه‌ی یک زیرساخت بک‌اند کاملاً ماژولار، امن و مقیاس‌پذیر برای مدیریت محتوای وبلاگی است به ‌طوری که بتوان از آن در پروژه‌های واقعی نیز بهره گرفت

در این API امکانات متداولی که در سیستم‌های مدیریت محتوا (CMS) انتظار می‌رود، مانند ایجاد و مدیریت پست‌ها، دسته‌بندی مطالب، ثبت و مدیریت نظرات کاربران، ثبت‌نام و ورود ایمن با توکن JWT، تعیین سطوح دسترسی (permissions) و ارسال ایمیل‌های سیستمی (مانند فعال‌سازی حساب کاربری) پیاده‌سازی شده است.

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

🧩 تکنولوژی‌ها و ابزارهای استفاده‌شده:

Django و Django Rest Framework برای توسعه‌ی API

PostgreSQL به عنوان دیتابیس اصلی

Docker و Docker Compose برای داکرایز کردن پروژه و مدیریت سرویس‌ها

smtp4dev برای شبیه‌سازی سرور ایمیل در محیط توسعه

JWT (SimpleJWT) برای پیاده‌سازی احراز هویت و مدیریت توکن‌ها

🛠 ویژگی‌های کلیدی پروژه:

ساختار تمیز و ماژولار مناسب برای توسعه در مقیاس بزرگ

مدیریت پست‌ها، دسته‌بندی‌ها، نظرات و کاربران

سطوح دسترسی مختلف با استفاده از permissionها و decorators

امکان فیلتر، جستجو و صفحه‌بندی روی داده‌ها

ارسال ایمیل (تست با smtp4dev) برای فعال‌سازی حساب و سایر رویدادها

مستندسازی کامل API با Swagger UI و drf_spectacular

نوشتن تست‌های پوششی برای بخش‌های مهم پروژه

تنظیمات چندگانه برای محیط توسعه و تولید

📦 پروژه به‌صورت کامل داکرایز شده و آماده اجرا در محیط containarized می‌باشد.

📂 لینک گیت‌هاب:
🔗 github.com/Mohammadparsa1384/Rest_Blog_Api


📂 داکیومنت endpoint های پروژه :

🔗 dev-api-server.liara.run
26👍7🔥3
🛡️ محافظت از فرم لاگین با Django-Defender

حملات brute-force 🔐 یکی از رایج‌ ترین روش‌های نفوذ به وبسایت‌ ها هستند
جایی که هکرا با تلاش‌های مکرر سعی میکنن رمز عبور کاربران را حدس بزنند.
کتابخانه‌ی Django-Defender ابزاری سبک، سریع و مطمئن برای مقابله با این حملات در پروژه‌های Django است.

امکانات کلیدی

🚫 شمارش تلاش‌های ناموفق ورود و بلاک کردن کاربر یا ip

استفاده از کش (Redis یا Memcached) برای عملکرد سریع

⏱️ امکان تنظیم تعداد تلاش‌های مجاز و زمان بلاک (cool-off)

📊 ذخیره لاگ‌ها و مشاهده آنها در پنل مدیریت Django

🔐 بلاک بر اساس ip یا ترکیب یوزرنیم + ip

⚙️ نصب و راه‌اندازی
pip install django-defender


در settings.py تنظیمات پایه رو برای کانفیگ django defender اضافه کنید:

INSTALLED_APPS = [
...,
"defender",
]

MIDDLEWARE = [
...,
"defender.middleware.FailedLoginMiddleware",
]

تنظیمات اصلی:
DEFENDER_REDIS_URL = "redis://127.0.0.1:6379/0"
DEFENDER_LOGIN_FAILURE_LIMIT = 5
DEFENDER_COOLOFF_TIME = 300
DEFENDER_LOCK_OUT_BY_COMBINATION_USER_AND_IP = True
DEFENDER_STORE_FAILURES = True

1⃣ DEFENDER_REDIS_URL :
مشخص میکنه داده های تلاش نا موفق کجا ذخیره میشن "redis://127.0.0.1:6379/0" یعنی Redis روی لوکال با پورت 6379 و‌دیتابیس شماره 0 اجرا بشه.

2⃣ DEFENDER_LOGIN_FAILURE_LIMIT:
تعداد دفعاتی که یک کاربر یا ip میتونه رمز اشتباه وارد کنه قبل از اینکه بلاک شه.

مثال: مقدار ۵ → بعد از ۵ تلاش ناموفق، بلاک فعال میشه

3⃣ DEFENDER_COOLOFF_TIME :

مدت زمان بلاک به ثانیه.

به عنوان مثال اینجا ۳۰۰ ثانیه یعنی بعد از بلاک شدن‌؛کاربر یا ip برای ۵ دقیقه نمیتونه لاگین کنه

4⃣ DEFENDER_LOCK_OUT_BY_COMBINATION_USER_AND_IP :

تعیین میکنه که مکانیزم بلاک چگونه عمل کنه و معیار محدودسازی کاربران چی باشه. مثلا وقتی متغیر روی True تنظیم شه، بلاک بر اساس ترکیب یوزرنیم و ip اعمال میشه؛ یعنی حتی اگر کاربر از یک ip جدید وارد شه، اگر همان یوزرنیم را استفاده کنه همچنان محدود خواهد بود و اجازه ورود نداره. اگر این متغیر روی False باشه، بلاک فقط بر اساس ip اعمال می‌شود و یوزرنیم میتونه از ip دیگر بدون مشکل وارد شه. این تنظیم باعث افزایش دقت امنیتی و جلوگیری از دور زدن محدودیت‌ها توسط تغییر ip می‌شود.

5⃣ DEFENDER_STORE_FAILURES :

اگر True باشه، تلاش‌های ناموفق در دیتابیس ذخیره میشن و میتونیم اونارو را تو پنل ادمین ببینیم



این ویژگی کمک می‌کند تحلیل و بررسی حملات راحت‌ تر باشد

مایگریشن‌ ها رو اجرا کنید:
python manage.py migrate

🧪 تست عملکرد

5 بار با اطلاعات اشتباه سعی کنید داخل پروژه جنگویی خودتون لاگین کنید 🔑

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

لاگ‌ها در پنل مدیریت ذخیره می‌شوند 📊

با فعال بودن LOCK_OUT_BY_COMBINATION_USER_AND_IP، حتی با IP جدید همان یوزرنیم بلاک خواهد شد 🔒

🎯 نتیجه:
اعمال چند خط تنظیمات ساده در Django-Defender، امنیت فرم لاگین پروژه شما به شکل چشمگیری افزایش می‌یابد. این ابزار به طور مؤثر جلوی حملات brute-force را می‌گیرد، تلاش‌های ناموفق کاربران را ردیابی می‌کند و امکان مسدودسازی موقت ip یا یوزرنیم را فراهم می‌کند. با ذخیره لاگ‌ها در دیتابیس و بررسی آن‌ها در پنل مدیریت، می‌توانید فعالیت‌های مشکوک را شناسایی کرده و امنیت کلی سایت خود را ارتقا دهید. به این ترتیب کنترل کامل بر دسترسی کاربران و حفاظت از حساب‌ها برای شما ساده و قابل اطمینان خواهد بود
29👍7🔥3
Forwarded from جنگولرن
آیا می دانستید که وقتی ImageField یا FileField توی جنگو دارید، و اون رکورد حذف میشه، فایل هاش حذف نمیشن

درسته؟ قبول داری؟

تا جایی که من میدونم فایل ها حذف نمیشن
یا مثلا عکس رو تغییر بدیم، عکس قبلی ع توی سرور میمونه
در واقع media حذف نمیشه

راه حل چیه؟

چند تا راه هست (من اینارو بلدم):

-متد save و delete رو override کن و دستی حذف کن.
-از سیگنال های جنگو استفاده کن و رکورد حذف شد، سیگنال فایل هارو حذف کنه.
-استفاده از پکیج django-cleanup که دقیقا کارش همینه، و از سیگنال ها استفاده میکنه.
-استفاده از پکیج django-lifecycle که کارش حذف کردن فایل نیست، ولی با قابلیت hook ش میشه فایل های بی صاحب رو حذف کرد 😁

پکیج django-lifecycle برای من جالب بود
مدل مون باید از LifecycleModel ش ارث بری کنه
بعد یه سری Hook داره و میگه بعد از فلان اتفاق، فلان کار رو انجام بده
نمیاد سیگنال کال کنه، متد save و delete رو override کرده.

من باشم از هر دوشون همزمان استفاده میکنم.
با تشکر از Hossein Neysian
نظری اگه دارید بگید. مثلا ابزار یا پکیجی که برای این موارد استفاده میشه.
یا توی پروژه های Enterprise اینو چطور هندل میکنن، اصلا این مسئله هست توی پروژه های Enterprise ؟؟؟

اسپانسر این پست 👈 لینک
25👍7🔥3
جنگولرن
آیا می دانستید که وقتی ImageField یا FileField توی جنگو دارید، و اون رکورد حذف میشه، فایل هاش حذف نمیشن درسته؟ قبول داری؟ تا جایی که من میدونم فایل ها حذف نمیشن یا مثلا عکس رو تغییر بدیم، عکس قبلی ع توی سرور میمونه در واقع media حذف نمیشه راه حل چیه؟ …
پست خیلی خوبی بود گفتم اینجا هم اشتراک بزارم

من همیشه از django clean up استفاده میکردم و django lifecycle رو اولین بار بود می‌شنیدم اینکه از سیگنال استفاده نمیکنه خیلی جالب بود برام

داخل پروژه های بزرگ معمولا یه تسک دوره ای مثل celery beat میزارن که پوشه ی media رو اسکن کنه و فایل هایی که بی صاحاب شدن رو حذف کنه چون همیشه هم حذف رکورد از طریق orm انجام نمیشه که سیگنال یا lifecycle بتونه واکنش نشون بده
26👍7🔥4