Python3
200 subscribers
100 photos
6 videos
26 files
518 links
🎓 آموزش و پروژه‌های Python
آموزش‌های کاربردی و پروژه‌های عملی Python برای همه سطوح. 🚀
Download Telegram
پارت ۴: ارسال پیام‌های چندرسانه‌ای و تعاملی

۱. ارسال عکس، ویدئو، فایل و غیره

برای ارسال انواع مختلف رسانه‌ها (عکس، ویدئو، فایل) می‌توانیم از متدهای موجود در telegram.Bot استفاده کنیم. به عنوان مثال، برای ارسال یک عکس:

def send_photo(update: Update, context: CallbackContext) -> None:
chat_id = update.message.chat_id
context.bot.send_photo(chat_id=chat_id, photo=open('path/to/photo.jpg', 'rb'))

برای ارسال یک ویدئو:

def send_video(update: Update, context: CallbackContext) -> None:
chat_id = update.message.chat_id
context.bot.send_video(chat_id=chat_id, video=open('path/to/video.mp4', 'rb'))

۲. استفاده از کیبورد‌های تعاملی (Inline Keyboard)

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

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

def start(update: Update, context: CallbackContext) -> None:
keyboard = [
[InlineKeyboardButton("گزینه ۱", callback_data='1')],
[InlineKeyboardButton("گزینه ۲", callback_data='2')],
]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('یک گزینه را انتخاب کنید:', reply_markup=reply_markup)

۳. مدیریت پاسخ‌های کاربران به دکمه‌های تعاملی

برای مدیریت پاسخ‌های کاربران به دکمه‌های تعاملی، باید یک هندلر برای CallbackQuery اضافه کنیم:

def button(update: Update, context: CallbackContext) -> None:
query = update.callback_query
query.answer()
query.edit_message_text(text=f"شما گزینه {query.data} را انتخاب کردید")

dispatcher.add_handler(CallbackQueryHandler(button))

راه‌اندازی و اجرای ربات

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

import sqlite3
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext, CallbackQueryHandler

TOKEN = 'YOUR_BOT_TOKEN'

