جنگولرن
3.78K subscribers
287 photos
74 videos
31 files
554 links
آموزش Django و بستگان
Download Telegram
دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو آپدیت شد.

اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.

قسمت های زیر اضافه شدند:

فصل هشتم
✔️معرفی پکیج django-allauth جهت لاگین با حساب گوگل
✔️ساخت پروژه در کنسول برنامه نویس گوگل
✔️تکمیل لاگین با حساب گوگل


چند قسمت از این دوره رو اینجا ببینید:
https://t.me/djangolearn_ir/531
https://t.me/djangolearn_ir/533
https://t.me/djangolearn_ir/573
https://t.me/djangolearn_ir/676
https://t.me/djangolearn_ir/724
https://t.me/djangolearn_ir/808
https://t.me/djangolearn_ir/830

لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
#پست_جدید

توی پست قبلی درمورد lazy بودن کوری ست ها صحبت کردیم


توی این پست میخوایم درموردش عمیق تر بشیم


توجه❗️
تمام مثال های این پست با توجه به معماری MVT در نظر گرفته شده است.

به مثال زیر توجه کنید 👇

def get_users_list(request): 

users = User.objects.all()

return render(request, "panel/ users.html", {"users": users})

خب بنظرتون توی این مرحله کوری ست evaluate میشه؟

خیر هیچوقت در این مرحله evaluate نمیشه و توی تمپلیت وقتی که داریم روش یه عملیتای انجام میدیم evaluate میشه ( جلوتر توضیح میدم)



به این مثال توجه کنید 👇

{% for user in users %} 

<h1> {{user.name}} </h1>

{% endfor %}


همونطور که میبینید دراین کد ما اومدیم درون تمپلیت روی users حلقه for زدیم و اسامی کاربران رو گرفتیم

با توجه به lazy بودن کوری ست ها که در پست قبل توضیح دادم در مرحله حلقه زدن عملیات evaluation صورت میگیره و کوری ست تبدیل به کد sql میشه و به دیتا بیس فرستاده میشه و ریزالت رو برمیگردونه



پس بازم اینجا اثبات شد فقط وقتی کوری ست اجرا میشه که بهش نیاز پیدا کنیم



#جنگو #کوری_ست #lazy_querysets



@ninja_learn_ir
4👍4
در جنگو از ()timezone.now برا ی مقدار پیشفرض یه فیلد استفاده نکن.

اگه این کارو کنی جنگو warning زیر رو میده:

WARNINGS:
Profile.login_date: (fields.W161) Fixed default value provided.
HINT: It seems you set a fixed date / time / datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use django.utils.timezone.now

✔️و میگه از django.utils.timezone.now استفاده کن

✔️اگه وارنینگی که میده رو نادیده بگیرید با هربار makemigrations یه فایل migrations برای شما میسازه

✔️توی استفاده هم مشکلاتی به وجود میاره و تایم ها تکراری میشن
👍72😁2
Forwarded from Ninja Learn | نینجا لرن (Mohammad Eslami)
#پست_جدید

💎 فیکسچر (fixure) در جنگو 💎

فیکسچر چیه؟
فیکسچر یه جور داده‌ی از پیش تعریف شده‌س که قبل از اجرای تست‌هامون به دیتابیس اضافه میشه. این داده‌ها میتونن هر چیزی باشن؛ از یه کاربر ساده گرفته تا یه محصول پیچیده توی فروشگاه آنلاینمون.

چرا بهش نیاز داریم؟

1️⃣ تست‌های دقیق‌تر: با داشتن داده‌های مشخص، می‌تونیم تست‌های دقیق‌تری بنویسیم و مطمئن بشیم که همه چیز طبق انتظار کار می‌کنه.

2️⃣ تست‌های سریع‌تر: به جای اینکه هر بار قبل از اجرای تست‌ها، داده‌های مورد نیازمون رو به صورت دستی وارد دیتابیس کنیم، با استفاده از فیکسچر این کار رو یک بار انجام میدیم و در تست‌های بعدی از همون داده‌ها استفاده می‌کنیم.

