طراحی سایت با پایتون - مقدمات کلی یادگیری
چرا پایتون برای توسعه وب؟
پیش از شروع به کار عملی، مهم است که بدانیم چرا پایتون تا این حد در حوزه توسعه وب محبوب شده است:
-
خوانایی و سادگی: ساختار گرامری پایتون بسیار شبیه به زبان انگلیسی است که یادگیری و استفاده از آن را آسان میکند. این امر به ویژه برای تازهکاران بسیار مفید است.
-
جامعه کاربری بزرگ و فعال: پایتون دارای یک جامعه کاربری بسیار بزرگ و پشتیبان است که به معنای وجود منابع آموزشی فراوان، انجمنهای آنلاین فعال و حل سریع مشکلات است.
-
کتابخانهها و فریمورکهای غنی: پایتون دارای مجموعهای وسیع از کتابخانهها و فریمورکها برای کارهای مختلف از جمله توسعه وب، تحلیل داده، هوش مصنوعی و یادگیری ماشین است.
-
چندمنظوره بودن: پایتون تنها به توسعه وب محدود نمیشود و میتوان از آن برای توسعه نرمافزارهای دسکتاپ، اسکریپتنویسی سیستمی و بسیاری کارهای دیگر نیز استفاده کرد.
-
مقیاسپذیری: فریمورکهای پایتون مانند جنگو و فلسک قابلیت مقیاسپذیری بالایی دارند که به توسعهدهندگان اجازه میدهد تا وبسایتهایی بسازند که قادر به مدیریت حجم بالایی از ترافیک و کاربران باشند.
معماری کلی یک وبسایت
یک وبسایت از دو بخش اصلی تشکیل شده است:
-
بکاند (Backend): این بخش قلب تپنده وبسایت است که شامل منطق سرور، پایگاه داده و APIها میشود. بکاند وظیفه پردازش درخواستهای کاربر، ذخیرهسازی و بازیابی دادهها و ارائه پاسخ مناسب را بر عهده دارد. پایتون به طور عمده در این بخش مورد استفاده قرار میگیرد.
-
فرانتاند (Frontend): این بخش رابط کاربری وبسایت است که کاربر با آن تعامل دارد. HTML برای ساختار، CSS برای استایلدهی و جاوااسکریپت برای افزودن تعاملپذیری و پویایی به کار میروند.
در این مقاله، تمرکز اصلی ما بر روی بخش بکاند با پایتون خواهد بود، اما به طور مختصر به نحوه ارتباط با فرانتاند نیز اشاره خواهیم کرد.
انتخاب فریمورک مناسب: جنگو یا فلسک؟
هنگام توسعه وب با پایتون، دو فریمورک اصلی برای انتخاب وجود دارد که هر یک ویژگیها و مزایای خاص خود را دارند:
-
جنگو (Django):
-
"باتریها همراه" (Batteries Included): جنگو یک فریمورک Full-Stack است که با ابزارها و قابلیتهای بسیاری مانند ORM (Object-Relational Mapper) برای تعامل با پایگاه داده، سیستم احراز هویت، پنل مدیریت (Admin Panel) و سیستم قالب داخلی همراه است.
-
مناسب برای پروژههای بزرگ و پیچیده: جنگو برای توسعه سریع برنامههای کاربردی وب پیچیده و مقیاسپذیر بسیار مناسب است.
-
کد کمتر، کار بیشتر (Don't Repeat Yourself - DRY): جنگو از اصل DRY پیروی میکند و به شما کمک میکند تا کد تکراری کمتری بنویسید.
-
-
فلسک (Flask):
-
میکروفریمورک (Microframework): فلسک یک فریمورک سبک و انعطافپذیر است که تنها ابزارهای ضروری را فراهم میکند. این به شما آزادی بیشتری برای انتخاب کتابخانهها و ابزارهای مورد نیازتان میدهد.
-
مناسب برای پروژههای کوچک و متوسط: فلسک برای ساخت APIها، وبسایتهای کوچک و پروژههایی که نیاز به انعطافپذیری بالا دارند، ایدهآل است.
-
یادگیری آسانتر: به دلیل سادگی و حجم کمتر کد، یادگیری فلسک معمولاً برای تازهکاران آسانتر است.
-
تصمیمگیری: اگر به دنبال ساخت یک برنامه کاربردی وب پیچیده با پنل مدیریت، احراز هویت و تعاملات گسترده با پایگاه داده هستید، جنگو گزینه بهتری است. اما اگر قصد دارید یک API RESTful بسازید، وبسایت کوچکی راهاندازی کنید یا کنترل کاملی بر روی انتخاب هر جزء داشته باشید، فلسک انتخاب مناسبتری خواهد بود.
در ادامه، هر دو فریمورک را به طور عملی مورد بررسی قرار میدهیم.
بخش اول: ساخت یک وبسایت ساده با فلسک
فلسک به دلیل سادگی، نقطه شروع خوبی برای یادگیری توسعه وب با پایتون است.
1. نصب فلسک
ابتدا باید فلسک را نصب کنید. توصیه میشود از یک محیط مجازی (virtual environment) استفاده کنید تا وابستگیهای پروژه شما جدا از سایر پروژهها نگهداری شوند.
python -m venv venv
source venv/bin/activate # در لینوکس/مک
# venv\Scripts\activate # در ویندوز
pip install Flask
2. ایجاد اولین برنامه فلسک
یک فایل با نام app.py ایجاد کنید و کد زیر را در آن قرار دهید:
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
# یک دیکشنری ساده برای ذخیره سازی محصولات (در یک پروژه واقعی از پایگاه داده استفاده می شود)
products = []
@app.route('/')
def index():
return render_template('index.html', products=products)
@app.route('/add_product', methods=['GET', 'POST'])
def add_product():
if request.method == 'POST':
name = request.form['name']
price = request.form['price']
products.append({'name': name, 'price': price})
return redirect(url_for('index'))
return render_template('add_product.html')
@app.route('/product/')
def show_product(name):
# جستجو محصول بر اساس نام (در پروژه واقعی از ID استفاده می شود)
product = next((p for p in products if p['name'] == name), None)
if product:
return render_template('product_detail.html', product=product)
return "محصول مورد نظر یافت نشد!", 404
if __name__ == '__main__':
app.run(debug=True)
3. ایجاد قالبهای HTML (Templates)
فلسک از موتور قالب Jinja2 استفاده میکند. یک پوشه به نام templates در کنار فایل app.py ایجاد کنید و فایلهای HTML زیر را در آن قرار دهید:
templates/index.html:
فروشگاه من
به فروشگاه من خوش آمدید!
افزودن محصول جدید
لیست محصولات:
{% if products %} {% for product in products %}
{{ product.name }}
قیمت: {{ product.price }} تومان
{% endfor %} {% else %}
هنوز محصولی اضافه نشده است.
templates/add_product.html:
افزودن محصول
افزودن محصول جدید
نام محصول:
قیمت:
بازگشت به صفحه اصلی
templates/product_detail.html:
جزئیات محصول
جزئیات محصول: {{ product.name }}
نام: {{ product.name }}
قیمت: {{ product.price }} تومان
بازگشت به صفحه اصلی
4. اجرای برنامه
در ترمینال، مطمئن شوید که در محیط مجازی فعال هستید و دستور زیر را اجرا کنید:
flask run
یا اگر از if __name__ == '__main__': app.run(debug=True) استفاده میکنید:
python app.py
مرورگر خود را باز کنید و به آدرس http://127.0.0.1:5000/ بروید. شما باید وبسایت ساده خود را ببینید.
توضیح کد فلسک:
-
from flask import Flask, render_template, request, redirect, url_for: ما کلاس Flask را برای ایجاد برنامه، render_template برای رندر کردن فایلهای HTML، request برای دسترسی به دادههای درخواستهای HTTP، redirect برای هدایت کاربر به آدرس دیگر و url_for برای ساخت URLها وارد میکنیم.
-
app = Flask(__name__): یک نمونه از برنامه فلسک ایجاد میکند.
-
@app.route('/'): یک دکوراتور است که یک تابع را به یک مسیر URL خاص متصل میکند. وقتی کاربر به ریشه وبسایت (/) درخواست میدهد، تابع index() اجرا میشود.
-
render_template('index.html', products=products): این تابع فایل index.html را رندر کرده و متغیر products را به آن ارسال میکند تا در قالب قابل دسترسی باشد.
-
methods=['GET', 'POST']: در مسیر /add_product، ما مشخص میکنیم که این مسیر هم میتواند درخواستهای GET (برای نمایش فرم) و هم درخواستهای POST (برای ارسال دادههای فرم) را مدیریت کند.
-
request.form['name']: برای دسترسی به دادههای ارسالی از فرم HTML با متد POST استفاده میشود.
-
redirect(url_for('index')): کاربر را پس از افزودن محصول به صفحه اصلی بازمیگرداند.
بخش دوم: شروع به کار با جنگو (مقدمه)
جنگو یک فریمورک قدرتمندتر و پیچیدهتر است که برای پروژههای بزرگ مناسب است. در اینجا یک راهنمای بسیار مختصر برای شروع به کار با جنگو ارائه میشود.
1. نصب جنگو
مانند فلسک، از یک محیط مجازی استفاده کنید:
python -m venv venv
source venv/bin/activate # در لینوکس/مک
# venv\Scripts\activate # در ویندوز
pip install Django
2. ایجاد یک پروژه جنگو
django-admin startproject myproject .
این دستور یک ساختار پوشهای کامل برای پروژه جنگو شما ایجاد میکند. myproject نام پروژه و . به معنای ایجاد پروژه در دایرکتوری فعلی است.
3. ایجاد یک برنامه (App) در جنگو
در جنگو، منطق وبسایت به "برنامهها" (Apps) تقسیم میشود. هر برنامه یک ماژول مستقل است که میتواند وظایف خاصی را انجام دهد (مثلاً یک برنامه برای مدیریت کاربران، یک برنامه برای محصولات و غیره).
python manage.py startapp products
این دستور یک پوشه جدید به نام products با فایلهای لازم برای یک برنامه جنگو ایجاد میکند.
4. ثبت برنامه در پروژه
فایل myproject/settings.py را باز کنید و products را به لیست INSTALLED_APPS اضافه کنید:
# myproject/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'products', # برنامه جدید شما
]
5. تعریف مدل (Model)
مدلها در جنگو نحوه تعامل شما با پایگاه داده را تعریف میکنند. فایل products/models.py را باز کنید و یک مدل ساده برای محصول ایجاد کنید:
# products/models.py
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=200)
price = models.DecimalField(max_digits=10, decimal_places=2)
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
6. ساخت مهاجرتها و اعمال آنها
پس از تعریف مدلها، باید آنها را به پایگاه داده اعمال کنید.
python manage.py makemigrations
python manage.py migrate
makemigrations فایلهای مهاجرت را بر اساس تغییرات در مدلهای شما ایجاد میکند. migrate این تغییرات را به پایگاه داده اعمال میکند.
7. ایجاد View و URL
-
View: یک تابع یا کلاس در products/views.py که منطق مربوط به پاسخ به یک درخواست وب را مدیریت میکند.
# products/views.py from django.shortcuts import render, get_object_or_404, redirect from .models import Product from .forms import ProductForm # این را در مرحله بعد اضافه می کنیم def product_list(request): products = Product.objects.all() return render(request, 'products/product_list.html', {'products': products}) def product_detail(request, pk): product = get_object_or_404(Product, pk=pk) return render(request, 'products/product_detail.html', {'product': product}) def product_create(request): if request.method == 'POST': form = ProductForm(request.POST) if form.is_valid(): form.save() return redirect('product_list') else: form = ProductForm() return render(request, 'products/product_form.html', {'form': form})
-
URL Patterns: فایل
products/urls.py
را ایجاد کنید (اگر وجود ندارد) و مسیرهای URL را برای برنامهتان تعریف کنید:# products/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.product_list, name='product_list'), path('/', views.product_detail, name='product_detail'), path('new/', views.product_create, name='product_create'), ]
-
شامل کردن URLهای برنامه در پروژه اصلی: فایل
myproject/urls.py
را باز کنید و URLهای برنامهproducts
را شامل کنید:# myproject/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('products/', include('products.urls')), # شامل کردن URL های برنامه products ]
8. ایجاد فرمها (Forms)
جنگو یک سیستم فرم قوی دارد. فایل products/forms.py
را ایجاد کنید:
# products/forms.py
from django import forms
from .models import Product
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ['name', 'price', 'description']
9. ایجاد قالبهای HTML (Templates)
در پوشه products
، یک پوشه به نام templates
و سپس یک پوشه دیگر به نام products
در داخل آن ایجاد کنید. قالبهای HTML شما باید در products/templates/products/
قرار گیرند.
products/templates/products/product_list.html
:
لیست محصولات
محصولات ما
{% for product in products %}
{{ product.name }} - {{ product.price }} تومان
{% empty %}
هنوز محصولی اضافه نشده است.
{% endfor %}
products/templates/products/product_detail.html
:
{{ product.name }}
{{ product.name }}
قیمت: {{ product.price }} تومان
توضیحات: {{ product.description }}
products/templates/products/product_form.html
:
افزودن محصول
افزودن محصول جدید
{% csrf_token %} برای جلوگیری از حملات CSRF (Cross-Site Request Forgery) ضروری است.
{{ form.as_p }} به طور خودکار فرم را با برچسبها و فیلدها در تگهای پاراگراف رندر میکند.
10. اجرای سرور توسعه
python manage.py runserver
مرورگر خود را باز کنید و به آدرس http://127.0.0.1:8000/products/
بروید.
11. پنل مدیریت جنگو
یکی از ویژگیهای قدرتمند جنگو، پنل مدیریت خودکار آن است.
-
ایجاد کاربر سوپریوزر:
python manage.py createsuperuser
این دستور یک کاربر ادمین برای شما ایجاد میکند.
-
ثبت مدل در پنل مدیریت:
فایل products/admin.py را باز کنید و مدل Product را ثبت کنید:
# products/admin.py from django.contrib import admin from .models import Product admin.site.register(Product)
حالا میتوانید به http://127.0.0.1:8000/admin/
بروید و با استفاده از نام کاربری و رمز عبور سوپریوزر خود وارد شوید. در اینجا میتوانید به راحتی محصولات را اضافه، ویرایش یا حذف کنید.
مفاهیم کلیدی و گامهای بعدی
-
پایگاه داده (Databases): در مثالهای بالا از پایگاه داده در حافظه (برای فلسک) و SQLite (پیشفرض جنگو) استفاده شد. برای پروژههای واقعی، به پایگاه دادههای قدرتمندتری مانند PostgreSQL یا MySQL نیاز خواهید داشت. فریمورکهای پایتون ORMهای داخلی (جنگو) یا خارجی (مانند SQLAlchemy برای فلسک) را برای تعامل با پایگاه داده فراهم میکنند.
-
استایلدهی (CSS) و جاوااسکریپت (JavaScript): برای ظاهر و تعاملپذیری وبسایت خود، باید از CSS و JavaScript استفاده کنید. این فایلها معمولاً در پوشه
static
در پروژه شما نگهداری میشوند. -
احراز هویت و مجوزها (Authentication & Authorization): برای مدیریت کاربران و کنترل دسترسی، فریمورکها راهکارهای داخلی (جنگو) یا کتابخانههایی (فلسک) را ارائه میدهند.
-
APIها (Application Programming Interfaces): برای ساخت برنامههای کاربردی وب مدرن (SPA - Single Page Applications) یا اپلیکیشنهای موبایل، نیاز به ساخت APIهای RESTful دارید. فریمورکهایی مانند Django REST Framework یا Flask-RESTful برای این منظور بسیار مفید هستند.
-
امنیت (Security): همواره به مسائل امنیتی مانند حملات XSS، CSRF، SQL Injection و مدیریت صحیح رمز عبور توجه کنید. فریمورکهای پایتون بسیاری از این محافظتها را به طور پیشفرض ارائه میدهند.
-
استقرار (Deployment): پس از توسعه وبسایت، باید آن را بر روی یک سرور زنده (مانند Heroku, AWS, DigitalOcean) مستقر کنید تا برای عموم قابل دسترسی باشد. این فرآیند شامل استفاده از سرورهای وب مانند Gunicorn یا uWSGI و وب سرورهایی مانند Nginx یا Apache میشود.
-
تستنویسی (Testing): نوشتن تستهای خودکار برای اطمینان از عملکرد صحیح وبسایت در بلندمدت بسیار مهم است.
چه وبسایت هایی با پایتون پیاده سازی شده اند؟
در اینجا لیستی از مهمترین و شناختهشدهترین وبسایتهایی که از پایتون استفاده میکنند، آورده شده است:
-
اینستاگرام (Instagram): یکی از بزرگترین شبکههای اجتماعی اشتراکگذاری عکس و ویدیو در جهان است. بکاند اینستاگرام به طور گسترده از فریمورک جنگو (Django) که بر پایه پایتون است، استفاده میکند. اینستاگرام بزرگترین استقرار جنگو در جهان را دارد و این نشاندهنده مقیاسپذیری پایتون و جنگو است.
-
گوگل (Google): غول جستجوی اینترنت، پایتون را در بسیاری از سرویسها و سیستمهای حیاتی خود به کار میبرد. پایتون در الگوریتمهای جستجو، یادگیری ماشین (مانند TensorFlow) و بسیاری از خدمات داخلی گوگل نقش مهمی دارد.
-
یوتیوب (YouTube): بزرگترین پلتفرم اشتراکگذاری ویدیو در جهان، که زیرمجموعه گوگل است، به طور گستردهای از پایتون در توسعه بکاند و سیستمهای پردازش ویدیو خود استفاده میکند.
-
نتفلیکس (Netflix): سرویس پیشرو پخش آنلاین فیلم و سریال، پایتون را در بخشهای مختلفی از جمله سیستمهای توصیهگر (Recommendation Engine)، تحلیل داده، اتوماسیون و ابزارهای امنیتی خود به کار میبرد.
-
اسپاتیفای (Spotify): بزرگترین سرویس پخش موسیقی جهان. اسپاتیفای پایتون را در بکاند خود برای مدیریت دادهها، سیستمهای توصیهگر موسیقی و بسیاری از سرویسهای متصل به هم به کار میگیرد. گفته میشود حدود 80% از سرویسهای بکاند اسپاتیفای با پایتون نوشته شدهاند.
-
دراپباکس (Dropbox): یک سرویس میزبانی فایل ابری که از همان ابتدا (سال 2008) به طور گسترده از پایتون در بخشهای کلاینت و سرور خود استفاده کرده است.
-
ردیت (Reddit): پلتفرم خبری اجتماعی و تالارهای گفتگوی آنلاین، که به "صفحه اول اینترنت" معروف است، بخش عمدهای از بکاند خود را با پایتون پیادهسازی کرده است.
-
اوبر (Uber): شرکت خدمات حمل و نقل هوشمند، پایتون را در کنار زبانهای دیگری مانند Node.js، Go و Java در زیرساختهای بکاند خود به کار میگیرد.
-
پینترست (Pinterest): یک وبسایت اشتراکگذاری بصری و شبکهسازی اجتماعی. پینترست نیز از جنگو و پایتون در لایه برنامهنویسی خود برای مدیریت پینها و بوردها استفاده میکند.
-
کورا (Quora): وبسایت پرسش و پاسخ که به کاربران اجازه میدهد سوال بپرسند، پاسخ دهند و ویرایش کنند. پایتون به کورا کمک کرده تا قابلیتهای جدید را با کد کمتر و سرعت بیشتری توسعه دهد.
-
یاهو (Yahoo!): در بخشهایی از سرویسهای خود مانند Yahoo Maps و بخشهای مربوط به مدیریت محتوا و پردازش داده از پایتون استفاده میکند.
-
دیسکاس (Disqus): سرویس میزبانی نظرات که بسیاری از وبسایتها از آن برای بخش نظرات خود استفاده میکنند، بر پایه فریمورک جنگو (پایتون) ساخته شده است.
این لیست نشان میدهد که پایتون چگونه توانسته به ابزاری قدرتمند برای ساخت وبسایتهای بزرگ و پیچیده با ترافیک بالا تبدیل شود و در صنایع مختلف از شبکههای اجتماعی و سرگرمی گرفته تا خدمات ابری و حمل و نقل، حضور پررنگی داشته باشد.
نتیجهگیری
پایتون با فریمورکهای قدرتمند خود مانند جنگو و فلسک، یک انتخاب عالی برای توسعه وب است. فلسک با سادگی و انعطافپذیری خود برای پروژههای کوچکتر و APIها مناسب است، در حالی که جنگو با قابلیتهای جامع و "باتریهای همراه" خود برای ساخت برنامههای کاربردی وب بزرگ و پیچیده ایدهآل است. با یادگیری این فریمورکها و مفاهیم اصلی توسعه وب، میتوانید گامهای مؤثری در دنیای برنامهنویسی وب بردارید و ایدههای خود را به واقعیت تبدیل کنید. مسیر توسعه وب یک سفر مداوم یادگیری است؛ همواره به دنبال کسب دانش جدید و بهروزرسانی مهارتهای خود باشید.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.