conn = sqlite3.connect('bot_database.db')
cursor = conn.cursor()

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY,
username TEXT,
first_name TEXT,
last_name TEXT
)
''')
conn.commit()

def start(update: Update, context: CallbackContext) -> None:
user = update.message.from_user
cursor.execute('''
INSERT OR IGNORE INTO users (user_id, username, first_name, last_name)
VALUES (?, ?, ?, ?)
''', (user.id, user.username, user.first_name, user.last_name))
conn.commit()
keyboard = [
[InlineKeyboardButton("گزینه ۱", callback_data='1')],
[InlineKeyboardButton("گزینه ۲", callback_data='2')],
]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('سلام! به ربات من خوش آمدید. یک گزینه را انتخاب کنید:', reply_markup=reply_markup)

def help_command(update: Update, context: CallbackContext) -> None:
update.message.reply_text('چطور می‌توانم به شما کمک کنم؟')

def echo(update: Update, context: CallbackContext) -> None:
update.message.reply_text(update.message.text)

def send_photo(update: Update, context: CallbackContext) -> None:
chat_id = update.message.chat_id
context.bot.send_photo(chat_id=chat_id, photo=open('path/to/photo.jpg', 'rb'))

def send_video(update: Update, context: CallbackContext) -> None:
chat_id = update.message.chat_id
context.bot.send_video(chat_id=chat_id, video=open('path/to/video.mp4', 'rb'))

def button(update: Update, context: CallbackContext) -> None:
query = update.callback_query
query.answer()
query.edit_message_text(text=f"شما گزینه {query.data} را انتخاب کردید")

def main():
updater = Updater(TOKEN)

dispatcher = updater.dispatcher

dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("help", help_command))
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))
dispatcher.add_handler(CallbackQueryHandler(button))
👍2
☝️☝️ادامه کد بالا☝️☝️
updater.start_polling()
updater.idle()

if name == 'main':
main()

این کد به ربات اجازه می‌دهد تا عکس، ویدئو ارسال کند و پیام‌هایی با دکمه‌های تعاملی ایجاد کند که کاربران می‌توانند آن‌ها را انتخاب کنند. 🎉

امیدوارم از این آموزش لذت برده باشید! برای دیدن آموزش‌های بیشتر، کانال ما را دنبال کنید.
[کانال تلگرام]

#پایتون #آموزش_پایتون #ربات_تلگرام #برنامه_نویسی #python #telegram_bot
👍1
پارت ۵: ویژگی‌های پیشرفته و امنیت ربات

۱. مدیریت خطاها (Error Handling)

برای اطمینان از اینکه ربات به درستی با خطاها برخورد می‌کند و از کار نمی‌افتد، باید مدیریت خطاها را به کد اضافه کنیم:

def error(update: Update, context: CallbackContext) -> None:
print(f"خطا: {context.error}")
update.message.reply_text('یک خطا رخ داده است. لطفاً دوباره تلاش کنید.')

dispatcher.add_error_handler(error)

۲. افزودن دستور جدید برای دریافت اطلاعات از پایگاه داده

برای نمایش اطلاعات ذخیره‌شده در پایگاه داده به کاربران، می‌توانیم یک دستور جدید به ربات اضافه کنیم. به عنوان مثال، دستور /users که لیست کاربران را نمایش می‌دهد:

def list_users(update: Update, context: CallbackContext) -> None:
cursor.execute('SELECT * FROM users')
users = cursor.fetchall()
response = '\n'.join([f"ID: {user[0]}, Username: {user[1]}, Name: {user[2]} {user[3]}" for user in users])
update.message.reply_text(response or 'هیچ کاربری یافت نشد.')

dispatcher.add_handler(CommandHandler("users", list_users))

۳. ارسال پیام‌های خودکار (Scheduled Messages)

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

import threading
import time

def send_scheduled_message(context: CallbackContext) -> None:
chat_id = context.job.context
context.bot.send_message(chat_id=chat_id, text='این یک پیام زمان‌بندی‌شده است!')

def schedule_message(update: Update, context: CallbackContext) -> None:
chat_id = update.message.chat_id
context.job_queue.run_once(send_scheduled_message, 10, context=chat_id)
update.message.reply_text('پیام زمان‌بندی‌شده در 10 ثانیه دیگر ارسال خواهد شد.')

dispatcher.add_handler(CommandHandler("schedule", schedule_message))

۴. افزایش امنیت ربات

برای افزایش امنیت ربات، می‌توان موارد زیر را رعایت کرد:

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


    def restricted(func):
def wrapped(update: Update, context: CallbackContext, *args, **kwargs):
user_id = update.effective_user.id
if user_id not in [YOUR_USER_ID]:
update.message.reply_text('شما اجازه دسترسی به این دستور را ندارید.')
return
return func(update, context, *args, **kwargs)
return wrapped

@restricted
def secret_command(update: Update, context: CallbackContext) -> None:
update.message.reply_text('این یک دستور محرمانه است.')

dispatcher.add_handler(CommandHandler("secret", secret_command))

- عدم ذخیره توکن ربات در کد: توکن ربات را به جای ذخیره در کد، در یک فایل محیطی یا پایگاه داده ذخیره کنید و از آنجا بارگذاری کنید.

۵. مدیریت مکالمات (Conversation Handlers)

برای ایجاد مکالمات پیچیده، می‌توان از ConversationHandler استفاده کرد. به عنوان مثال، برای ایجاد یک مکالمه ساده که از کاربر سوال می‌پرسد و پاسخ را ذخیره می‌کند:

from telegram.ext import ConversationHandler

NAME, AGE = range(2)

def start_conversation(update: Update, context: CallbackContext) -> int:
update.message.reply_text('نام خود را وارد کنید:')
return NAME

def get_name(update: Update, context: CallbackContext) -> int:
context.user_data['name'] = update.message.text
update.message.reply_text('سن خود را وارد کنید:')
return AGE

def get_age(update: Update, context: CallbackContext) -> int:
context.user_data['age'] = update.message.text
update.message.reply_text(f"نام شما: {context.user_data['name']}\nسن شما: {context.user_data['age']}")
return ConversationHandler.END

def cancel(update: Update, context: CallbackContext) -> int:
update.message.reply_text('مکالمه لغو شد.')
return ConversationHandler.END

conv_handler = ConversationHandler(
entry_points=[CommandHandler('start_convo', start_conversation)],
states={
NAME: [MessageHandler(Filters.text & ~Filters.command, get_name)],
AGE: [MessageHandler(Filters.text & ~Filters.command, get_age)],
},
fallbacks=[CommandHandler('cancel', cancel)],
)
👍1
☝️☝️ادامه کد بالا☝️☝️
dispatcher.add_handler(conv_handler)

راه‌اندازی و اجرای نهایی ربات

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


import sqlite3
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters,
CallbackContext, CallbackQueryHandler, ConversationHandler)

TOKEN = 'YOUR_BOT_TOKEN'

conn = sqlite3.connect('bot_database.db')
cursor = conn.cursor()

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY,
username TEXT,
first_name TEXT,
last_name TEXT
)
''')
conn.commit()

def start(update: Update, context: CallbackContext) -> None:
user = update.message.from_user
cursor.execute('''
INSERT OR IGNORE INTO users (user_id, username, first_name, last_name)
VALUES (?, ?, ?, ?)
''', (user.id, user.username, user.first_name, user.last_name))
conn.commit()
keyboard = [
[InlineKeyboardButton("گزینه ۱", callback_data='1')],
[InlineKeyboardButton("گزینه 2", callback_data='2')],
]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('سلام! به ربات من خوش آمدید. یک گزینه را انتخاب کنید:', reply_markup=reply_markup)

def help_command(update: Update, context: CallbackContext) -> None:
update.message.reply_text('چطور می‌توانم به شما کمک کنم؟')

def echo(update: Update, context: CallbackContext) -> None:
update.message.reply_text(update.message.text)

def send_photo(update: Update, context: CallbackContext) -> None:
chat_id = update.message.chat_id
context.bot.send_photo(chat_id=chat_id, photo=open('path/to/photo.jpg', 'rb'))

def send_video(update: Update, context: CallbackContext) -> None:
chat_id = update.message.chat_id
context.bot.send_video(chat_id=chat_id, video=open('path/to/video.mp4', 'rb'))

def button(update: Update, context: CallbackContext) -> None:
query = update.callback_query
query.answer()
query.edit_message_text(text=f"شما گزینه {query.data} را انتخاب کردید")

def list_users(update: Update, context: CallbackContext) -> None:
cursor.execute('SELECT * FROM users')
users = cursor.fetchall()
response = '\n'.join([f"ID: {user[0]}, Username: {user[1]}, Name: {user[2]} {user[3]}" for user in users])
update.message.reply_text(response or 'هیچ کاربری یافت نشد.')

def error(update: Update, context: CallbackContext) -> None:
print(f"خطا: {context.error}")
update.message.reply_text('یک خطا رخ داده است. لطفاً دوباره تلاش کنید.')