3️⃣ تکرارپذیری تست‌ها: با استفاده از فیکسچر، می‌تونیم مطمئن باشیم که هر بار که تست‌هامون رو اجرا می‌کنیم، نتیجه یکسانی خواهیم داشت.

ساختن یه فیکسچر
برای ساختن یه فیکسچر، یه فایل با پسوند json یا yaml ایجاد می‌کنیم و داده‌های مورد نظرمون رو به صورت ساخت‌یافته در اون تعریف می‌کنیم.

مثال با فرمت JSON:

[
{
"model": "myapp.Product",
"pk": 1,
"fields": {
"name": "گوشی موبایل سامسونگ",
"price": 5000000
}
},
{
"model": "myapp.Category",
"pk": 1,
"fields": {
"name": "گوشی موبایل"
}
}
]


در این مثال، ما دو رکورد برای مدل‌های Product و Category تعریف کردیم.

استفاده از فیکسچر در تست‌ها

from django.test import TestCase
from .models import Product

class ProductTestCase(TestCase):
fixtures = ['products.json']

def test_product_detail(self):
product = Product.objects.get(pk=1)
self.assertEqual(product.name, 'گوشی موبایل سامسونگ')

در این مثال، ما به کلاس تست‌مون گفتیم که قبل از اجرای هر تستی، فیکسچر products.json رو لود کنه. بعد، در تست test_product_detail، محصول با id برابر با ۱ رو پیدا می‌کنیم و مطمئن می‌شیم که نام محصول درسته.


دستورات لازم و ساخت و لود کردن فیکسچر

1️⃣ ساختن یه فیکسچر با دستور dumpdata
دستور dumpdata بهت اجازه میده که داده‌های موجود در دیتابیس رو به صورت یک فایل JSON یا YAML خروجی بگیری. این فایل خروجی رو میتونی به عنوان فیکسچر استفاده کنی.

# برای خروجی گرفتن از همه مدل‌ها به صورت JSON:Bash
python manage.py dumpdata app_name.ModelName --format json --indent 2 --output my_fixture.json

# برای خروجی گرفتن از یک مدل خاص به صورت YAML:
python manage.py dumpdata app_name.ModelName --format yaml--indent 2 --output my_fixture.yaml


2️⃣ استفاده از فیکسچر با دستور loaddata
دستور loaddata بهت اجازه میده که داده‌های موجود در یک فایل فیکسچر رو به دیتابیس اضافه کنی.

# برای بارگذاری داده‌های یک فایل JSON:
python manage.py loaddata my_fixture.json

# برای بارگذاری داده‌های یک فایل YAML:
python manage.py loaddata products.yaml


مثال عملی
فرض کن یه وبسایت فروشگاهی داریم و میخوایم یه تست بنویسیم که بررسی کنه آیا محصولی با نام خاص در دیتابیس وجود داره یا نه. اول از همه، با استفاده از دستور dumpdata از مدل Product یه فیکسچر میگیریم:

python manage.py dumpdata app_name.Product --format json --indent 2 --output product.json

سپس، در تستمون، این فیکسچر رو لود می‌کنیم و محصول مورد نظر رو جستجو می‌کنیم:

from django.test import TestCase
from .models import Product

class ProductTestCase(TestCase):
fixtures = ['products.json']

def test_product_exists(self):
product = Product.objects.get(name='گوشی موبایل سامسونگ')
self.assertIsNotNone(product)


⭕️ نکات کلیدی فیکسچر به زبان ساده
ساختار فیکسچر: فیکسچرت باید شبیه به همون چیزی باشه که توی دیتابیس داری. مثلاً اگه یه مدل محصول داری، فیکسچرت هم باید یه محصول رو تعریف کنه.
اسم‌گذاری فیکسچر: به فیکسچرت یه اسم بامعنا بده تا بفهمی توش چه داده‌هایی داری. مثلاً products.json یعنی توش اطلاعات محصول‌ها هست.
مدیریت فیکسچر: وقتی تست‌های زیادی می‌نویسی، باید یه جوری فیکسچرهات رو مرتب کنی تا گم نشی. می‌تونی از فولدرهای مختلف یا ابزارهای مخصوص استفاده کنی.


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


