Ninja Learn | نینجا لرن
1.26K subscribers
95 photos
36 videos
11 files
306 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
#پست_جدید

💎 کلوژر (closure) در جاوااسکریپت 💎

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

کلوژر چیه؟

تصور کنید یه جعبه دارید که توش یه آبنبات و یه یادداشت هست. آبنبات رو می‌خورید، اما یادداشت همیشه با جعبه همراهه و هر وقت جعبه رو باز کنید، یادداشت رو می‌بینید. کلوژر هم همینجوریه!

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

مثال ساده:👇

function createCounter() {
let count = 0;
return function() {
count++;
return count;
}
}

let counter = createCounter();
console.log(counter()); // 1
console.log(counter());
// 2

در این مثال، تابع createCounter یه شمارنده می‌سازه. هر بار که این تابع رو صدا می‌زنیم، یه تابع جدید برمی‌گردونه که به متغیر count دسترسی داره. این متغیر حتی بعد از اینکه تابع createCounter اجرا شد، وجود داره و هر بار که تابع برگردونده شده رو صدا می‌زنیم، مقدار count یک واحد اضافه میشه.

چرا کلوژر مهمه؟

🏢 ساختارهای داده: کلوژر به ما کمک می‌کنه ساختارهای داده مثل private variables رو پیاده‌سازی کنیم.

مدولار بودن: با استفاده از کلوژر می‌تونیم کدهایمون رو به بخش‌های کوچکتر و مستقل تقسیم کنیم.

♻️ پیاده سازی Callback functions در کلوژر: کلوژر callback function‌ ها خیلی کاربرد داره.

✏️ طراحی الگوهای مختلف: بسیاری از الگوهای طراحی جاوااسکریپت از کلوژر استفاده می‌کنند.

خلاصه:

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

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

#جاوااسکریپت #کلوژر #برنامه_نویس
👍5
💎 کوکی (cookie) ها در وب 💎

🍪 کوکی چیه؟

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

کوکی‌ها چیکار می‌کنن؟

کوکی‌ها به وبسایت‌ها کمک می‌کنن تا:

1️⃣ تو رو بشناسن: وقتی دوباره به وبسایتی برمیگردی، کوکی‌ها به وبسایت کمک می‌کنن تا بفهمه که تو قبلاً اونجا بودی و تنظیمات شخصی‌سازی شده‌ تورو یادش بیاره.

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

3️⃣ وبسایت رو بهتر کنند: وبسایت‌ها با استفاده از اطلاعاتی که از کوکی‌ها به دست می‌ آرند، می‌تونن وبسایتشون رو بهبود بدن و اون رو برای کاربران جذاب‌تر کنن.

کوکی‌ها چطور ساخته میشن؟

وقتی تو به یک وبسایت میری، سرور اون وبسایت (یعنی کامپیوتر بزرگی که وبسایت رو اجرا می‌کنه) یه کوکی رو می‌سازه و به مرورگرت می‌فرسته. مرورگرت هم اون کوکی رو توی کامپیوتر یا موبایلت ذخیره می‌کنه.

🍪 انواع کوکی‌ها

کوکی‌ها انواع مختلفی دارن که هر کدومشون کار خاصی انجام میدن. مثلاً:

1️⃣ کوکی‌های session: این کوکی‌ها فقط تا زمانی که تو در وبسایت هستی وجود دارن و وقتی از وبسایت خارج شدی، حذف میشن.

2️⃣ کوکی‌های دائمی: این کوکی‌ها برای مدت طولانی‌تری روی دستگاهت باقی میمونن و به وبسایت کمک میکنن تا اطلاعات بیشتری در مورد وبگردی جمع‌آوری کنه.

حرف آخر

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

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

#کوکی #وبسایت #حریم_خصوصی #اینترنت
👍11🔥2
#پست_جدید

💎 سیگنال‌ها در جنگو 💎