def send_scheduled_message(context: CallbackContext) -> None:
chat_id = context.job.context
context.bot.send_message(chat_id=chat_id, text='این یک پیام زمان‌بندی‌شده است!')

def schedule_message(update: Update, context: CallbackContext) -> None:
chat_id = update.message.chat_id
context.job_queue.run_once(send_scheduled_message, 10, context=chat_id)
update.message.reply_text('پیام زمان‌بندی‌شده در 10 ثانیه دیگر ارسال خواهد شد.')

def restricted(func):
def wrapped(update: Update, context: CallbackContext, *args, **kwargs):
user_id = update.effective_user.id
if user_id not in [YOUR_USER_ID]:
update.message.reply_text('شما اجازه دسترسی به این دستور را ندارید.')
return
return func(update, context, *args, **kwargs)
return wrapped

@restricted
def secret_command(update: Update, context: CallbackContext) -> None:
update.message.reply_text('این یک دستور محرمانه است.')

NAME, AGE = range(2)

def start_conversation(update: Update, context: CallbackContext) -> int:
update.message.reply_text('نام خود را وارد کنید:')
return NAME

def get_name(update: Update, context: CallbackContext) -> int:
context.user_data['name'] = update.message.text
update.message.reply_text('سن خود را وارد کنید:')
return AGE
☝️☝️ادامه کد بالا☝️☝️
def get_age(update: Update, context: CallbackContext) -> int:
context.user_data['age'] = update.message.text
update.message.reply_text(f"نام شما: {context.user_data['name']}\nسن شما: {context.user_data['age']}")
return ConversationHandler.END

def cancel(update: Update, context: CallbackContext) -> int:
update.message.reply_text('مکالمه لغو شد.')
return ConversationHandler

.END

conv_handler = ConversationHandler(
entry_points=[CommandHandler('start_convo', start_conversation)],
states={
NAME: [MessageHandler(Filters.text & ~Filters.command, get_name)],
AGE: [MessageHandler(Filters.text & ~Filters.command, get_age)],
},
fallbacks=[CommandHandler('cancel', cancel)],
)

def main():
updater = Updater(TOKEN)

dispatcher = updater.dispatcher

dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("help", help_command))
dispatcher.add_handler(CommandHandler("users", list_users))
dispatcher.add_handler(CommandHandler("schedule", schedule_message))
dispatcher.add_handler(CommandHandler("secret", secret_command))
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))
dispatcher.add_handler(CallbackQueryHandler(button))
dispatcher.add_handler(conv_handler)
dispatcher.add_error_handler(error)

updater.start_polling()
updater.idle()

if name == 'main':
main()

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

امیدوارم از این آموزش لذت برده باشید! برای دیدن آموزش‌های بیشتر، کانال ما را دنبال کنید.
[کانال تلگرام]

#پایتون #آموزش_پایتون #ربات_تلگرام #برنامه_نویسی #python #telegram_bot
👍2
☝️☝️آموزش ماژول [python-telegram-bot] و ساخت ربات تلگرام☝️☝️
👍2
.
امروز با شش خبر مهم و جدید در دنیای پایتون در خدمت شما هستیم. 📢

1. پایتون 3.11 منتشر شد! 🚀
نسخه جدید پایتون با بهبودهای قابل توجه در عملکرد و ویژگی‌های جدیدی همراه است که برنامه‌نویسی را راحت‌تر و لذت‌بخش‌تر می‌کند.

2. پروژه‌ی بزرگ جنگو 4.0 در راه است! 🌐
نسخه جدید فریم‌ورک محبوب جنگو، امکانات و ابزارهای بیشتری را برای توسعه‌دهندگان وب فراهم خواهد کرد. منتظر ویژگی‌های جذاب باشید!

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

4. پشتیبانی پایتون از کامپایلر M1 اپل 🍏
اکنون پایتون به طور کامل از چیپست M1 اپل پشتیبانی می‌کند که بهبود قابل توجهی در سرعت و عملکرد روی مک‌بوک‌های جدید به همراه دارد.

5. کتاب جدید "پایتون برای داده‌کاوی" منتشر شد 📘
این کتاب با تمرکز بر استفاده از پایتون در داده‌کاوی، راهنمایی کامل برای تحلیلگران داده و دانشجویان ارائه می‌دهد.

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

با این اخبار هیجان‌انگیز همراه باشید و از یادگیری و توسعه با پایتون لذت ببرید! 🐍💻
یک دانستنی جذاب از تاریخچه‌ی کامپیوترها و زبان‌های برنامه‌نویسی 🖥️📜

آشنایی با ENIAC، اولین کامپیوتر دیجیتال الکترونیکی

ENIAC (Electronic Numerical Integrator and Computer) اولین کامپیوتر دیجیتال الکترونیکی تمام‌عیار بود که در دهه ۱۹۴۰ میلادی توسط جی. پرسپکر اکرت و جان موچلی در دانشگاه پنسیلوانیا ساخته شد. این کامپیوتر عظیم که حدود ۳۰ تن وزن داشت، از ۱۸,۰۰۰ لامپ خلأ، ۷۰,۰۰۰ مقاومت و ۱۰,۰۰۰ خازن تشکیل شده بود. این اجزا به ENIAC این امکان را می‌داد که محاسبات پیچیده‌ای را با سرعت بسیار بیشتری نسبت به روش‌های دستی انجام دهد. 🧮🔧

زبان برنامه‌نویسی ENIAC