⭕️ توجه: برای اطلاعات بیشتر و مثال های عملی تر، میتونید به مستندات رسمی جنگو مراجعه کنین.

#جنگو #تست #فیکسچر #برنامه_نویسی
🔥4👍3
دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو

اگه کد تخفیف 80 درصدی میخواهید خصوصی به @miladhzz پیام بدید.

چند قسمت رایگان از این دوره رو اینجا ببینید:
https://t.me/djangolearn_ir/531
https://t.me/djangolearn_ir/533
https://t.me/djangolearn_ir/573
https://t.me/djangolearn_ir/676
https://t.me/djangolearn_ir/724
https://t.me/djangolearn_ir/808
https://t.me/djangolearn_ir/830

لینک دوره در دانشجویار:
https://www.daneshjooyar.com/project-django/
🥱4👍1
این پست و کامنت هاش در مورد Logging در جنگو رو ببینید
کامنت های جالبی داره

https://www.linkedin.com/posts/hmdkhsrvee_django-logging-middleware-ugcPost-7223723826218434560-UHNU?utm_source=share&utm_medium=member_desktop
Forwarded from Django Expert (Amir Motahari)
مجموعه‌ها در پایتون
- set متدهای پرکاربرد
- frozenset
- collections.Counter
لینک ویدیو:
https://youtu.be/qeVPRvvawLM

> پلی‌لیست کتاب ترفندهای پایتون
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
© @DjangoEX | > Instagram <
👍1
Forwarded from Python Hints
این پست رو توی کانال Rust زدم

Post Link

بعد یکی از دوستان نزدیکم که با تشویق من شروع به یادگیری برنامه‌نویسی کرده بود گفت که توی ۲-۳ سالی که کار می‌کنه این مورد رو ندیده و اصلا هم الان درک نمی‌کنه.

بنظرم طبیعی هست؛ الگوریتم Red-Black جزو مواردی هست که واقعا ساده نیست مخصوصا وقتی صحبت پیاده‌سازی میشه.

بعد ی میت گذاشتیم همینطوری باهم صحبت کنیم و رفت بحث سمت الگوریتم و ساختمان داده و ...و متوجه شدم خیلی موارد رو که بلد نیست و اون‌هایی هم که بلده حفظ کرده و درک درستی ازش نداره.

با اینکه در حد قبولی مصاحبه‌ها بلد هست ولی همین ضعف باعث شده نتونه مصاحبه‌های با سختی بیشتر رو شرکت کنه.

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

منابعی که تاحالا معرفی کردم هیچکدوم این مورد رو نداره.

تا اینکه چندی پیش این مورد رو دیدم؛

Data structures and algorithms crash course with animated illustrations and off-the-shelf code

از خوبی‌هاش :
۱- تصویری هست
۲- کلی چشم روش هست؛ چون open source هست کلی آدم خطاهاش رو می‌گیرند
۳- همیشه در دسترس هست (حتما برید روی انگلیسی مگر اینکه چینی رو خوب بلد باشید)
۴- تمام موارد پیاده‌سازی داره و این پیاده‌سازی روی چندین زبان هست
۵- پیاده‌سازی‌ها قدم به قدم هست.


خلاصه این رو بکنید مرجع؛ چون بنظرم خیلی خوبه (یک سری ایرادات داره؛ چون اختصاصی پایتون نیست ولی خب توضیحاتش انقدر خوب هست که کسی که ی مقدار پایتون رو جدی گرفته متوجه بشه)
بعد به کتاب رجوع کنید و اون موضوع رو روی پایتون هم بررسی کنید.

#DataStructure #Algorithm
2👍2
این پست و کامنت هاش هم با عنوان استفاده درست از جنگو رو ببینید
کامنت های جالبی داره