امروز میخوایم در مورد یکی از ابزارهای جذاب و کاربردی جنگو به اسم سیگنال‌ها (signals) صحبت کنیم.
سیگنال‌ها مثل یه جور اعلان یا نوتیفیکیشن هستن که وقتی اتفاق خاصی توی پروژه شما میفته، ارسال میشن.
مثلا وقتی یه کاربر جدید ثبت‌نام می‌کنه، یه داده جدید اضافه میشه یا یه مدل حذف میشه، سیگنالی ارسال میشه.

سیگنال‌ها چه شکلی هستن؟

سیگنال‌ها به چند دسته کلی تقسیم میشن:

1️⃣ سیگنال‌های مدل: این سیگنال‌ها به تغییرات در مدل‌های شما مربوط میشن. مثلا وقتی یه رکورد جدید اضافه میشه، تغییر می‌کنه یا حذف میشه، سیگنالی ارسال میشه.

2️⃣ سیگنال‌های مدیریت: این سیگنال‌ها به عملیات مدیریت پایگاه داده مربوط میشن. مثلا وقتی شما دستور migrate رو اجرا می‌کنید، سیگنالی ارسال میشه.

3️⃣ سیگنال‌های درخواست/پاسخ: این سیگنال‌ها به درخواست‌ها و پاسخ‌های HTTP مربوط میشن. مثلا وقتی یه درخواست به سرور شما ارسال میشه یا پاسخ داده میشه، سیگنالی ارسال میشه.

4️⃣ سیگنال‌های تست: این سیگنال‌ها به اجرای تست‌های شما مربوط میشن.

5️⃣ سیگنال‌های دیتابیس: این سیگنال‌ها به اتصال به دیتابیس مربوط میشن.

6️⃣ سیگنال‌های اپ احراز هویت: این سیگنال‌ها به عملیات مربوط به احراز هویت کاربران مربوط میشن.


🔬 مثال‌های عملی از سیگنال‌ها:

1️⃣ مثال 1: ارسال ایمیل خوشامدگویی پس از ثبت‌نام کاربر

from django.db.models.signals import post_save
from django.dispatch import receiver
from django.core.mail import send_mail  


from .models import User

@receiver(post_save, sender=User)
def send_welcome_email(sender, instance, created, **kwargs):
    if created:  

        send_mail(
            'خوش آمدید!',
            'از ثبت‌نام شما در سایت ما متشکریم.',
            '[email protected]',
            [instance.email],
            fail_silently=False,
        )


در این مثال، هر وقت یک کاربر جدید ثبت‌نام میشه، سیگنال post_save برای مدل User ارسال میشه و تابع send_welcome_email اجرا میشه و یک ایمیل خوشامدگویی برای کاربر جدید ارسال می‌شود.


2️⃣ مثال 2: ایجاد پروفایل کاربری به صورت خودکار
from django.db.models.signals import post_save
from django.dispatch import receiver

from .models import User, Profile