ENIAC برای برنامه‌نویسی از زبان ماشین استفاده می‌کرد. زبان ماشین، پایین‌ترین سطح زبان‌های برنامه‌نویسی است و از دستورات ساده‌ای تشکیل شده که به‌صورت مستقیم توسط پردازنده کامپیوتر اجرا می‌شوند. این دستورات به شکل اعداد باینری (۰ و ۱) بودند و برنامه‌نویسان باید تمام عملیات را با استفاده از این اعداد کدنویسی می‌کردند. 💻🔢

برنامه‌نویسی با سیم‌ها و کلیدها

در آن زمان، برنامه‌نویسی به معنای اتصال سیم‌ها و تغییر مکان سوئیچ‌ها بود. هر بار که برنامه‌ای تغییر می‌کرد، برنامه‌نویسان باید سیم‌ها را دوباره متصل می‌کردند و کلیدها را در وضعیت مناسب قرار می‌دادند. این فرآیند پیچیده و زمان‌بر بود و می‌توانست ساعت‌ها یا حتی روزها طول بکشد. 🕰️🔌

دستاوردهای ENIAC

ENIAC توانست مسائل ریاضیاتی پیچیده‌ای را حل کند و به دانشمندان در حل مسائل نظامی، مانند محاسبات بالستیکی، کمک کند. این کامپیوتر همچنین راه را برای توسعه کامپیوترهای الکترونیکی مدرن هموار کرد و تحولی بزرگ در دنیای محاسبات ایجاد نمود. 🌍📈

میراث ENIAC

ENIAC تنها یک آغاز بود. از آن زمان تاکنون، زبان‌های برنامه‌نویسی بسیاری توسعه یافته‌اند که کدنویسی را ساده‌تر و مؤثرتر کرده‌اند. زبان‌های سطح بالا مانند پایتون، جاوا و سی‌پلاس‌پلاس امروزه به برنامه‌نویسان این امکان را می‌دهند که بدون نیاز به دست‌وپنجه نرم کردن با زبان ماشین، برنامه‌های پیچیده و قدرتمندی بنویسند. 🚀📝

امیدوارم از این دانستنی تاریخی لذت برده باشید! اگر سوالی داشتید یا نکته‌ای هست که می‌خواهید به اشتراک بگذارید، حتماً در نظرات بنویسید. 😊

#دانستنی #تاریخ_کامپیوتر #ENIAC #زبان_ماشین #برنامه_نویسی #تکنولوژی #یادگیری #تاریخ_فناوری
🌟 آموزش ساخت سند باکس با پایتون

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

🏛️ مراحل پیاده‌سازی

1. **ایجاد محیط ایزوله با virtualenv** 🛠️

ابتدا محیط ایزوله‌ای برای اجرای کدهای خود ایجاد کنید:

# نصب virtualenv برای ایجاد محیط ایزوله
!pip install virtualenv

# ایجاد یک محیط ایزوله جدید به نام 'sandbox_env'
!virtualenv sandbox_env

# فعال‌سازی محیط ایزوله
# برای ویندوز:
# !sandbox_env\Scripts\activate
# برای لینوکس/مک:
!source sandbox_env/bin/activate

*توضیحات:* با استفاده از virtualenv، محیطی جداگانه برای نصب و اجرای بسته‌ها بدون تداخل با محیط اصلی سیستم ایجاد می‌کنید.

2. **اجرای کد در محیط ایزوله با exec** 🧑‍💻

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

# تابعی برای اجرای کد در محیط ایزوله
def run_code_in_sandbox(code):
# ایجاد دیکشنری برای محیط ایزوله
sandbox = {}
try:
exec(code, {}, sandbox)
except Exception as e:
print(f"خطا در اجرای کد: {e}")

# کد نمونه برای اجرا
sample_code = """
def hello_world():
print("Hello, world!")

hello_world()
"""

# اجرای کد نمونه در محیط ایزوله
run_code_in_sandbox(sample_code)

*توضیحات:* تابع run_code_in_sandbox به شما این امکان را می‌دهد که کدهای پایتون را در محیطی ایزوله و جداگانه اجرا کنمحدود کردن دسترسی‌هارسی‌ها** 🔒

برای افزایش امنیت، دسترسی‌ها و منابع مورد استفاده کد را محدود کنید:

import builtins

# محدود کردن دسترسی به توابع و متغیرهای built-in
restricted_builtins = {
'print': builtins.print,
# سایر توابع مورد نیاز
}

def run_code_in_restricted_sandbox(code):
sandbox = {}
try:
exec(code, {'__builtins__': restricted_builtins}, sandbox)
except Exception as e:
print(f"خطا در اجرای کد: {e}")

# اجرای کد در محیط محدود شده
run_code_in_restricted_sandbox(sample_code)

*توضیحات:* با محدود کردن توابع و متغیرهای built-in، می‌توانید دسترسی‌های کد اجرا شده را محدود کرده و امنیت را افزایش دهتست و ارزیابیرزیابی** 🧪

برای اطمینان از عملکرد صحیح سند باکس، تست‌های مختلفی را اجرا کنید:

# کد تستی برای ارزیابی عملکرد سند باکس
test_code = """
# کد تست برای بررسی محدودیت‌ها
def test():
try:
import os # این باید خطا دهد
except ImportError:
print("دسترسی به ماژول 'os' محدود شده است.")
print("کد تست با موفقیت اجرا شد.")
"""

run_code_in_restricted_sandbox(test_code)

*توضیحات:* با اجرای کد تستی، می‌توانید بررسی کنید که دسترسی‌ها به درستی محدود شده‌اند و عملکرد سند باکس صحیح است.