https://www.linkedin.com/posts/morteza-arab-256782244_aeqagpabraepaeuaex-aehaetahyaeqabraeqaecahyaet-activity-7222568302022184960-yB3O?utm_source=share&utm_medium=member_desktop
👍2
Forwarded from Security Analysis
⭕️ پروژه C2 ای توسعه داده شده که BotNet های HTTP/HTTPS و WebSocket ایجاد میکند.
در سمت Backend آن با Django توسعه داده شده و چون به صورت Freamwork نبوده میتوان در پروژه های خود از این کد استفاده کنیم.
از این پروژه میتوان به جهت شبیه سازی حملات DDOS و Mass Spam و دیگر حملات این چنینی استفاده کرد.
#RedTeam #C2
@securation
این سری چهارتایی مقاله از stripe خیلی خوبه و توصیه میکنم حتما بخونید.
https://dev.to/stripe/designing-apis-for-humans-object-ids-3o5a

البته یک نکته درباره این مقاله اول بگم که تو کامنت‌هاش هم گفتن، داخل مقاله میگه uuid گزینه بهتری هستش تا آیدی عددی که شاید از نظر امنیت بهتر باشه ولی برای پرفرمنس نه، چرا که uuid ها رندوم هستن و به خوبی index نمیشن داخل دیتابیس.

#خواندنی

@TorhamDevCH
👍2
.

لینک ویدیوی جلسه ۲۶:

https://youtu.be/mWqFwJYiQgM

تو این ویدیو، شروع کردیم در مورد بک اند صحبت کردیم که چی چی هست و کجاها کاربرد داره، از FastAPI و چند فریمورک دیگه حرف زدیم و در نهایت چند خط کد با فریمورک محبوب FastAPI کد زدیم

🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶

https://t.me/QaDeveloper

@SEYED_BAX | @MakeDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
ای وای! پرفورمنسش افتاد!

این پست با کامنت هاش جالبه

بخشی از پست:
داستان از اینجا شروع میشه که من در تمامی شرکت هایی که کار کردم با یه چالش جدی مواجه بودن اونم اینه که بعد از یه مدت پرفورمنس سایت بخاطر دیپلوی ها و فیچرهایی که به سیستمشون اضافه می شد میومد پایین ( حالا کاری ندارم گیر از بک اندشون بود یا فرانت ) که در نتیجه از یه جایی به بعد گوگل روی سئو رنک پیج هاشونو میاورد پایین.
حالا این شرکت ها معمولا چیکار میکنن؟
میان یه اسپرینت روی این قضیه وقت میگذارن. گیر و گور کارو درمیارن تا یه جایی . دیپلوی میدن. همه چی تا یه مدت به حالت عادی برمیگرده ،۶ ماه بعد دوباره همین داستان تکرار میشه.


https://www.linkedin.com/posts/mostafadadkhah_%DA%86%D8%A7%D9%84%D8%B4-%D8%A7%DB%8C-%D9%88%D8%A7%DB%8C-%D9%BE%D8%B1%D9%81%D9%88%D8%B1%D9%85%D9%86%D8%B3%D8%B4-%D8%A7%D9%81%D8%AA%D8%A7%D8%AF-%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86-%D8%A7%D8%B2-activity-7225427107437318144-5i8d?utm_source=share&utm_medium=member_desktop
👍3
Forwarded from Ninja Learn | نینجا لرن (Mohammad Eslami)
💎 مفهوم XFF یا همون X-Forward-For💎

امروز میخوایم در مورد یه هدر (Header) جالبی به اسم X-Forwarded-For حرف بزنیم. شاید اولش یه کم پیچیده به نظر بیاد، ولی نگران نباشید! میخوام براتون توضیح بدم که این چیز عجیب و غریبی نیست 😁

حالا X-Forwarded-For چیه؟
تصور کنید شما یه نامه رو از تهران به شیراز پست میکنید. روی پاکت نامه آدرس فرستنده و گیرنده نوشته شده. حالا فرض کنید این نامه توی مسیرش از چندین پستخانه عبور کنه. هر پستخانه ای که نامه رو دست بگیره، یه برچسب کوچولو روش میچسبونه و آدرس پستخانه خودش رو هم روش مینویسه. این برچسب ها مثل یه ردیاب هستن که نشون میدن نامه از کجا اومده و به کجا رفته.

خب X-Forwarded-For هم دقیقا همین کارو برای درخواست‌های اینترنتی انجام میده.
وقتی شما یه صفحه وب رو باز میکنید، کامپیوتر شما یه درخواست به سرور اون سایت ارسال میکنه. این درخواست حاوی اطلاعات مختلفی مثل آدرس IP شماست.

