جنگولرن
3.78K subscribers
287 photos
73 videos
31 files
553 links
آموزش Django و بستگان
Download Telegram
این رپو یک منبع hands-on برای یادگیری برنامه نویسی async در پایتون هست
فرقی نداره که هر مسیری رو در برنامه نویسی با پایتون انتخاب کرده باشین (بک اند، دیتا، ماشین لرنینگ و ...) این روزا asyncio جزو ملزومات هست.

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

ممنون میشم اگه براتون مفید بود، استار بدین و برای تکمیل یا بهتر شدنش مشارکت کنین.

https://github.com/aligheshlaghi97/asynchronous-python
🔥6👍2
Forwarded from Python BackendHub (Mani)
چیزی که من متعجب شدم اکثرا میگن این <خیلی پیچیدست>. ولی حقیقتا اصلا پیچیده نیست. کامیونیتی پایتون خیلی گارد زیادی نسبت به تایپینگ داره که تو دراز مدت قطعا ضربه میخورین چون پایتون الان هر نسخه ریلیز میده ۸۰ درصدش تایپینگ improvement هست و شما اگه الان typing بلد نباشین عملا از خیلی از لایبری های جدید نمیتونید استفاده کنید.
تو این مثال حتی یک خط نشده. و شما اینکار رو برای آیدی ها انجام میدی. تو یک سرویس پرحجم که شما ۲۰۰ تیبل داری نهایتا میشه ۲۰۰ خط NewType. و باعث میشه signature همه کد های شما قابل خوانا باشه.
این tip به درد شما میخوره اگه کد میزنی. لزوما به بک اند هیچ ربطی نداره. الان شما یک تابع بنویسید که یک سری‌آیدی موزیک و آیدی یوزر بگیره و بعد بگه برای هر موزیک هر یوزر پیش بینی کنه از صفر تا صد چقدر ممکنه دوست داشته باشه

این ۳ مثال رو ببینید, مثال اول تایپینگ خوبی داره. مثال دوم تایپینگ داره ولی به درد بخور نیست خیلی. و مثال سوم تایپینگ نداره.