👇👇👇👇👇👇👇👇👇👇👇👇👇

[اینجا کلیک کن تا بیشتر یاد بگیری]

#پایتون #سندباکس #امنیت_برنامه_نویسی #تست_کد #برنامه_نویسی
امروز با شش خبر مهم و جدید در دنیای پایتون در خدمت شما هستیم. 📢

1. پایتون 3.11 منتشر شد! 🚀
نسخه جدید پایتون با بهبودهای قابل توجه در عملکرد و ویژگی‌های جدیدی همراه است که برنامه‌نویسی را راحت‌تر و لذت‌بخش‌تر می‌کند.

2. پروژه‌ی بزرگ جنگو 4.0 در راه است! 🌐
نسخه جدید فریم‌ورک محبوب جنگو، امکانات و ابزارهای بیشتری را برای توسعه‌دهندگان وب فراهم خواهد کرد. منتظر ویژگی‌های جذاب باشید!

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

4. پشتیبانی پایتون از کامپایلر M1 اپل 🍏
اکنون پایتون به طور کامل از چیپست M1 اپل پشتیبانی می‌کند که بهبود قابل توجهی در سرعت و عملکرد روی مک‌بوک‌های جدید به همراه دارد.

5. کتاب جدید "پایتون برای داده‌کاوی" منتشر شد 📘
این کتاب با تمرکز بر استفاده از پایتون در داده‌کاوی، راهنمایی کامل برای تحلیلگران داده و دانشجویان ارائه می‌دهد.

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

با این اخبار هیجان‌انگیز همراه باشید و از یادگیری و توسعه با پایتون لذت ببرید! 🐍💻
👍1
🌟 آموزش ساخت کرم (Worm) با پایتون



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

🏛️ مراحل پیاده‌سازی

1. ایجاد ساختار پروژه 🗂️

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

worm_project/
├── worm.py
├── server.py
└── README.md

2. نوشتن کد کرم 🖥️

در فایل worm.py، کد کرم را بنویسید. این کرم به‌طور خودکار پیام‌هایی به سیستم‌های دیگر ارسال می‌کند.

import socket
import threading
import random
import time

# تابع برای ارسال پیام به یک سیستم
def send_message(ip, port, message):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((ip, port))
s.sendall(message.encode())
print(f"پیام به {ip}:{port} ارسال شد.")
except Exception as e:
print(f"خطا در ارسال پیام به {ip}:{port}: {e}")

# تابع برای شبیه‌سازی پخش کرم
def propagate_worm(target_ips, port):
message = "Hello from the worm!"
for ip in target_ips:
send_message(ip, port, message)
time.sleep(random.uniform(0.5, 1.5)) # تأخیر تصادفی بین ارسال‌ها

if __name__ == "__main__":
# فهرست IPهای هدف (در دنیای واقعی، این‌ها باید IPهای معتبر و موجود در شبکه شما باشند)
target_ips = ["127.0.0.1", "192.168.0.2"]
target_port = 12345

# اجرای تابع پخش کرم
propagate_worm(target_ips, target_port)

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

3. نوشتن سرور برای دریافت پیام 🖧

برای تست کرم، یک سرور ساده برای دریافت پیام‌ها ایجاد کنید. این سرور باید در سیستم‌های هدف اجرا شود.

import socket

def start_server(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('0.0.0.0', port))
s.listen()
print(f"سرور در پورت {port} در حال شنیدن است...")
while True:
conn, addr = s.accept()
with conn:
print(f"اتصال از {addr}")
data = conn.recv(1024)
if data:
print(f"دریافت پیام: {data.decode()}")

if __name__ == "__main__":
start_server(12345) # پورت مورد نظر برای دریافت پیام

توضیحات: این کد سرور را راه‌اندازی می‌کند که به پورت مشخص شده گوش می‌دهد و پیام‌های دریافتی را نمایش می‌دهد.

4. تست و ارزیابی 🧪

برای تست، مراحل زیر را دنبال کنید:

1. اجرا کردن سرور: ابتدا سرور را در سیستم‌های هدف اجرا کنید.
2. اجرای کرم: سپس کرم را اجرا کنید تا پیام‌ها ارسال شود.
3. بررسی پیام‌ها: بررسی کنید که پیام‌ها به درستی دریافت و نمایش داده شوند.

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

<برای بیشتر یاد گرفتن اینجا کلیک کن>

#پایتون #کرم_نرم‌افزاری #امنیت_شبکه #آموزش_پایتون #برنامه_نویسی #امنیت_سایبری
👍1
🚀 آموزش منطق در توابع پایتون

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

تعریف تابع
تابع در پایتون با استفاده از کلمه کلیدی def تعریف می‌شود. ساختار کلی یک تابع به شکل زیر است:
def name_of_function(parameters):
# body of the function
return result

پارامترها و آرگومان‌ها
پارامترها متغیرهایی هستند که در تعریف تابع ذکر می‌شوند و آرگومان‌ها مقادیری هستند که هنگام فراخوانی تابع به آن ارسال می‌شوند. به عنوان مثال:
def greet(name):
print(f"Hello, {name}!")

greet("Alice")

در اینجا، name پارامتر و "Alice" آرگومان است.

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

1. استفاده از ساختارهای شرطی
ساختارهای شرطی مانند if, elif و else به ما اجازه می‌دهند تا بر اساس شرایط خاص تصمیم‌گیری کنیم. به عنوان مثال:
def check_number(num):
if num > 0:
return "Positive"
elif num < 0:
return "Negative"
else:
return "Zero"