ادرس IP چیست؟
آدرس IP مثل یه شماره شناسایی منحصر به فرد برای هر دستگاهی هست که به اینترنت متصله.

حالا فرض کنید این درخواست از چندین سرور عبور کنه.
هر سروری که درخواست رو دریافت کنه، آدرس IP خودش رو به همراه آدرس IP قبلی در یه هدر به اسم X-Forwarded-For ذخیره میکنه. اینجوری میشه فهمید که درخواست از کجا اومده و چه مسیری رو طی کرده.

چرا X-Forwarded-For مهمه؟

🛡 امنیت: با استفاده از این هدر میشه به آسانی حملات هکرها رو ردیابی کرد. اگه یه هکر بخواد با استفاده از آدرس IP جعلی به یه سایت حمله کنه، با بررسی هدر X-Forwarded-For میشه آدرس IP واقعی اون رو پیدا کرد.

تعادل بار سرور(load balancing): سایت‌هایی که ترافیک بالایی دارن، از چندین سرور برای پاسخگویی به درخواست‌ها استفاده میکنن. با بررسی این هدر میشه فهمید که هر درخواست از کدوم سرور پاسخ گرفته و اینجوری میشه بار کاری سرورها رو به صورت بهینه توزیع کرد.

🗺 جغرافیایی: با بررسی آدرس‌های IP موجود در این هدر میشه فهمید که کاربران از کجا به سایت شما وصل میشن. این اطلاعات برای تحلیل رفتار کاربران و شخصی‌سازی محتوا خیلی مفیده.

خلاصه کلام:

هد X-Forwarded-For یه ابزار قدرتمند برای تحلیل ترافیک شبکه و افزایش امنیت سایت‌هاست. با استفاده از این هدر میشه به اطلاعات ارزشمندی درباره مسیر درخواست‌ها، آدرس IP کاربران و نوع دستگاه‌هایشون دست پیدا کرد.

#web #xff
👍32
علی شریفی زارچی: دانشگاه شریف سال گذشته دوره‌ی «برنامه‌نویسی پایتون و خلاقیت الگوریتمی» را برای هزاران دانش‌آموز متوسطه‌ی سراسر کشور برگزار کرد.
تمام محتوای این دوره شامل ویدئوی کلاس‌ها، تمرین‌های نظری و عملی «به صورت رایگان» به همه‌ی دانش‌آموزان ایران تقدیم می‌شود:
https://learn-python.ir

بیش از ۱۱۰ استاد، دانشجو و دانش‌آموخته‌ی دانشگاه شریف و سایر دانشگاه‌های داخل و خارج ایران در تهیه‌ی محتوا و برگزاری آن مشارکت داشتند.
علاوه بر دانش‌آموزان متوسطه، این دوره مناسب همه‌ی افرادی است که می‌خواهند برای نخستین بار برنامه‌نویسی یاد بگیرند و از چالش‌های زیبا لذت ببرند.

گذراندن این دوره و انجام تمرین‌های نظری و عملی آن با تلفن همراه امکان‌پذیر است و نیازی به استفاده از لپ‌تاپ یا کامپیوتر نیست.
صمیمانه پیشنهاد می‌کنیم اگر دانش‌آموز دبیرستان یا فردی علاقمند به یادگیری برنامه‌نویسی می‌شناسید، دوره را به او معرفی فرمایید.
👍4
Media is too big
VIEW IN TELEGRAM
شایستگی اتصال پایگاه داده در وب - آموزش MySql

✔️توی این ویدئو در مورد MySql صحبت می کنیم.
✔️درس پیاده سازی سیستم های اطلاعاتی و طراحی وب

پودمان 4 واحد یادگیری 6
شایستگی اتصال پایگاه داده در وب


لینک آپارات:
https://www.aparat.com/v/ezy0z22

لینک یوتیوب:
https://youtu.be/S286TFSsxj0
3👍1🔥1
Forwarded from Ninja Learn | نینجا لرن (Mohammad Eslami)
💎 سایت مپ (sitemaps) درجنگو 💎