@receiver(post_save, sender=User)
def create_profile(sender,  
instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

در این مثال، هر وقت یک کاربر جدید ثبت‌نام می‌شود، به طور خودکار یک پروفایل برای او ایجاد می‌شود.


3️⃣ مثال 3: بروزرسانی یک فیلد پس از تغییر فیلد دیگر
from django.db.models.signals import pre_save
from django.dispatch import receiver

from .models import MyModel

@receiver(pre_save, sender=MyModel)
def update_last_activity(sender, instance, **kwargs):
    if instance.is_active:
        instance.last_activity = datetime.now()


در این مثال، هر وقت فیلد is_active یک مدل تغییر کرد، فیلد last_activity هم به روز میشه.


مزایای استفاده از سیگنال‌ها:

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

📄 افزایش خوانایی کد: استفاده از سیگنال‌ها باعث میشه کد شما تمیزتر و خواناتر بشه.

🔺سهولت در توسعه: سیگنال‌ها به شما کمک می‌کنن تا برنامه‌های پیچیده‌تری رو توسعه بدید.


معایب استفاده از سیگنال‌ها:

😖 پیچیدگی: استفاده نادرست از سیگنال‌ها می‌تونه باعث پیچیدگی بیش از حد کد بشه.

🔋 کاهش سرعت: در بعضی موارد، استفاده از سیگنال‌ها می‌تونه سرعت اجرای برنامه رو کاهش بده.

نکات مهم:
از سیگنال‌ها با احتیاط استفاده کنید و از ایجاد حلقه‌های بی‌نهایت خودداری کنید.
سیگنال‌ها رو برای کارهای ساده و تکراری استفاده کنید.
برای کارهای پیچیده بهتره از ابزارهای دیگری مثل Celery استفاده کنید.

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

#سیگنال #signals #django #backend
👍103🥴1
دوستان از محتوای کانال خوشتون میاد؟🤔 اگه نه ممنون میشم توی کامنتا بگید تا بهترشون کنیم❤️
Anonymous Poll
81%
بله عالین 😀
14%
نه جالب نیستن 🥱
5%
مزخرفن 😒
1
🚀 آموزش ساخت یک IDE ساده با پایتون و Tkinter

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

🛠 نصب Tkinter
Tkinter معمولاً با پایتون به صورت پیش‌فرض نصب می‌شود. اما اگر آن را ندارید، می‌توانید از دستور زیر برای نصب آن استفاده کنید:

pip install tk
📋 مراحل ساخت IDE

1. ایجاد پنجره اصلی IDE
2. افزودن ویجت‌های متن برای نوشتن کد
3. افزودن منوها برای باز کردن، ذخیره و اجرای فایل‌ها
4. اضافه کردن قابلیت اجرای کد پایتون

1. ایجاد پنجره اصلی IDE

ابتدا یک پنجره اصلی ایجاد می‌کنیم:
import tkinter as tk
from tkinter import filedialog, Text
import subprocess

def create_main_window():
window = tk.Tk()
window.title("پایتون IDE")
window.geometry("800x600")
return window

if __name__ == "__main__":
main_window = create_main_window()
main_window.mainloop()
2. افزودن ویجت‌های متن برای نوشتن کد

برای نوشتن کد، یک ویجت Text اضافه می‌کنیم:
def add_text_widget(window):
text_widget = Text(window, wrap='none')
text_widget.pack(expand=True, fill='both')
return text_widget

if __name__ == "__main__":
main_window = create_main_window()
text_editor = add_text_widget(main_window)
main_window.mainloop()
3. افزودن منوها برای باز کردن، ذخیره و اجرای فایل‌ها

یک منو برای باز کردن، ذخیره و اجرای فایل‌ها اضافه می‌کنیم:
def add_menu(window, text_widget):
menu = tk.Menu(window)
window.config(menu=menu)

file_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="فایل", menu=file_menu)

def open_file():
file_path = filedialog.askopenfilename(defaultextension=".py", filetypes=[("Python files", "*.py")])
if file_path:
with open(file_path, "r", encoding="utf-8") as file:
code = file.read()
text_widget.delete(1.0, tk.END)
text_widget.insert(tk.END, code)

def save_file():
file_path = filedialog.asksaveasfilename(defaultextension=".py", filetypes=[("Python files", "*.py")])
if file_path:
with open(file_path, "w", encoding="utf-8") as file:
code = text_widget.get(1.0, tk.END)
file.write(code)

def run_code():
code = text_widget.get(1.0, tk.END)
exec(code)

file_menu.add_command(label="باز کردن", command=open_file)
file_menu.add_command(label="ذخیره", command=save_file)
file_menu.add_separator()
file_menu.add_command(label="اجرا", command=run_code)

if __name__ == "__main__":
main_window = create_main_window()
text_editor = add_text_widget(main_window)
add_menu(main_window, text_editor)
main_window.mainloop()
4. اضافه کردن قابلیت اجرای کد پایتون