2. استفاده از حلقه‌ها
حلقه‌ها به ما امکان تکرار انجام یک سری عملیات را می‌دهند. به عنوان مثال:
def print_numbers(n):
for i in range(1, n+1):
print(i)

بازگشت مقادیر
تابع می‌تواند مقداری را بازگرداند که با استفاده از کلمه کلیدی return مشخص می‌شود. به عنوان مثال:
def add(a, b):
return a + b

result = add(3, 5)
print(result) # Output: 8

توابع بازگشتی
توابع بازگشتی توابعی هستند که خود را فراخوانی می‌کنند. این توابع برای حل مسائل تکراری مانند فاکتوریل یا فیبوناچی مفید هستند. به عنوان مثال:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)

print(factorial(5)) # Output: 120

توابع لامبدا
توابع لامبدا توابع ناشناس هستند که با استفاده از کلمه کلیدی lambda تعریف می‌شوند. این توابع برای عملیات‌های کوتاه و ساده مفید هستند. به عنوان مثال:
square = lambda x: x * x
print(square(4)) # Output: 16

🚩(بزن اینجا تا بیشتر یاد بگیری)🚩

#پایتون #آموزش #برنامه‌نویسی #توابع #کدنویسی
🚀 آموزش تعامل و ارتباط بین توابع در پایتون

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

تعریف توابع مستقل
ابتدا توابع ساده و مستقل را تعریف می‌کنیم. این توابع هر کدام یک وظیفه خاص را انجام می‌دهند. به عنوان مثال:

def add(a, b):
return a + b

def subtract(a, b):
return a - b

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

def calculate(a, b):
sum_result = add(a, b)
subtract_result = subtract(a, b)
return sum_result, subtract_result

result = calculate(10, 5)
print(result) # Output: (15, 5)

ارسال توابع به عنوان آرگومان
در پایتون، توابع می‌توانند به عنوان آرگومان به دیگر توابع ارسال شوند. این ویژگی به ما امکان می‌دهد که رفتار توابع را تغییر دهیم. به عنوان مثال:

def apply_operation(a, b, operation):
return operation(a, b)

result_add = apply_operation(10, 5, add)
result_subtract = apply_operation(10, 5, subtract)
print(result_add) # Output: 15
print(result_subtract) # Output: 5

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

def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)

print(factorial(5)) # Output: 120

توابع داخلی (Nested Functions)
توابع داخلی یا توابع تو در تو، توابعی هستند که داخل توابع دیگر تعریف می‌شوند. این توابع تنها در داخل تابع خارجی قابل دسترسی هستند. به عنوان مثال:

def outer_function(text):
def inner_function():
print(text)
inner_function()

outer_function("Hello from nested function!") # Output: Hello from nested function!

🚩(بزن اینجا تا بیشتر یاد بگیری)🚩

#پایتون #آموزش #برنامه‌نویسی #توابع #تعامل_توابع #کدنویسی
🚀 آموزش استیتمینت‌های تو در تو و اسکوپ‌ها در پایتون


استیتمینت‌های تو در تو (Nested Statements) و مفهوم اسکوپ‌ها (Scopes) در پایتون از اهمیت بالایی برخوردارند و درک صحیح آن‌ها می‌تواند به شما کمک کند تا کدهای خود را بهتر سازماندهی و دیباگ کنید. در این آموزش، به بررسی این مفاهیم و کاربردهای آن‌ها در برنامه‌نویسی پایتون می‌پردازیم.

استیتمینت‌های تو در تو

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

مثال با if تو در تو

age = 25
if age >= 18:
print("You are an adult.")
if age >= 65:
print("You are a senior citizen.")
else:
print("You are not a senior citizen.")
else:
print("You are not an adult.")

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

حلقه‌های تو در تو


for i in range(3):
for j in range(2):
print(f"i: {i}, j: {j}")

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

اسکوپ ها

اسکوپ‌ها محدوده‌هایی هستند که در آن‌ها متغیرها تعریف و دسترسی پیدا می‌کنند. در پایتون، چهار نوع اسکوپ وجود دارد:

1. Local Scope: متغیرهایی که در داخل یک تابع تعریف می‌شوند.
2. Enclosing Scope: متغیرهایی که در تابعی تو در تو تعریف می‌شوند.
3. Global Scope: متغیرهایی که در سطح ماژول (فایل) تعریف می‌شوند.
4. Built-in Scope: متغیرهای پیش‌فرض پایتون که همیشه در دسترس هستنمثال با اسکوپ محلیلی**

def my_function():
local_var = "I am local"
print(local_var)

my_function()
# print(local_var) # این خط خطا می‌دهد چون متغیر local_var در اسکوپ محلی تعریف شده است

مثال با اسکوپ محصور

def outer_function():
outer_var = "I am outer"

def inner_function():
inner_var = "I am inner"
print(outer_var)
print(inner_var)

inner_function()
# print(inner_var) # این خط خطا می‌دهد چون متغیر inner_var در اسکوپ داخلی تعریف شده است

outer_function()

مثال با اسکوپ جهانی

global_var = "I am global"

def my_function():
print(global_var)

my_function()
print(global_var)

تغییر متغیرهای سراسری در داخل تابع

برای تغییر متغیرهای سراسری در داخل یک تابع، باید از کلمه کلیدی global استفاده کنید:

counter = 0

def increase_counter():
global counter
counter += 1

increase_counter()
print(counter) # Output: 1

🚩(بزن اینجا تا بیشتر یاد بگیری)🚩

#پایتون #آموزش #برنامه‌نویسی #توابع #اسکوپ #استیتمینت_تو_در_تو #کدنویسی
🚀 آموزش آرگومان‌ها و کی‌ورد آرگومان‌ها در توابع پایتون