امروز میخوایم با همدیگه یکی از ابزارهای خیلی کاربردی در دنیای Django رو بشناسیم. چیزی که بهمون کمک میکنه تا سایت‌مون رو بهتر و سریع‌تر برای موتورهای جستجو بهینه کنیم.

حالا Django sitemaps چیه؟
خب، فرض کنین سایتتون یه باغچه بزرگه. هر صفحه سایتتون هم یه گل قشنگ تو این باغچه. حالا Django sitemaps مثل یه نقشه کامل از این باغچه‌ست که به موتورهای جستجو میگه هر گل کجا قرار داره و چه ویژگی‌هایی داره. ️
این نقشه به موتورهای جستجو کمک میکنه تا راحت‌تر توی سایت شما گشت بزنن و صفحات مهم رو سریع‌تر پیدا کنن. اینجوری هم کاربران زودتر به اطلاعات دلخواهشون میرسن و هم سایتتون رتبه بهتری تو نتایج جستجو میگیره.

چرا از Django sitemaps استفاده کنیم؟

1⃣ بهبود سئو: با ایجاد یک sitemap کامل، موتورهای جستجو راحت‌تر صفحات سایتتون رو ایندکس میکنن و در نتیجه سایتتون توی نتایج جستجو بالاتر میاد.

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

3⃣ مدیریت بهتر صفحات: با استفاده از sitemaps میشه به راحتی صفحات سایت رو مدیریت کرد و صفحات اضافی یا قدیمی رو حذف کرد.

چطور Django sitemaps رو پیاده‌سازی کنیم؟ ️

1⃣ نصب پکیج: اول از همه باید پکیج django-sitemaps رو نصب کنیم. برای این کار کافیه تو ترمینال پروژهتون این دستور رو

بزنید:

pip install django-sitemaps 



2⃣ اضافه کردن به INSTALLED_APPS: بعد از نصب پکیج، باید اون رو به لیست اپلیکیشن‌های پروژه اضافه کنیم. تو فایل settings.py پروژهتون، 'django_sitemaps' رو به لیست INSTALLED_APPS اضافه کنید.

3⃣ ایجاد کلاس Sitemap: حالا باید یه کلاس از کلاس Sitemap که توی پکیج django_sitemaps تعریف شده، ایجاد کنیم. تو این کلاس، مشخص میکنیم کدوم مدل‌ها رو میخوایم توی sitemapمون قرار بدیم و چه فیلدهایی رو برای هر مدل میخوایم ایندکس کنیم.

from django.contrib.sitemaps import Sitemap
from .models import Post

class PostSitemap(Sitemap):

     changefreq = "weekly"
     priority   = 0.9

      def items(self):
           return Post.objects.all()

      def lastmod(self, obj):
           return obj.publish_date

      def location(self, item):
           return
reverse('home:post-detail',kwargs={'    slug':item.slug})
   

 
4⃣ ایجاد URL برای Sitemap: در نهایت باید یه URL برای دسترسی به sitemap ایجاد کنیم. این کار رو توی فایل urls.py پروژه انجام میدیم.

from django.contrib.sitemaps.views import sitemap from django.urls import path 
from .sitemaps import PostSitemap

sitemaps = {'posts': PostSitemap}