# WITH GOOD TYPING
Percentage: TypeAlias = int # from 0 to 100.
def calculate_music_populatiry(person_ids: list[PersonId], music_ids: list[MusicId]) -> dict[PersonId, list[tuple[Bookid, Percentage]]

# WITH BAD TYPING
def calculate_music_populatiry(person_ids: list[UUID], music_ids: list[UUID]) -> dict[UUID, list[tuple[UUID, int]]


# WITHOUT TYPING
def calculate_music_populatiry(person_ids, music_ids)


من میتونم بدونه اینکه کدو ببینم از فانکشن اولی استفاده کنم. فانکشن دومی معلوم نیست چی به چی لینک شده. پس باید حواسم باشه موقع استفاده ازش. و بعدا ریفکتورش هم کردم باید ۱۰۰درصد حواسم باشه signature اش تغییر نکنه. و فانکشن سوم که کلا فاجعست. اصلا maintainable نیست. قضاوت رو میذارم با خودتون.

@PyBackendHub
👍6
Media is too big
VIEW IN TELEGRAM
توضیحاتی در مورد پکیج django-allauth

توی این ویدئو که بخشی از آپدیت جدید آموزش ساخت فروشگاه اینترنتی هست در مورد موضوعات زیر صحبت شد:
✔️روش نصب django-allauth
✔️چرا از این پکیج استفاده کردیم
✔️اگر بخواهیم خودمان لاگین با گوگل رو بنویسیم چه چیزهایی باید بدونیم
✔️تنظیمات این پکیج
✔️قابلیت های این پکیج


لینک آپارات:
https://aparat.com/v/tpt8277
لینک یوتیوب:
https://youtu.be/akX6ZRfOogU
چند قسمت دیگه از این دوره رو اینجا ببینید:
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://www.daneshjooyar.com/project-django/
4👏1
.

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

https://youtu.be/SKXTwi4UylU

تو این ویدیو، از بیسیک ترین تا پیشرفته ترین مباحث تایپینگ پایتون صحبت کردیم و در نهایت هم چند مثال از pydantic و کاربرد هاش زدیم. دیدن این ویدیو برای هر برنامه نویسی واجبه

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

https://t.me/QaDeveloper

@SEYED_BAX | @MakeDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Forwarded from Ninja Learn | نینجا لرن (Mohammad Eslami)
#پست_جدید
میخوام درمورد یک موضوع خیلی جالب توی جنگو صحبت کنم که اکثرا توش مشکل دارن
خب اون چیه؟


🤓 کش شدن نتیجه کوری ها❗️


میدونستید که جنگو نتیجه کوری هارو کش میکنه؟

حالا این یعنی چی ⁉️

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

حالا بیاید توضیح بدم.

⭕️ قبلش یه نکته مهم رو بگم: ⭕️
هر چیزی که باعث ایجاد یک QuerySet جدید بشه باعث هیت شدن جدید به دیتابیس خواهد شد.

حالا بریم مثالو ببینیم:

users = User.objects.all()
print(users)

if users:
for u in users:
print(u)


خب تو این کد بنظرتون چند بار دیتابیس توسط جنگو هیت وصدا زده میشه میشه؟

حتما فکرمیکنید ۳ بار نه اینجوری نیست ❗️

اینجا فقط 2 بار داره به دیتابیس هیت میزنه.

1️⃣ توی خط اول ما فقط queryset رو تعریف کردیم. از اونجایی که میدونید کوری ست ها توی جنگو lazy هستن و تا وقتی که صداشون نزنیم اجرا نمیشن.

2️⃣ توی خط دوم ما queryset رو print کردیم و اولین هیتمون به دیتابیس زده میشه ولی یه نکته print نمیره کل رکورد هارو بیاره چون منطقی نیست.

پرینت یک محدودیت داره برای آوردن رکورد ها مثلا اگه شما هزار تا رکورد داشته باشید print کل اون هزار تا رو نمیاره و مثلا ۱۰۰ تاشو میاره دومین نکته اینه که اینجا هیچ کشی اتفاق نمی افته( دلیلشو جلوتر میگم)

3️⃣ توی خط سوم ما میخوایم با if بررسی کنیم کاربری وجود داره یا نه اینجا جنگو میاد کش ر و چک میکنه تا ببینه برای users ریزالتی کش شده یانه

اینجا میبینه هیچ کشی وجود نداره و در نتیجه اینجا دومین هیتمون به دیتابیس میخوره و کل رکورد هارو برمیگردونه و مثل print عمل نمیکنه و نکته بعدی اینه اینجا ریزالت کوری توی رم سرور توسط جنگو کش میشه حالا اینجا جالب میشه😁

توی خط بعدی که یه حلقه زدیم روی users اینجا میاد کش رو چک میکنه و میبینه که ریزالت users کش شده و میاد از اون کش استفاده میکنه و به دیتابیس هیچ کوری نمیزنه و درنتیجه اینجا فقط دوبار به دیتابیس هیت خورده میشه

حالا چرا print نتیجش کش نشد؟

به گفته خود جنگو، جنگو فقط زمانی ریزالت یه queryset رو کش میکنه که اون queryset کامل اجرا بشه. و توی print چون queryset کامل اجرا نمیشه منطقا ریزالتش کش نمیشه
ولی توی if چون queryset کامل اجرا شد ریزالتشم کش شد


برای اثبات این حرفم میتونید چیزایی که کش شده رو ببینید 👇

users = User.objects.all()
print(users)
print("Cache: ", users._result_cache)

if users:
print("Cache: ", users._result_cache)
for u in users:
print(u)



خروجی این کد هم این خواهد بود:

<QuerySet [<User: mohammad>]>
Cache: None
Cache: [<User: mohammad>]
mohammad

همونطور که میبینید بعد از اجرا شدن print هیچ ریزالتی کش نشده و کش خالیه چون queryset کامل اجرا نشد.

ولی وقتی if اجرا شد چون queryset کامل اجرا شد ریزالتم کش شد و ازاین به بعد از کش استفاده میکنه.

یه نکته در پایان بگم این کش تا زمانی باقی میمونه که اجرای تابع تموم شه و بعد ازاون توسط garbage collector از مموری سرور پاک میشه جنگو توسط پایتون و پایتون روی سرور اجرا میشه.

توی پستای بعدی درمورد garbage collector بیشتر توضیح میدم

#جنگو #کش_در_جنگو #برنامه_نویسی

@ninja_learn_ir
👍11
موقعیت کاری مشتی
از لینکدین Babak Doraniarab

ببین من با علی آقا صحبت کردم
نیرو جنگو می‌خوان که میدلول باشه و برای این سطح دارن حقوق خوبی میدن اینقدر هم خودش آدم مشتی آب بود که می‌گفت داکر ندوسنت هم اکیه خودم کمک میکنم یاد بگیره

این نشون میده مدیر خوبیه


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

بزودی موقعیت تازه نفس هم پیدا میکنم میارم.


اینجا اپلای کن به ایشون پیام بدین Ali Esmaeili
متن پیام ایشون که شرح شغله:


ببین واقعا همون


Python
Django
Rest framework
PostgreSQL
Rabbitmq
Redis
Celery
git

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

ولی من انتظار بالایی ندارم، مثلا داکر رو اگه بلد نیست میاد در حد نیازش یاد میگیره اینجا.
ولی واقعا پایتون و جنگو و دیتابیس رو بلد باشه.

لینک پست
👍2
دوره غیر رایگان ساخت فروشگاه اینترنتی با جنگو آپدیت شد.

اگه کد تخفیف 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