در برنامه‌نویسی با پایتون، توابع می‌توانند مقادیر ورودی (آرگومان) دریافت کنند که به آن‌ها کمک می‌کنند تا عملیات‌های خاصی را انجام دهند. این آرگومان‌ها می‌توانند به صورت موقعیتی (Positional Arguments) یا کی‌وردی (Keyword Arguments) ارسال شوند. در این آموزش، به بررسی هر دو نوع آرگومان و نحوه استفاده از آن‌ها می‌پردازیم.

آرگومان‌های موقعیتی (Positional Arguments)

آرگومان‌های موقعیتی بر اساس موقعیت خود در فراخوانی تابع، مقادیر خود را به پارامترهای مربوطه منتقل می‌کنند. به عنوان مثال:

def greet(name, age):
print(f"Hello, {name}. You are {age} years old.")

greet("Alice", 30)

در اینجا، "Alice" و 30 به ترتیب به پارامترهای name و age منتقل می‌شوند.

کی‌ورد آرگومان‌ها (Keyword Arguments)

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

greet(age=30, name="Alice")

در اینجا، حتی اگر ترتیب آرگومان‌ها متفاوت باشد، مقادیر به پارامترهای صحیح منتقل می‌شوند.

آرگومان‌های پیش‌فرض (Default Arguments)

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

def greet(name, age=25):
print(f"Hello, {name}. You are {age} years old.")

greet("Bob")
greet("Alice", 30)

در این مثال، برای Bob مقدار پیش‌فرض 25 استفاده می‌شود، در حالی که برای Alice مقدار 30 که به صورت آرگومان ارسال شده است، استفاده می‌شود.

آرگومان‌های متغیر (Variable-length Arguments)

پایتون اجازه می‌دهد که توابع، تعداد متغیری از آرگومان‌ها را دریافت کنند. این کار با استفاده از *args و **kwargs انجام می‌شود.

args

args به شما امکان می‌دهد که تعداد متغیری از آرگومان‌های موقعیتی را به تابع ارسال کنید:

def print_numbers(*args):
for number in args:
print(number)

print_numbers(1, 2, 3, 4, 5)

kwargs

**kwargs به شما امکان می‌دهد که تعداد متغیری از کی‌ورد آرگومان‌ها را به تابع ارسال کنید:

def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")

print_info(name="Alice", age=30, city="New York")

ترکیب آرگومان‌ها

شما می‌توانید ترکیبی از آرگومان‌های موقعیتی، کی‌ورد آرگومان‌ها و آرگومان‌های متغیر را در یک تابع استفاده کنید. ترتیب تعریف پارامترها مهم است: پارامترهای موقعیتی، سپس *args، سپس پارامترهای کی‌وردی و در نهایت **kwargs:

def combined_example(pos1, pos2, *args, kw1="default1", kw2="default2", **kwargs):
print(f"pos1: {pos1}, pos2: {pos2}")
print("args:", args)
print(f"kw1: {kw1}, kw2: {kw2}")
print("kwargs:", kwargs)

combined_example(1, 2, 3, 4, 5, kw1="value1", extra1="extra_value1", extra2="extra_value2")

🚩(بزن اینجا تا بیشتر یاد بگیری)🚩

#پایتون #آموزش #برنامه‌نویسی #توابع #آرگومان #کی‌ورد_آرگومان #کدنویسی
Python3 pinned Deleted message
آشنایی با معماری میکروسرویس‌ها 🛠️

سلام دوستان! امروز قصد داریم با یکی از معماری‌های برنامه‌نویسی که توسعه نرم‌افزار را متحول کرده است، آشنا شویم. اگر به دنبال بهبود عملکرد و قابلیت مقیاس‌پذیری برنامه‌های خود هستید، این مطلب برای شماست. 🚀

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

درباره معماری میکروسرویس‌ها 🧩
میکروسرویس‌ها یک سبک معماری است که در آن یک برنامه به مجموعه‌ای از سرویس‌های کوچک و مستقل تقسیم می‌شود. این سرویس‌ها می‌توانند به طور جداگانه توسعه، استقرار و مدیریت شوند. هر سرویس یک بخش خاص از قابلیت‌های کلی برنامه را پیاده‌سازی می‌کند و از طریق پروتکل‌های سبک و استاندارد مانند HTTP/REST یا پیام‌رسان‌ها با دیگر سرویس‌ها ارتباط برقرار می‌کند. 🗂️

ویژگی‌های کلیدی میکروسرویس‌ها:
1. استقلال سرویس‌ها 🛠️: هر سرویس می‌تواند به طور مستقل توسعه و به‌روزرسانی شود، بدون تأثیر بر سایر سرویس‌ها.
2. توسعه مستقل 💻: تیم‌های مختلف می‌توانند به صورت مستقل بر روی سرویس‌های جداگانه کار کنند و از زبان‌ها و ابزارهای مختلف استفاده کنند.
3. استقرار مستقل 🚀: هر سرویس می‌تواند به طور جداگانه استقرار یابد و نیاز به هماهنگی با سایر سرویس‌ها ندارد.
4. مقیاس‌پذیری افقی 📈: سرویس‌ها می‌توانند بر اساس نیاز به طور مستقل مقیاس‌پذیر شوند تا بار کاری بیشتری را تحمل کنند.
5. تحمل خطا ⚠️: خطا در یک سرویس باعث اختلال در کل سیستم نمی‌شود، بلکه تنها بر سرویس مورد نظر تأثیر می‌گذارد.