urlpatterns = [path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap')]

5⃣ ارسال Sitemap به موتورهای جستجو: بعد از ایجاد sitemap، آدرس اون رو به کنسول جستجوی گوگل و سایر موتورهای جستجو ارسال کنید.

⭕️ نکته: برای اینکه موتورهای جستجو به طور خودکار sitemap رو پیدا کنن، بهتره از فایل robots.txt استفاده کنید و آدرس sitemap رو داخل اون قرار بدید.

خلاصه:
خب Django sitemaps یه ابزار قدرتمند برای بهبود سئوی سایت هست. با استفاده از این ابزار، موتورهای جستجو بهتر میتونن محتوای سایتتون رو درک کنن و در نتیجه سایتتون توی نتایج جستجو بالاتر میاد.

امیدوارم این آموزش براتون مفید بوده باشه. اگه سوالی داشتین، حتما بپرسید.

بنظرتون پست بعدی راجب چی باشه؟

#Django #sitemap #seo #python #برنامه_نویسی
13👍4🔥3🤔1
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
💎 لاگینگ (logging) در جنگو 💎

امروز میخوایم با همدیگه یکی از ابزارهای خیلی مهم برای دیباگ کردن و پیگیری کردن اتفاقات توی برنامه هامون رو بررسی کنیم: لاگینگ.

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

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


چرا لاگینگ توی جنگو مهمه؟ 🤔

1⃣ دیباگ کردن: وقتی برنامه‌مون با خطا مواجه میشه، لاگ ها بهمون کمک میکنن تا بفهمیم دقیقا کجا و چرا این خطا رخ داده.

2⃣ پیگیری عملکرد: با بررسی لاگ ها میتونیم ببینیم که برنامه‌مون چقدر سریع اجرا میشه و کدهای مختلف چقدر زمان میبرن.

3⃣ امنیت: لاگ ها میتونن بهمون کمک کنن تا حملات امنیتی رو شناسایی کنیم و ازشون جلوگیری کنیم.




چطوری لاگینگ رو توی جنگو تنظیم کنیم؟

1⃣ وارد شدن به settings.py: اول از همه باید به فایل settings.py پروژه خودمون بریم. این فایل جاییه که همه تنظیمات کلی پروژهمون رو انجام میدیم.

2⃣ تنظیم متغیر LOGGING: توی این فایل یه متغیر به اسم LOGGING وجود داره که یه دیکشنری هست. ما باید این دیکشنری رو به شکلی که میخوایم تنظیم کنیم. مثلا برای اینکه لاگ هامون رو توی یه فایل به اسم mysite.log ذخیره کنیم، میتونیم این کد رو به settings.py اضافه کنیم:

LOGGING = { 
'version': 1,

'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',

'filename': 'mysite.log',
},
},
'loggers': {
'django': { 'handlers': ['file'], 'level': 'INFO',
},
},
}


🧐 درک تنظیمات:

version:
نسخه لاگر

disable_existing_loggers:
اگر True باشه، لاگرهای پیش فرض جنگو غیرفعال میشن.

handlers:
اینجا تعریف میکنیم که لاگ هامون رو کجا ذخیره کنیم. مثلا توی فایل، کنسول، یا یه دیتابیس.

loggers:
اینجا مشخص میکنیم که چه ماژول هایی لاگ تولید کنن و سطح لاگشون چی باشه.


🧪 پیاده سازی لاگینگ توی کد: برای استفاده از لاگینگ توی کدهامون، از ماژول logging پایتون استفاده میکنیم. مثلا:

import logging 

logger = logging.getLogger(__name__)

def my_function():
logger.info(
"This is an info message"
)
logger.error(
"This is an error message"
)


📊 سطح های مختلف لاگ:

🟣 DEBUG:
برای اطلاعات خیلی جزئی

🔵 INFO:
برای اطلاعات عمومی

🟠 WARNING:
برای هشدارها

🔴 ERROR:
برای خطاها

CRITICAL:
برای خطاهای خیلی جدی


⭕️ نکات مهم:
سطح لاگ رو با توجه به محیطتون تنظیم کنید: مثلا توی محیط توسعه سطح لاگ رو روی DEBUG بذارید تا همه چیز رو ببینید، اما توی محیط پروداکت سطح لاگ رو روی INFO یا بالاتر بذارید.

از لاگینگ برای دیباگ کردن استفاده کنید، اما اطلاعات حساس رو لاگ نکنید.
لاگ ها رو مرتبا بررسی کنید تا مشکلات رو زودتر پیدا کنید.

خلاصه: لاگینگ یکی از ابزارهای خیلی مهم برای توسعه دهندگان جنگو هست. با استفاده از لاگینگ میتونیم برنامه های با کیفیت تر و پایدارتری بسازیم.

امیدوارم این آموزش براتون مفید بوده باشه. اگه سوالی داشتید حتما بپرسید.


#جنگو #لاگینگ #توسعه_وب #پایتون
👍143