Azad's Programmers
Open in Telegram
کانال آموزش برنامه نویسی دانشگاه آزاد گروه چت پرسش و پاسخ: https://t.me/azad_program
Show more2 105
Subscribers
No data24 hours
-67 days
+430 days
Posts Archive
2 105
اصول SOLID
(1/2) پست دوم با مثال گذاشته میشه
یکی از چالشهایی که هر برنامهنویس با ان مواجه میشه کدهای پیچیده، غیرقابل توسعه و پر از باگ هستش برای اینکه کدهامون تمیز، توسعهپذیر و تستپذیر باشند باید از یک سری اصول مهندسی نرمافزار استفاده کنیم اصول SOLID برای همین طراحی شدند
تاریخچه SOLID
در اواخر دهه ۱۹۸۰ و اوایل ۱۹۹۰، رابرت سی. مارتین (Robert C. Martin) که به "عمو باب" (Uncle Bob) معروف است روی روشهای بهتر طراحی شیگرا کار میکرد در مقالهای که سال ۲۰۰۰ منتشر کرد، پنج اصل مهم را معرفی کرد که به برنامهنویسا کمک میکرد کدهای بهتری بنویسن
چند سال بعد مایکل فدرز (Michael Feathers) این پنج اصل را با نام SOLID معرفی کرد که مخفف پنج اصل زیر است:
- Single Responsibility Principle
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation Principle
- Dependency Inversion Principle
این اصول باعث میشه کدهای ما:
خواناتر و درکپذیرتر باشن، کمتر دچار تغییرات غیرمنتظره شوند، تستپذیرتر باشن و به راحتی توسعه داده شوند
___________________________
نظر شخصی: همیشه رعایت SOLID خوب نیست و گاهی ممکنه به ضرر خودمون و پروژه تموم شه به چند دلیل :
1) پیچیدگی اضافی توی پروژه هایی که نیازی به پیچیدگی کد ندارند و خیلی ساده با یک کلاس میتونند کار کنند
2) وقتی تازه میخوایم یه پروداکت رو بالا بیاریم و سرعت توسعه مهم تر از کد خیلی اصولی هست
3) از این گزینه به بعد از سواد بنده خارج هست و اگر مشتاق بودید میتونید درموردش سرچ کنید و بیشتر بخونید
___________________________
S - Single Responsibility Principle (SRP)
هر کلاس فقط باید یک وظیفه مشخص داشته باشه یعنی یک کلاس نباید چندین کار مختلف انجام بده
O - Open/Closed Principle (OCP)
کلاسها باید برای توسعه باز، ولی برای تغییر بسته باشند یعنی وقتی نیاز به ویژگی جدید داریم نباید کد قبلی را تغییر دهیم بلکه باید قابلیت اضافه کردن به آن وجود داشته باشه
L - Liskov Substitution Principle (LSP)
هر کلاس فرزند باید بدون مشکل جایگزین کلاس والد بشه
I - Interface Segregation Principle (ISP)
به جای یک اینترفیس بزرگ چند اینترفیس کوچکتر داشته باشه
D - Dependency Inversion Principle (DIP)
کلاسها نباید به جزئیات وابسته باشند بلکه باید به اینترفیسها وابسته باشند.
Group: @azad_program
Channel: @kiau_program
2 105
🦭 آشنایی با عملگر والروس := در پایتون
عملگر والروس از پایتون 3.8 اضافه شد و به شما این امکان را میدهد که همزمان مقدار یک متغیر را تعیین کرده و از آن استفاده کنید. این ویژگی باعث کوتاهتر شدن کدها میشود.
🔹 قبل از والروس:
n = int(input("Enter a number: "))
while n > 0:
print(n)
n = int(input("Enter a number: "))
🔹 بعد از والروس:
while (n := int(input("Enter a number: "))) > 0:
print(n)
✅ کد کوتاهتر و خواناتر شده و مقدار n تنها یک بار مقداردهی شده است.
💡 کجا ازش استفاده کنیم؟
🔹 در حلقهها و شرطهایی که نیاز به مقداردهی و بررسی مقدار داریم.
📌 خوانایی کد مهمتر از کوتاه بودن آن است، پس فقط جایی که مفید باشد از آن استفاده کنید!
#Python #برنامهنویسی #کدنویسی
Group: @azad_program
Channel: @kiau_program2 105
🦭 آشنایی با عملگر والروس := در پایتون
عملگر والروس از پایتون 3.8 اضافه شد و به شما این امکان را میدهد که همزمان مقدار یک متغیر را تعیین کرده و از آن استفاده کنید. این ویژگی باعث کوتاهتر شدن کدها میشود.
🔹 قبل از والروس:
n = int(input("Enter a number: "))
while n > 0:
print(n)
n = int(input("Enter a number: "))
🔹 بعد از والروس:
while (n := int(input("Enter a number: "))) > 0:
print(n)
✅ کد کوتاهتر و خواناتر شده و مقدار n تنها یک بار مقداردهی شده است.
💡 کجا ازش استفاده کنیم؟
🔹 در حلقهها و شرطهایی که نیاز به مقداردهی و بررسی مقدار داریم.
📌 خوانایی کد مهمتر از کوتاه بودن آن است، پس فقط جایی که مفید باشد از آن استفاده کنید!
#Python #برنامهنویسی #کدنویسی
Group: @azad_program
Channel: @kiau_program2 105
👩💻آدا لاولیس (Ada Lovelace) : داستان اولین برنامه نویس جهان، قبل از کامپیوتر
شاید تا الان فکر میکردین که اولین برنامه نویس جهان یک نابغه ریاضیات یا یک پروفسور خیلی کارکشته بوده که با یه جرقه ایده برنامه نویسی به ذهنش اومده🤔
❗️ اما امروز یک داستان جالب براتون داریم.
تصور کنین حدود 200 سال پیش، وقتی نه خبری از کامپیوتر ها بود نه موبایل و تکنولوژی امروزی، یک خانم جوان انگلیسی چیزی رو پیشبینی کرد که دنیای امروز ما رو ساخت!
آدا لاولیس (1852-1815) دختر لرد بایرون شاعر مشهور انگلیسی با وجود زندگی کوتاه 36 ساله اش انقلابی در دنیای محاسبات و تکنولوژی ایجاد کرد.
✨ داستان از جایی شروع میشه که آدا در جوانی با چارلز بَبیج، ریاضیدان برجسته آشنا شد، بَبیج طرح ماشینی به نام “موتور تحلیلی” داشت که میتونست محاسبات پیچیده انجام بده - چیزی شبیه به کامپیوترهای امروزی!
لاولیس به درک عمیقی از پتانسیل ماشین تحلیلی دست پیدا کرد، او متوجه این موضوع شد که این ماشین صرفا یک ابزار محاسباتی نیست، بلکه با استفاده از دستورالعمل های دقیق، کارهای پیچیده تری انجام داد، آدا با نوشتن الگوریتم هایی که ماشین تحلیلی رو قادر به اجرای محاسبات خاص می کرد، درواقع اولین برنامه های کامپیوتری تاریخ رو خلق کرد.
اون پیشبینی کرده بود که این ماشین ها می تونن در آینده کارهای بیشتر از یک محاسبات ساده مثل ساخت موسیقی، تصویر و ... کنن.
💡 نکته جالب اینه که مادر آدا برای اینکه دخترش مثل پدرش شاعر نشه، مجبورش کرد علم ریاضیات رو مطالعه کنه ولی همین ترکیب ریاضیات و خلاقیت، آدا رو به یک نابغه تبدیل کرد.
همچنین به احترام نام اون در سال 1983 زبان برنامه نویسی با نام Ada معرفی شد.
Group: @azad_program
Channel: @kiau_program
2 105
⭕️ تفاوت و اهمیت Soft Skills و Hard Skills
✍🏼 مهارت های نرم یا Soft Skills
مهارت های نرم به قابلیت ها و ویژگی های فردی اشاره داره که به نحوه تعامل و ارتباط شما با افراد دیگه تاثیر میذاره. این مهارت ها معمولا غیر فنی هستن و به طور غریزی در اکثر افراد وجود دارن و منبع مشخصی برای یادگیری اونها وجود نداره اما به مرور میشه تقویتشون کرد.
توانایی هایی مثل:
ارتباطات و فن بیان - همکاری و کار تیمی - حل مسئله - مدیریت زمان - رهبری - انطباق پذیری - انعطاف پذیری - انتقاد پذیری - مذاکره - خلاقیت - اعتماد به نفس - هوش هیجانی - مدیریت استرس و ...
💻 مهارت های سخت یا Hard Skills
مهارت های سخت به توانایی ها و دانش فنی اشاره داره که قابل اندازه گیری و آموزش هستن. این مهارت ها معمولا از طریق دوره های آموزشی مختلف، تجربه، مطالعه و در یک بازه زمانی مشخص به دست میان.
مهارت هایی مثل:
تمامی حوزه های برنامه نویسی - تحلیل داده - مدیریت پروژه - طراحی گرافیک - مهارت های فنی - زبان های خارجی - تحلیل مالی - رانندگی - نواختن ساز و ...
⁉️ مهارت های نرم و مهارت های سخت مکمل همدیگه هستن و برای موفقیت در هر زمینه ای ضروری هستن. مهارت های سخت به شما اجازه میدن تا وظایف فنی و تخصصی خودتون رو به خوبی انجام بدین درحالی که مهارت های نرم به شما کمک میکنن تا در محیط کار به خوبی با بقیه ارتباط برقرار کنید و همکاری کنید، نسبت به شرایط مختلف انعطاف پذیر باشین، توانایی جذب کارفرما و مذاکره در پروژه های مختلف رو داشته باشین و ... .
مطالعه و تحقیق، شرکت در بحث های مختلف، ارتباط با دیگران، حضور در اجتماع، شرکت در دوره ها و کارگاه ها، سمینار ها و ... به تقویت مهارت های نرم کمک زیادی میکنن.
Group: @azad_program
Channel: @kiau_program
2 105
✅ ۱. پروفایل خود را تکمیل کنید (تصویر مناسب، بیوگرافی قوی، مهارتها و تجربهها)
✅ ۲. فعالیت خود را شروع کنید (لایک، کامنت، تعامل)
✅ ۳. محتوای ارزشمند منتشر کنید (داستانها، تجربیات، تحلیلها، نکات آموزشی)
✅ ۴. درخواست ارتباط هدفمند ارسال کنید و شبکه ارتباطی خود را گسترش دهید
✅ ۵. بهصورت مستمر فعالیت کنید و از الگوریتم لینکدین بهره ببرید
با رعایت این نکات، نه تنها دیده میشوید، بلکه میتوانید یک برند شخصی قوی بسازید و فرصتهای شغلی و حرفهای فوقالعادهای برای خود ایجاد کنید.
2 105
### 📌 راهنمای جامع درخشش در لینکدین: از ساخت پروفایل تا تولید محتوای حرفهای
لینکدین یک بستر فوقالعاده برای ساخت برند شخصی، شبکهسازی و پیدا کردن فرصتهای شغلی است. اما برای موفقیت در این پلتفرم، نیاز به یک استراتژی منظم و هدفمند دارید. در این راهنما، نکات کلیدی برای شروع و رشد فعالیت حرفهایتان در لینکدین را بررسی میکنیم.
---
## ✨ ۱. ساخت پروفایل حرفهای
🔹 تصویر پروفایل مناسب: از یک عکس واضح، حرفهای و با پسزمینه ساده استفاده کنید.
🔹 هدر جذاب: یک تصویر پسزمینه مناسب با زمینه کاری خود انتخاب کنید.
🔹 عنوان شغلی (Headline) قوی: در چند کلمه مشخص کنید که چه کسی هستید و چه ارزشی ارائه میدهید.
🔹 بخش درباره من (About): در چند خط توضیح دهید که چه مهارتهایی دارید، چه کارهایی انجام دادهاید و چه اهدافی دنبال میکنید.
🔹 تجربههای کاری (Experience): سابقه کاری خود را به همراه دستاوردهای کلیدی ذکر کنید.
🔹 مهارتها و تأییدیهها (Skills & Endorsements): حداقل ۵ تا ۱۰ مهارت کلیدی اضافه کنید و از همکاران خود بخواهید آنها را تأیید کنند.
✅ نکته مهم: پروفایل شما درواقع رزومه آنلاین شماست. کامل بودن و حرفهای بودن آن باعث جذب فرصتهای بهتر میشود.
---
## 📢 ۲. استراتژی تولید محتوای حرفهای در لینکدین
### 🟢 چه محتوایی تولید کنیم؟
🔹 تجربیات شخصی و درسهایی که گرفتهاید (مثلاً "چطور اولین شغل خود را گرفتم؟")
🔹 نقد و تحلیل روندهای جدید در حوزه کاری خود (مثلاً "آینده هوش مصنوعی در بازارهای مالی")
🔹 آموزش نکات کاربردی و کوتاه (مثلاً "۵ مهارت ضروری برای موفقیت در فریلنسینگ")
🔹 اشتراکگذاری موفقیتها و دستاوردها (اما بدون خودستایی)
🔹 به اشتراک گذاشتن چالشها و مشکلاتی که با آن روبهرو شدهاید و نحوه حل آنها
### 🟡 چگونه پستهای تأثیرگذار بنویسیم؟
✅ ۱. شروع با یک هوک قوی: اولین جمله پست باید به قدری جذاب باشد که مخاطب را درگیر کند.
✅ ۲. ارائه یک داستان یا تجربه شخصی: مردم با داستانها ارتباط بیشتری برقرار میکنند.
✅ ۳. ارائه یک درس یا نکته ارزشمند: محتوای شما باید برای مخاطب مفید باشد.
✅ ۴. دعوت به تعامل (Call to Action): یک سوال بپرسید تا کاربران نظرات خود را به اشتراک بگذارند.
✅ ۵. استفاده از هشتگهای مرتبط: بین ۳ تا ۵ هشتگ مناسب اضافه کنید تا پست شما به افراد بیشتری نمایش داده شود.
### 🔵 محتوای فارسی یا انگلیسی؟
✅ اگر بازار هدف شما ایران است، فارسی بنویسید.
✅ اگر به دنبال فرصتهای بینالمللی هستید، ترکیبی از فارسی و انگلیسی استفاده کنید.
✅ اگر تمرکز شما فقط روی بازار جهانی است، تمام محتوای خود را به انگلیسی منتشر کنید.
✅ نکته مهم: استفاده از زبان انگلیسی باعث میشود محتوای شما در سطح بینالمللی بیشتر دیده شود، اما در نظر بگیرید که مخاطبان ایرانی ممکن است کمتر درگیر شوند.
---
## 🤝 ۳. شبکهسازی و افزایش ارتباطات در لینکدین
🔹 درخواست ارتباط هدفمند بفرستید: روزانه ۱۰ تا ۲۰ درخواست ارتباط برای افراد مرتبط با حوزه کاری خود ارسال کنید.
🔹 پیام کوتاه و شخصیسازی شده بنویسید: هنگام ارسال درخواست، یک متن کوتاه اضافه کنید که دلیل ارتباط را توضیح دهد.
🔹 در بخش کامنتها فعال باشید: با نظرات ارزشمند در پستهای دیگران، توجه بیشتری جلب کنید.
🔹 در گروههای تخصصی لینکدین عضو شوید و در بحثها مشارکت داشته باشید.
🔹 افراد تأثیرگذار در حوزه خود را دنبال کنید و با آنها تعامل داشته باشید.
✅ نکته مهم: شبکهسازی در لینکدین یک فرایند طولانیمدت است، اما اگر بهطور مستمر روی آن کار کنید، میتواند فرصتهای بینظیری برای شما ایجاد کند.
---
## 🚀 ۴. نکات طلایی برای موفقیت در لینکدین
🔹 ثبات داشته باشید: هفتهای حداقل ۲ تا ۳ پست منتشر کنید.
🔹 محتوای خشک و رسمی نگذارید: خودتان باشید و با زبان ساده اما حرفهای بنویسید.
🔹 با افراد متخصص تعامل کنید: جواب کامنتها را بدهید و سعی کنید گفتگوهای ارزشمند ایجاد کنید.
🔹 در پستهای خود از ترکیب متن، تصویر و ویدئو استفاده کنید: محتواهای بصری تعامل بیشتری ایجاد میکنند.
🔹 تحلیل کنید که چه نوع محتوایی بهتر جواب میدهد: عملکرد پستهای خود را بررسی کنید و بر اساس آن، استراتژی خود را تنظیم کنید.
🔹 صبور باشید: رشد در لینکدین زمان میبرد، اما اگر مداومت داشته باشید، نتایج فوقالعادهای میگیرید.
---
### 🎯 جمعبندی و برنامه عملی برای شروع در لینکدین
2 105
پرامپت gpt برای تولید محتوا با توجه به ساختار فضای لینکدین که پست ها impression بیشتری بگیرن
2 105
💡 Prompt:
"Imagine you're explaining a powerful insight, breakthrough, or personal experience in your field to a curious but non-expert friend. Keep it engaging, valuable, and relatable."
Now, craft your post using this structure:
1️⃣ HOOK (First 1-2 Lines): Grab attention instantly. Use a thought-provoking question, bold statement, or shocking statistic.
Example: "Most people think AI will replace traders. But what if I told you the best traders will be those who master AI?"
2️⃣ STORY / INSIGHT: Share a personal experience, a mistake you learned from, or a fresh perspective on a trending topic. Make it digestible, not technical.
Example: "When I first started trading, I ignored price action and relied only on indicators. My strategy failed. Then I discovered a hybrid approach that changed everything…"
3️⃣ VALUE / LESSON: Offer a takeaway that readers can apply to their own work.
Example: "The key is understanding how AI models work without blindly trusting them. Here’s how I blend AI-driven signals with human intuition…"
4️⃣ CALL TO ACTION (CTA): Encourage engagement—ask a question or invite opinions.
Example: "How do you think AI will impact trading strategies in the next five years? Let’s discuss!"
✨ BONUS TIPS:
✅ Use short, punchy sentences to keep it readable.
✅ Add whitespace (no big text blocks).
✅ Use emojis strategically (sparingly).
✅ Experiment with storytelling, controversial opinions, or behind-the-scenes insights.
✅ Engage with every comment to boost visibility.
2 105
مسئله ی n +1
یکی از مشکلاتی که همیشه در هر زبان و فریمورکی ما باید حواسمون بهش باشه سرعتی هست که داریم توی api ها و مسئله ی n +1 که خارج از بحث جنگو هم هست و یکم با مثال میخوام توضیحش بدم(اینم اضافه میکنم همیشه بهترین راه وجود داره و این قطعا نمیتونه بهترین راه باشه)
جالبه بدونید یکی از مشکلات شرکت یکتانت هم بوده این قضیه
این مسئله توی خیلی از زبان هایی که با orm هاشون کار میکنیم گریبان گیر ما میشن مثل
Django, Node Js, Golang, C# , ...
فرض کنید مدل یا تیبل های ما به این صورت هست
class Post(models.Model):
title = models.CharField(max_length=255)
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
content = models.TextField()
الان هم وقتشه تمام پست هامون رو با کامنت هاشون بگیریم
posts = Post.objects.all()
for post in posts:
comments = post.comments.all()
این کد ما یک کوئری برای گرفتن تمام پست ها و یک کوئری برای کامنت های اون میزنه
تصور کنید 100پست داریم و با این کار 101 کوئری میزنیم
حالا راه حل یا همون best practice ما اینجا به این شکله
1) select_related
برای روابط ForeignKey یا OneToOne استفاده میشه و یک JOIN در همان کوئری اصلی اجرا میکنه که کلا 1 کوئری میزنه
#orm
posts = Post.objects.select_related('author').all()
#query
SELECT post.id, post.title, author.id, author.name
FROM post
LEFT JOIN author ON post.author_id = author.id;
2) prefetch_related
برای روابط ManyToOne، ManyToMany، یا هر رابطهای که نیاز به کوئری جداگانه داره استفاده میشه. این روش به جای استفاده از JOIN، اول کوئری اصلی را اجرا میکنه و بعد از اون یک کوئری جداگانه برای دادههای مرتبط میزنه و در کل 2 کوئری میزنه به دیتابیس ما
#orm
posts = Post.objects.prefetch_related('comments').all()
#query
SELECT * FROM post;
SELECT * FROM comment WHERE post_id IN (1, 2, 3, ...);
Group: @azad_program
Channel: @kiau_program2 105
دقیق ترین رودمپ برای شخصی که میخواد DevOps کار کنه🧑🏻💻
Group: @azad_program
Channel: @kiau_program
2 105
🎉 به مناسبت سالروز گروه Azad's Programmer، سرور دیسکورد ما راهاندازی شد! 🎉
برای تعامل بیشتر و بهرهگیری از امکانات جدید، به ما در سرور دیسکورد بپیوندید:
https://discord.gg/y8xd5dYC
منتظرتون هستیم! 🚀
2 105
🌐 نحوه کارکرد Api به روایت تصویر :)
https://t.me/kiau_program/149
Group: @azad_program
Channel: @kiau_program
2 105
🌐 مفهوم REST Api و RESTful API!
امروز میخوایم درمورد یک ساختار و معماری مهم در API ها به اسم REST و REST Api صحبت کنیم.
⁉️ اما API اصلا چیه؟
ببینید، API مثل یه جور پل ارتباطی میمونه بین دو برنامه یا Server و Client، به زبان ساده تر، API یسری قوانین و دستورالعمله که به برنامه ها میگه چطوری باهم حرف بزنن و اطلاعات رد و بدل کنن.
فرض کنین شما یه اپلیکیشن هواشناسی دارید. این اپلیکیشن برای اینکه اطلاعات هوا رو نشون بده باید با یه سرویس هواشناسی ارتباط برقرار کنه. این ارتباط از طریق API انجام میشه.
⭕️ اول از همه REST Api چیه؟
یه REST API در واقع یه راه ارتباطی بین دو تا نرمافزاره که از اصول REST پیروی میکنه. به زبان سادهتر، یه سری قوانین و استانداردهایی رو رعایت میکنه تا نرمافزارها بتونن به راحتی با هم حرف بزنن و اطلاعات رد و بدل کنن.
چی کار میکنه؟
به نرمافزارها اجازه میده تا دادهها رو درخواست بدن، ایجاد کنن، ویرایش کنن یا حذف کنن.
چطوری کار میکنه؟
از پروتکل HTTP برای ارتباط استفاده میکنه (همون پروتکلی که مرورگرها برای باز کردن صفحات وب استفاده میکنن).
چه شکلیه؟
معمولاً از فرمتهایی مثل JSON یا XML برای انتقال دادهها استفاده میکنه.
‼️ تفاوت REST Api با RESTful API
یک REST Api از پروتکل HTTP استفاده میکنه و یکسری از عملیات CRUD (ایجاد، خواندن، بروزرسانی، حذف) رو انجام میده اما ممکنه همه اصول REST رو رعایت نکنه.
وقتی که یک REST Api به طور کامل به اصول، قواعد، قوانین و ساختار معماری REST پایبند باشه و تمامی عملیات رو به طول کامل انجام بده به یک RESTful API تبدیل میشه
🔸 مفاهیم کلیدی در REST API:
منابع (Resources): هر چیزی که تو یه برنامه میخوایم بهش دسترسی داشته باشیم یه منبع حساب میشه. مثلاً کاربرها، پست ها، محصولات و …
درخواست ها (Requests): درخواست ها مثل دستوراتی هستن که به API میدیم. مثلاً میگیم “همه کاربرهارو بده” یا “یه کاربر جدید اضافه کن”.
پاسخ ها (Responses): پاسخ ها هم مثل جواب هایی هستن که API به ما میده. مثلاً یه لیست از کاربرها یا یه پیام که میگه “کاربر با موفقیت اضافه شد”.
متدهای HTTP: برای اینکه مشخص کنیم چه کاری می خوایم انجام بدیم، از یه سری متدها استفاده میکنیم،
مثل:
GET: برای گرفتن اطلاعات
POST: برای اضافه کردن اطلاعات
PUT: برای ویرایش اطلاعات
DELETE: برای حذف اطلاعات
🔸 یه مثال ساده از REST API:
فرض کنید یه اپلیکیشن داریم که لیست کتاب ها رو نشون میده.
درخواست GET /books: یعنی “همه کتاب ها رو بده”.
پاسخ: یه لیست از همه کتاب ها برمیگرده.
درخواست POST /books: یعنی “یه کتاب جدید اضافه کن”.
پاسخ: یه پیام میاد که میگه “کتاب با موفقیت اضافه شد”.
Group: @azad_program
Channel: @kiau_program
2 105
🌐 اولین وبسایت دنیا: داستان شروع اینترنت!
دنیای اینترنت و صفحات وب که امروزه باهاش در ارتباطیم، 34 سال پیش از یه سایت ساده شروع شد. این سایت توسط تیم برنرز-لی (Tim Berners-Lee)، دانشمند بریتانیایی، در سال 1991 در دسترس عموم قرار گرفت.
در 29 آذر 1369، برنرز-لی در مرکز تحقیقات هستهای اروپا (CERN) متوجه شد دانشمندان برای اشتراک اطلاعات به سیستمی ساده نیاز دارن. اون شبکهای جهانی طراحی کرد که بعدها به World Wide Web (WWW) معروف شد. ابتدا این وبسایت فقط برای کارمندان CERN قابل دسترسی بود اما در مرداد 1370 عمومی شد.
از اونجایی که مفهوم Server تازه بود، تیم یادداشتی با جوهر قرمز روی کامپیوتر NeXT (میزبان پروژه) نوشت: "این دستگاه یک سرور است؛ آن را خاموش نکنید!"
آدرس وبسایت:
http://info.cern.ch
این سایت ساده توضیح میداد وب چیه و چطور میشه ازش استفاده کرد. بدون عکس، صرفاً با HTML، پروتکل HTTP و یک URL ساخته شده بود.
Group: @azad_program
Channel: @kiau_program
2 105
Django Honeypot🍯
یک پکیج امنیتی که یک صفحه ی لاگین جعلی برای پنل ادمین شما ایجاد میکند که شبیه به پنل اصلی شما است ولی در واقع برای فریب کاربر های غیر مجاز است و شما میتوانید متوجه بشوید چه کسانی قصد ورود به پنل شمارا داشته اند
مزایا:
ردیابی حملات: شما میتونین هر کسی که سعی داره بدون اجازه وارد پنل ادمین بشه رو شناسایی کنین
کاهش ریسک حملات: هکرها به اشتباه فکر میکنن وارد صفحه اصلی شدن و شما میتونین از این فرصت استفاده کنین تا حمله رو مدیریت کنین
سادگی استفاده: بدون نیاز به تغییرات پیچیده توی پروژه تون به راحتی میتونید این پکیج رو نصب و استفاده کنین.
چطور از django honeypot استفاده کنیم؟
1) اول از همه باید پکیج رو نصب کنی
pip install django-admin-honeypot
2) بعد از نصب باید django honeypot رو به تنظیمات پروژه اضافه کنی توی فایل settings.py خط زیر رو
اضافه کنید
INSTALLED_APPS = [ #another_apps 'admin_honeypot', ].3) حالا باید به مسیر جعلی برای پنل ادمین بسازید توی فایل 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 / هم مسیر واقعی پنل ادمین شماست که فقط خودتون میدونید.
محدودیتها:
این روش ممکن است برای رباتهای پیشرفته که فیلدهای مخفی را نادیده میگیرند، مؤثر نباشد.
برای امنیت بهتر، میتوان از Honeypot همراه با سایر روشها مانند CAPTCHA یا Rate Limiting استفاده کرد.
جمعبندی:
هانیپات یک روش ساده و کارآمد برای جلوگیری از اسپم فرمها در جنگو است. اگر به دنبال راهکاری سبک و بدون تأثیر منفی بر تجربه کاربری هستید، این روش میتواند انتخاب خوبی باشد.
Group: @azad_program
Channel: @kiau_program2 105
جنگو ORM
2/2
چه متد هایی داریم که میتونیم استفاده کنیم و چه ریسپانسی برمیگردونند .
متد .all()
با استفاده از این متد میتوانیم تمامی ابجکت های یک مدل را برگردانیم و در صورت خالی بودن یک کوئری ست خالی برمیگردد.
>>> User.objects.all()
متد .get()
با استفاده از این متد میتوانیم یک ابجکت را از دیتابیس بگیریم.
>>> user1 = User.objects.get(username="my_name")
>>> print(user1.username, user1.score)
my_name 17
متد .exclude()
برعکس متد filter که جلو تر گفته شده تمامی ابجکت هایی که داخل دیتابیس هستند و از شرطی که تعیین کردیم صدق نمیکنند را بگیریم.
>>> User.objects.exclude(score=10)
تمامی ابجکت هایی که نمرات انها برابر با 10 نیست را برمیگرداند.
متد .order_by()
با این متد میتوانیم ابجکت یک مدل را بر اساس یک ویژگی مرتب کنیم.
>>> User.objects.order_by('score')
در حال حاضر به صورت صعودی مرتب میشوند.
در این تابع میتوانید با گذاشتن یک - قبل از نام فیلد، ترتیب را به صورت نزولی دریافت کنید.
>>> User.objects.order_by('-score')
متد .count()
با این متد میتوانیم تعداد اعضای QuerySet را بشماریم.
>>> User.objects.count()
21
>>> User.objects.filter(age=18).count()
2
متد .filter()
با استفاده از این متد میتوانیم تمامی اشیاء یک مدل را که در شرایط داخل پرانتز صدق میکنند را بگیریم.
User.objects.filter(score=10)
در این متد ما برای ایجاد محدودیت بیشتر میتوانیم با استفاده از این لیست این محدودیت هارو ایجاد کنیم .
در صورت تمایل هم میتونید با سرچ Field Lookups اطلاعات بیشتری بدست بیارید.
برابری exact , iexact
سرچ کردن در متن contains , icontains
کوچکتر lt
کوچکتر یا مساوی lte
بزرگتر gt
بزرگتر یا مساوی gte
بررسی ابتدای رشتهها startswith , istartswith
بررسی انتهای رشتهها endswith , iendswith
عملگر in پایتونی in
#django
Group: @azad_program
Channel: @kiau_program2 105
جنگو ORM
واژهی ORM مختصرشدهی Object Relational Mapping است، Django ORM بخشی از جنگو است که وظیفهی اتصال به پایگاهداده، و دریافت و ارسال اطلاعات به آن را به دوش میکشد.
در واقع بدون وجود ORM در جنگو مجبور هستیم که در نرمافزار یا وباپلیکیشنهای خود کوئریهای دیتابیسی مثل SQL بزنیم و بهنحوی، مستقیماً نرمافزار خود را به پایگاهداده متصل کنیم. این امکان در پایتون وجود دارد که با کتابخانههای مختلف میتوانید به پایگاهدادههای مختلف متصل شوید و با استفاده از آنها اشیاء را در پایگاهداده ذخیره یا بازیابی نمایید.
با وجود جنگو ORM، بدون احتیاج به اتصال مستقیم به پایگاهداده، شما از Syntax همان ORM برای ذخیره و بازیابی اطلاعات استفاده میکنید، بدون احتیاج به اینکه از Syntax و زبان آن پایگاهداده استفاده کنید. در مقابل، در پسزمینه، آن ORM کدهای شما را به کوئریهای دیتابیسی تبدیل میکند که به این کار Map کردن میگویند.
مثال ساده:
یک مدل از کتاب که دارای فیلد های عنوان، نام نویسنده، تاریخ انتشار و قیمت هست
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
published_date = models.DateField()
price = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return self.title
#دیتایی که داریم
data = {
"title": "Hollywood",
"author": "Charles Bukowski",
"published_date": "1989-01-01",
"price": 150.99
}
# بازیابی همه رکورد ها و دریافت عنوان نویسنده
books = Book.objects.all()
for book in books:
print(book.title, book.author)
# یافتن کتابی با عنوان خاص
book = Book.objects.get(title="Hollywood")
print(book.author)
# کتابهایی که قیمتشان کمتر از 160 است
cheap_books = Book.objects.filter(price__lt=160)
for book in cheap_books:
print(book.title, book.price)
به روز رسانی و حذف به صورت تکی
# به روز رسانی کردن قیمت کتاب
book = Book.objects.get(title="Hollywood")
book.price = 159.99
book.save()
# حذف رکورد
book = Book.objects.get(title="Hollywood")
book.delete()
به روز رسانی و حذف به صورت گروهی
Book.objects.filter(price__gt=150).update(price=149.99)
Book.objects.filter(price__lt=100).delete()
Group: @azad_program
Channel: @kiau_program2 105
سلام به همه اعضای گروه 🙌🏻
اینجا توی گروه ما کلی استعداد و علاقه به برنامهنویسی جمع شده و به ذهنم رسید که از این پتانسیل فوقالعاده استفاده کنیم.
میخوام یک تیم برنامهنویسی دانشجویی تشکیل بدم که هدفش انجام پروژههای واقعی باشه. این تیم یک فرصت عالیه برای کسانی که میخوان تجربه کاری کسب کنن، رزومهشون رو قوی کنن و حتی درآمد داشته باشن.
💻 تخصصهایی که بهشون نیاز داریم:
- بکاند: Python (Django, Flask) یا #C . ا net. یا هر زبان دیگهای
- فرانتاند: HTML, CSS, JavaScript (React, Vue.js)
- توسعه دسکتاپ: Python (PyQt, Tkinter) یا #C و یا تکنولوژیهای دیگه
- توسعه موبایل: kotlin Flutter, React Native یا Native Development
- اتوماسیون و اسکریپتنویسی: Python یا Bash
- طراحی: UI/UX
- گرافیست
-طراح لوگو
🔹 چرا این تیم؟
1. روی پروژههای تمرینی و واقعی کار میکنیم (مثلاً طراحی سایت برای خودمون).
2. درآمد حاصل از پروژهها به صورت درصدی بین اعضای تیم تقسیم میشه.
3. همه کارها با همکاری و هدفمند پیش میره.
🔸 شرایط عضویت:
- دانشجو یا علاقهمند به برنامهنویسی
- مسئولیتپذیر و علاقهمند به یادگیری
- حداقل آشنایی با یکی از حوزههای بالا
🔔 اگه علاقه داری عضو این تیم باشی، پیوی پیام بده
بیاید با هم یه تیم قوی و حرفهای بسازیم. منتظرتونم! 🌟
@i_kent8