موارد استفاده از میکروسرویس‌ها 📈
1. قابلیت مقیاس‌پذیری 🔄: هر سرویس می‌تواند به طور مستقل مقیاس‌پذیر شود تا بار کاری بیشتری را تحمل کند.
2. توسعه و استقرار مستقل 🚀: تیم‌های مختلف می‌توانند بر روی سرویس‌های جداگانه کار کنند و آن‌ها را به طور مستقل استقرار دهند.
3. بهبود قابلیت نگهداری 🔧: با جدا کردن وظایف به سرویس‌های کوچک‌تر، یافتن و رفع اشکال‌ها آسان‌تر می‌شود.
4. استفاده بهینه از منابع 💡: سرویس‌ها می‌توانند بر اساس نیازهای خاص خود از منابع مختلف استفاده کنند.
5. انعطاف‌پذیری بیشتر 🤹‍♂️: با امکان استفاده از فناوری‌ها و زبان‌های برنامه‌نویسی مختلف برای هر سرویس، تیم‌ها می‌توانند از بهترین ابزارها برای هر بخش از پروژه استفاده کنند.

(🚩برای بیشتر یاد گرفتن اینجا کلیک کن🚩)

#میکروسرویس #توسعه_نرم_افزار #برنامه_نویسی #مهندسی_نرم_افزار #قابلیت_مقیاس‌پذیری #استقرار_مستقل #نگهداری_نرم_افزار #منابع_بهینه
آموزش استفاده از معماری میکروسرویس‌ها در پایتون 🛠️

سلام دوستان! امروز قصد داریم نحوه پیاده‌سازی معماری میکروسرویس‌ها در پایتون را به شما آموزش دهیم. اگر به دنبال بهبود عملکرد و مقیاس‌پذیری برنامه‌های خود هستید، این آموزش برای شماست. 🚀

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

قدم اول: نصب نیازمندی‌ها 🛠️
ابتدا باید فریم‌ورک Flask را نصب کنیم. این فریم‌ورک به ما کمک می‌کند تا به سادگی سرویس‌های خود را ایجاد کنیم.
pip install flask

قدم دوم: ایجاد سرویس اول 🌐
بیایید یک سرویس ساده برای مدیریت کاربران ایجاد کنیم. این سرویس شامل دو endpoint است: یکی برای دریافت لیست کاربران و دیگری برای اضافه کردن کاربر جدید.

# user_service.py
from flask import Flask, jsonify, request

app = Flask(__name__)

# لیست کاربران در حافظه موقت
users = []

@app.route('/users', methods=['GET'])
def get_users():
"""دریافت لیست تمامی کاربران"""
return jsonify(users)

@app.route('/users', methods=['POST'])
def add_user():
"""اضافه کردن کاربر جدید به لیست"""
user = request.get_json()
users.append(user)
return jsonify(user), 201

if __name__ == '__main__':
# اجرای سرویس در پورت 5001
app.run(port=5001)

توضیحات کد:
- get_users endpoint برای دریافت لیست تمامی کاربران استفاده می‌شود. این endpoint لیست کاربران را به صورت JSON برمی‌گرداند.
- add_user endpoint برای اضافه کردن کاربر جدید به لیست استفاده می‌شود. کاربر جدید از داده‌های ارسال شده به صورت JSON دریافت و به لیست کاربران اضافه می‌شود.

قدم سوم: ایجاد سرویس دوم 🌐
حالا یک سرویس دیگر برای مدیریت محصولات ایجاد می‌کنیم. این سرویس شامل دو endpoint است: یکی برای دریافت لیست محصولات و دیگری برای اضافه کردن محصول جدید.

# product_service.py
from flask import Flask, jsonify, request

app = Flask(__name__)

# لیست محصولات در حافظه موقت
products = []

@app.route('/products', methods=['GET'])
def get_products():
"""دریافت لیست تمامی محصولات"""
return jsonify(products)

@app.route('/products', methods=['POST'])
def add_product():
"""اضافه کردن محصول جدید به لیست"""
product = request.get_json()
products.append(product)
return jsonify(product), 201

if __name__ == '__main__':
# اجرای سرویس در پورت 5002
app.run(port=5002)

توضیحات کد:
- get_products endpoint برای دریافت لیست تمامی محصولات استفاده می‌شود. این endpoint لیست محصولات را به صورت JSON برمی‌گرداند.
- add_product endpoint برای اضافه کردن محصول جدید به لیست استفاده می‌شود. محصول جدید از داده‌های ارسال شده به صورت JSON دریافت و به لیست محصولات اضافه می‌شود.

قدم چهارم: اجرای سرویس‌ها 🚀
برای اجرای سرویس‌ها، هر کدام را در یک ترمینال جداگانه اجرا کنید:
python user_service.py
python product_service.py

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

# example_call.py
import requests

# اضافه کردن کاربر جدید
user = {"name": "John Doe", "email": "[email protected]"}
response = requests.post('https://localhost:5001/users', json=user)
print("Added User:", response.json())

# اضافه کردن محصول جدید
product = {"name": "Laptop", "price": 1200}
response = requests.post('https://localhost:5002/products', json=product)
print("Added Product:", response.json())

توضیحات کد:
- ابتدا یک درخواست POST به endpoint /users برای اضافه کردن کاربر جدید ارسال می‌شود. سپس نتیجه درخواست چاپ می‌شود.
- سپس یک درخواست POST به endpoint /products برای اضافه کردن محصول جدید ارسال می‌شود. نتیجه درخواست نیز چاپ می‌شود.


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