برای اجرای کد پایتون، از توابع داخلی پایتون استفاده می‌کنیم:
`
import tkinter as tk
from tkinter import filedialog, Text, messagebox

def create_main_window():
window = tk.Tk()
window.title("پایتون IDE")
window.geometry("800x600")
return window

def add_text_widget(window):
text_widget = Text(window, wrap='none')
text_widget.pack(expand=True, fill='both')
return text_widget

def add_menu(window, text_widget):
menu = tk.Menu(window)
window.config(menu=menu)

file_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="فایل", menu=file_menu)

def open_file():
file_path = filedialog.askopenfilename(defaultextension=".py", filetypes=[("Python files", "*.py")])
if file_path:
with open(file_path, "r", encoding="utf-8") as file:
code = file.read()
text_widget.delete(1.0, tk.END)
👍9🔥2
https://t.iss.one/+td1EcO_YfSphNTlk

دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای
👍2
Ninja Learn | نینجا لرن pinned «https://t.iss.one/+td1EcO_YfSphNTlk دوستان این لینک گروهه میتونید توش جوین شید و چت بکنید و سوالاتونو بپرسید یا ... هرکار دیگه ای»
سلام رفقا 👋

پایه اید فردا پرسش و پاسخ تو اینستا بذاریم و سوالاتونو جواب بدیم؟
Final Results
58%
آره بذار
42%
نذار، سوالی ندارم
1
💎 کالبک ها در جاوا اسکریپت 💎

امروز میخوایم یکی از مفهوم های خیلی مهم و کاربردی در جاوا اسکریپت رو با هم بررسی کنیم: کالبک ها (callbacks).
شاید اولش یه کم پیچیده به نظر برسه، اما نگران نباشید! با مثال های ساده و کاربردی، این مفهوم رو براتون خیلی روشن میکنم.

کالبک چیه؟

کالبک در واقع یه تابعه که به عنوان آرگومان به تابع دیگه ای پاس داده میشه. یعنی یه تابع رو میگیریم و به جای اینکه خودمون مستقیماً اونو اجرا کنیم، به تابع دیگه ای میدیم تا در زمان مناسب خودش اونو صدا بزنه.


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

مثال ساده:


function greet(name, callback) { console.log(`سلام ${name}!`); callback(); } function sayGoodbye() { console.log("خداحافظ!"); } greet("علی", sayGoodbye); 

در این مثال:
تابع greet دو آرگومان میگیره: یک نام و یک کالبک.
بعد از چاپ سلام، تابع callback رو صدا میزنه که در این مثال sayGoodbye هست.


پس خروجی این کد میشه:

سلام علی!
خداحافظ!

مثال کاربردی تر:

function fetchData(url, callback) { // کدهایی برای دریافت داده از یک آدرس اینترنتی // ... callback(data); // بعد از دریافت داده، کالبک رو با داده دریافت شده صدا میزنه } function displayData(data) { console.log(data); } fetchData("https://api.example.com/data", displayData); 

در این مثال: ⬇️

1⃣ تابع fetchData داده رو از یک آدرس اینترنتی دریافت میکنه.

2⃣ بعد از دریافت داده، تابع callback رو با داده دریافت شده صدا میزنه.

3⃣ و displayData به عنوان کالبک استفاده شده و داده رو در کنسول چاپ میکنه.

👀 کاربردهای کالبک ها:

تابع های ناهمزمان: برای مدیریت عملیات هایی که زمان بر هستند مثل درخواست های HTTP، تایمرها و ...

📅 رویدادها(Events): در رویدادهایی مثل کلیک کردن روی یک دکمه، بارگذاری یک صفحه و ...

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

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

#javascript #callback #programing
🔥2
Ninja Learn | نینجا لرن
سلام رفقا 👋

پایه اید فردا پرسش و پاسخ تو اینستا بذاریم و سوالاتونو جواب بدیم؟
سلام رفقا 👋

همونطوری که دیشب گفتم، توی اینستا کوئسشن باکس گذاشتیم

بیاید سوالاتونو بپرسید همه رو جواب میدیم 🌹

https://www.instagram.com/stories/ninjalearn.ir/3425693636133198315?igsh=MXd0M3ZqcXg5ZG4zZA==
2
درضمن رفقا

فالو کردن و لایک کردن پست های پیج اینستامون، بهمون انرژی میده پست های بیشتری بذاریم و دوره های بیشتری منتشر کنیم 😊

برای شما فقط چند ثانیه ازتون زمان میگیره ولی برای ما یه دنیا ارزش داره حمایت هاتون 🥹

عشقید 🌹
52👎1
Ninja Learn | نینجا لرن pinned «سلام رفقا 👋 همونطوری که دیشب گفتم، توی اینستا کوئسشن باکس گذاشتیم بیاید سوالاتونو بپرسید همه رو جواب میدیم 🌹 https://www.instagram.com/stories/ninjalearn.ir/3425693636133198315?igsh=MXd0M3ZqcXg5ZG4zZA==»
#پست_جدید

💎کوئری ست های بهینه در جنگو 💎


تا حالا شده برنامه‌تون مثل لاک‌پشت باشه و شما هم هی سر به دیوار بکوبید که چرا اینقدر کند شده؟ 😖

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

کوئری ست چیه و چرا مهه؟

کوئری ست یه جور جعبه هست که توش یه مشت اطلاعات از دیتابیس جمع میشه. مثلاً می‌خواییم همه محصولاتی که قیمتشون زیر 100 تومنه رو پیدا کنیم. QuerySet این کارو برامون انجام میده.


حالا چرا QuerySet اینقدر مهمه؟

چون نحوه ساختن این جعبه ، مستقیم روی سرعت برنامه‌مون تاثیر داره. اگه درست ساخته بشه، برنامه‌مون مثل برق کار می‌کنه و اگه اشتباه ساخته بشه، برنامه‌مون مثل لاک‌پشت میشه!

ترفندهایی برای کوئری ست ها با سرعت بالا

🅰 فقط اون چیزی رو بگیر که نیاز داری:

1️⃣ استفاده از ()only و ()defer:
فرض کن یه محصول کلی اطلاعات داره، از رنگش گرفته تا مدلش. اما تو فقط به اسم و قیمتش نیاز داری. با استفاده از ()only فقط همون اطلاعاتی که نیاز داری رو از دیتابیس بخون.


2️⃣ اجتناب از ()select_related و ()prefetch_related بی‌جا:
این دو تا مثل یه پل بین دو تا جدول هستن. اما اگه بی‌جا ازشون استفاده کنیم، کوری ست پیچیده میشه و سرعت برنامه‌مون کم میشه.


🅱  فیلتر کردن رو حرفه ای انجام بده:

1️⃣ فیلترهای منطقی: از فیلترهای and و or برای پیدا کردن دقیق‌تر اطلاعات استفاده کن.

3️⃣ فیلترهای تاریخ و زمان: برای پیدا کردن اطلاعاتی که تاریخشون بین دو تاریخ خاصی هست، از فیلترهای مخصوص تاریخ و زمان استفاده کن.

4️⃣ به تنبل بودن کوئری ست ها (lazy queryset)دقت کن:
کوئری ست ها تا زمانی که نیاز نباشه ارزیابی نمی‌شن این یعنی تا وقتی که بخوای تعداد محصولاتی که پیدا کردی رو چاپ کنی، کوئری ست به دیتابیس ارسال نمی‌شه.

5️⃣ از Aggregation استفاده کن:محاسبه مجموع، میانگین و ... برای محاسبه اینجور چیزها از متدهای Aggregation مثل ()count(), sum(), avg استفاده کن.

6️⃣ ایندکس‌ها رو فراموش نکن:
سرعت بخشیدن به جستجوها ایندکس مثل یه فهرست تلفنی برای دیتابیس هست. با ایجاد ایندکس روی فیلدهایی که زیاد روشون جستجو می‌کنی، سرعت جستجو رو خیلی زیاد می‌کنی.


🌡 مثال عملی

from myapp.models import Product

# گرفتن همه محصولات با قیمت کمتر از 100000 تومان و فقط نمایش نام و قیمت
products = Product.objects.filter(price__lte=100000).only('name', 'price')

# محاسبه تعداد محصولات در هر دسته
product_counts = Product.objects.values('category').annotate(count=Count('id'))


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

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

#programing #django #queryset
🔥9👍1😁1
سلام رفقا 👋
اولین دوره‌مون که دوره DRF هست در حال ضبطه و به زودی منتشر میشه 🙂
دوره دوم مون "امنیت توی برنامه نویسی وب" هست که کلا به صورت تئوریه و توش مباحث امنیتی قراره گفته بشه. حالا سوال من اینه که دوره همون امنیت باشه یا اینکه یه دوره دیگه میخواید؟
Final Results
43%
امنیت باشه، تئوری اوکیه
47%
امنیت باشه، ولی تئوری نباشه
10%
نه یه دوره دیگه میخوام
🥰2
Ninja Learn | نینجا لرن pinned «سلام رفقا 👋
اولین دوره‌مون که دوره DRF هست در حال ضبطه و به زودی منتشر میشه 🙂
دوره دوم مون "امنیت توی برنامه نویسی وب" هست که کلا به صورت تئوریه و توش مباحث امنیتی قراره گفته بشه. حالا سوال من اینه که دوره همون امنیت باشه یا اینکه یه دوره دیگه میخواید؟
»
💎 مفهوم 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
👍7👎1🔥1
💎 گواهی نامه SSL یا همون Secure Sockets layer) 💎

امروز میخوایم در مورد یه موضوع خیلی مهم و کاربردی تو دنیای وب حرف بزنیم

🪪 گواهینامه SSL

🤔 حالا SSL چیه و چرا اینقدر مهمه؟

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

📚 گواهینامه SSL از چه بخش‌هایی تشکیل شده؟

🔑 کلید عمومی: این کلید مثل یه قفل هست که فقط با کلید خصوصی باز میشه. این کلید به مرورگرتون کمک می‌کنه تا ارتباط امنی با سایت برقرار کنه.

🗝 کلید خصوصی: این کلید همون کلید اصلی هست که فقط سرور سایت داره. این کلید برای رمزگشایی اطلاعاتی که با کلید عمومی رمزگذاری شده، استفاده میشه.

📑 اطلاعات مربوط به سایت: این بخش شامل اطلاعاتی مثل آدرس سایت، نام شرکت و تاریخ انقضای گواهینامه میشه.

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

👮‍♂ حالا SSL از چه حملاتی جلوگیری می‌کنه؟ ️

یکی از مهم‌ترین حملاتی که SSL ازش جلوگیری می‌کنه،

🕴حمله Man-in-the-Middle هست. تو این حمله، هکرها خودشون رو بین شما و سایت قرار میدن و اطلاعاتتون رو دزدکی می‌بینن . اما با وجود SSL، این کار برای هکرها خیلی سخته، چون اطلاعات شما به صورت رمزگذاری شده رد و بدل میشه.

چرا SSL مهمه؟

🛡 امنیت اطلاعات: مهم‌ترین دلیل استفاده از SSL، امنیت اطلاعات شماست. با داشتن SSL، اطلاعات حساس مثل شماره کارت بانکی، رمز عبور و اطلاعات شخصی شما به صورت امن منتقل میشه.

🤝 اعتمادسازی: وقتی یه سایت گواهینامه SSL داره، کاربران به اون سایت اعتماد بیشتری می‌کنن. چون می‌دونن که اطلاعاتشون امن هست.

👀 سئو: موتورهای جستجو مثل گوگل به سایت‌های امن امتیاز بیشتری میدن. پس داشتن SSL میتونه به بهبود رتبه سایتتون کمک کنه.

⭕️ پس یادتون باشه:
هر وقت خواستید اطلاعات حساسی رو تو یه سایت وارد کنید، حتما مطمئن بشید که اون سایت گواهینامه SSL داره.

وجود آدرس HTTPS:// در ابتدای آدرس سایت نشونه وجود گواهینامه SSL هست.

نماد قفل سبز رنگ کنار آدرس سایت هم نشونه دیگه ای از وجود SSL هست.

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

#SSL #امنیت_اطلاعات #وبسایت #امنیت_اینترنتی #رمزنگاری
👍81
💎 سایت مپ (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 #برنامه_نویسی
👍10