Django මූලික පාඩම: Python Web Development Sinhala Guide

ආයුබෝවන්, tech ලෝකේ යාළුවනේ! අද අපි කතා කරන්න යන්නේ Python Web Development වලට අත දාන ඕනෑම කෙනෙක්ට ගොඩක් වැදගත් වෙන, ඒ වගේම ගොඩක් දෙනා කැමති Framework එකක් ගැන – ඒ තමයි Django!
ඔබ Python දන්න කෙනෙක් නම්, ලස්සනට, ඉක්මනට, ආරක්ෂාකාරී විදියට Web Application එකක් හදන්න කැමති නම්, Django කියන්නේ ඔබට තියෙන සුපිරිම විසඳුමක්. මේ Framework එකේ තියෙන "Batteries Included" philosophy එක නිසා, Web App එකක් හදන්න අවශ්ය ගොඩක් දේවල් දැනටමත් මේක ඇතුළේ තියෙනවා. ඒ නිසා අපිට වැඩේ පටන් ගන්න ලේසියි, ඉක්මන් වුණත් වැඩේ පටන් ගන්න පුළුවන්!
මේ Guide එකෙන් අපි Django කියන්නේ මොකක්ද, ඒකේ තියෙන Core Concepts මොනවද (විශේෂයෙන්ම MVT Architecture එක), Project එකක් හා App එකක් කොහොමද පටන් ගන්නේ, ඒ වගේම Development Server එකක් කොහොමද Run කරන්නේ කියලා මුල සිට සරලව ඉගෙන ගන්නවා. අන්තිමට, අපි සාමාන්යයෙන් මුලින් කරන වැරදි මොනවද, ඒවා හදාගන්නේ කොහොමද, හොඳම Practices මොනවද කියලත් බලමු. ඉතින්, අපි පටන් ගමුද?
Django කියන්නේ මොකක්ද?
සරලවම කියනවා නම්, Django කියන්නේ Python වලින් ලියපු Free, Open-source Web Framework එකක්. ඒකේ ප්රධානම අරමුණ වෙන්නේ Complex, Database-driven Websites ඉක්මනින් හා කාර්යක්ෂමව හදන්න Developers ලට උදව් කරන එකයි. Instagram, Pinterest, Spotify වගේ ලෝක ප්රසිද්ධ Websites පවා Django භාවිතා කරනවා. මේකෙදි අපිට 'Wheels' නැවත හදන්න ඕනේ වෙන්නේ නැහැ, මොකද ගොඩක් දේවල් මේකේ Built-in වෙලා තියෙන්නේ.
The "Batteries Included" Philosophy
Django වල මේ කියන "Batteries Included" philosophy එක තමයි මේකේ ප්රධානතම වාසියක්. මේකෙන් අදහස් වෙන්නේ, Web Application එකක් හදන්න අවශ්ය වෙන ගොඩක් Common Features (උදාහරණයක් විදියට User Authentication, Admin Panel, ORM (Object-Relational Mapper), Caching, Security Features වගේ දේවල්) දැනටමත් Framework එක ඇතුළේම එනවා කියන එකයි. වෙනත් Frameworks වල වගේ third-party libraries ගොඩක් Install කරලා, ඒවා configure කරන්න ඕනේ වෙන්නේ නැහැ.
හිතන්න, ඔබ කෑමක් හදන්න යනවා කියලා. "Batteries Included" කියන්නේ, ඔබට අවශ්ය හැම උපකරණයක්ම (හැඳි, පිහි, භාජන, උදුන) සහ ගොඩක් Common අමුද්රව්ය දැනටමත් කුස්සියේ සූදානම් කරලා තියෙනවා වගේ දෙයක්. ඔබට තියෙන්නේ ඒවා අරගෙන, ඔබේ Recipe එක අනුව කෑම හදන එක විතරයි. මේකෙන් වෙලාව ඉතිරි වෙනවා, වැඩේ ඉක්මන් වෙනවා, ඒ වගේම ගැටළු අඩු වෙනවා.
MVT Architecture එක (Model-View-Template)
Django වල තියෙන ප්රධාන Architecture Pattern එක තමයි MVT, ඒ කියන්නේ Model-View-Template. මේක MVC (Model-View-Controller) pattern එකට ටිකක් සමානයි, හැබැයි Django වලට විශේෂ විදියට මේක හදලා තියෙනවා.
- Model: මේක තමයි ඔබේ Application එකේ Data Layer එක. Database එකත් එක්ක interact කරන්නේ Model එක හරහායි. ඔබේ Application එකේ Data Structure එක සහ Data එක ගබඩා කරන්නේ කොහොමද, ඒ Data එකට access කරන්නේ කොහොමද කියලා මේකෙන් define කරනවා. උදාහරණයක් විදියට, ඔබ Blog Post App එකක් හදනවා නම්, Post එකක Title එක, Content එක, Author කවුද වගේ දේවල් Model එකෙන් define කරනවා. මේක සාමාන්යයෙන්
models.py
කියන File එකේ තමයි තියෙන්නේ. - View: මේක තමයි Business Logic එක තියෙන තැන. User ගෙන් එන HTTP Request එකක් handle කරන්නේ View එකකින්. View එකෙන් Model එකත් එක්ක interact කරලා Data ගන්නවා හෝ Save කරනවා, ඊට පස්සේ Template එකත් එක්ක interact කරලා User ට පෙන්වන්න ඕනේ Output එක Generate කරනවා. සරලවම කිව්වොත්, View එකෙන් තමයි Request එකකට Response එකක් Generate කරන්නේ. මේක සාමාන්යයෙන්
views.py
කියන File එකේ තමයි තියෙන්නේ. - Template: මේක තමයි User ට පෙනෙන User Interface (UI) එක. HTML, CSS, JavaScript වගේ දේවල් පාවිච්චි කරලා, Model එකෙන් ආපු Data එක Display කරන්නේ කොහොමද කියලා මේකෙන් define කරනවා. Django වලට තියෙනවා තමන්ගේම Template Language එකක්, ඒක පාවිච්චි කරලා අපිට Python Data, HTML Files ඇතුළේ Render කරන්න පුළුවන්. මේවා සාමාන්යයෙන්
.html
Files විදියට තමයි තියෙන්නේ.
මේ තුන එකට වැඩ කරන්නේ මෙහෙමයි:
- User කෙනෙක් ඔබේ Website එකේ Page එකක් Request කරනවා.
- Django වල URL Dispatcher එක (
urls.py
) ඒ Request එක අදාල View එකට යවනවා. - View එකෙන් Model එක හරහා Database එකෙන් අවශ්ය Data ගන්නවා.
- View එකෙන් ඒ Data එක අදාල Template එකට යවලා, User ට පෙන්වන්න ඕනේ HTML Output එක හදනවා.
- Django විසින් ඒ HTML Output එක User ගේ Browser එකට Response එකක් විදියට යවනවා.
ඔබේ පළමු Django Project එක හදමු!
හරි, දැන් අපි Theory ටික ඉගෙන ගත්තා. දැන් Practical එකට බහිමු! අපි අපේ පළමු Django Project එකක් සහ ඒකට App එකක් හදලා, Development Server එකක් Run කරමු.
මුලින්ම සූදානම් වෙමු
ඔබේ Computer එකේ Python Install කරලා තියෙන්න ඕනේ. ඔබට මේක Command Prompt (Windows) හෝ Terminal (macOS/Linux) එකේදී පහත Command එක ගහලා Check කරන්න පුළුවන්:
python --version
# හෝ
python3 --version
ඔබට Python Install කරලා නැත්නම්, python.org එකට ගිහින් Download කරගන්න පුළුවන්.
ඊළඟට, අපි Virtual Environment එකක් හදාගමු. මේක හොඳ පුරුද්දක්, මොකද ඔබේ Project එකට අවශ්ය Dependencies (Package) අනිත් Project වලට බලපාන්නේ නැති විදියට තියාගන්න මේකෙන් පුළුවන්.
# Project folder එකක් හදාගෙන ඒකට යන්න
mkdir mydjangosite
cd mydjangosite
# Virtual Environment එකක් හදමු
python -m venv venv
# Virtual Environment එක Activate කරමු
# Windows වල නම්:
.\venv\Scripts\activate
# macOS / Linux වල නම්:
source venv/bin/activate
දැන් ඔබේ Terminal එකේ මුලින් (venv)
කියලා පෙනේවි. ඒ කියන්නේ Virtual Environment එක Activeයි කියන එකයි.
දැන් අපි Django Install කරමු:
pip install Django
Django Install වුණාද කියලා Check කරන්න පුළුවන් මේ Command එකෙන්:
django-admin --version
Project එකක් සහ App එකක් හදමු
Django වලදී Project එකක් කියන්නේ සම්පූර්ණ Web Application එකටම. ඒකේ තමයි Website එකේ Overall Settings, URLs වගේ දේවල් තියෙන්නේ. App එකක් කියන්නේ Project එක ඇතුළේ තියෙන, ස්වාධීනව වැඩ කරන්න පුළුවන්, යම්කිසි Feature එකකට අදාල Module එකක් (උදා: Blog App එකක්, Portfolio App එකක්, Contact Form App එකක්).
පළමුව, අපි Project එකක් හදමු. ඔබ `mydjangosite` කියන Folder එක ඇතුළේ ඉන්නවා කියලා හිතමු.
django-admin startproject mywebsite .
මෙහි mywebsite
කියන්නේ Project එකේ නම. අගට තියෙන .
එකෙන් කියන්නේ Project Files ටික `mydjangosite` කියන දැනට ඉන්න Directory එක ඇතුළටම හදන්න කියලා. (නැත්නම්, Project නමට තවත් Folder එකක් හදනවා, ඒක ටිකක් අවුල් වෙන්න පුළුවන්).
දැන් ඔබේ Folder Structure එක මේ වගේ වෙයි:
mydjangosite/
├── manage.py
└── mywebsite/
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
manage.py
: මේක තමයි ඔබේ Project එකේ විවිධ Administrative Tasks කරන්න පාවිච්චි කරන Command Line Utility එක. (උදා: Server එක Run කරන්න, Database Migrate කරන්න).mywebsite/
(Project Folder): මේකේ තියෙන්නේ ඔබේ Project එකේ actual Python Packages.mywebsite/settings.py
: ඔබේ Django Project එකේ Configuration Files ටික.mywebsite/urls.py
: ඔබේ Project එකේ URL Declarations. මේක තමයි "Table of Contents" වගේ, User ගෙන් එන Request එක අදාල View එකට යවන්නේ මේකෙන්.mywebsite/wsgi.py
&mywebsite/asgi.py
: Production deployment සඳහා අවශ්ය කරන Web Server Gateway Interface (WSGI) සහ Asynchronous Server Gateway Interface (ASGI) Entry points.
දැන් අපි App එකක් හදමු. අපිට Blog Post එකක් දාන්න පුළුවන් Blog App එකක් හදමු කියලා හිතමු.
python manage.py startapp blog
දැන් ඔබේ Folder Structure එකට `blog` කියලා තවත් Folder එකක් එකතු වෙලා ඇති:
mydjangosite/
├── blog/
│ ├── migrations/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── mywebsite/
├── ... (project files)
දැන් අපි මේ හදපු blog
App එක අපේ Project එකට දන්න ඕනේ. ඒකට mywebsite/settings.py
File එක Open කරලා, INSTALLED_APPS
කියන List එකට 'blog'
කියලා එකතු කරන්න:
# mywebsite/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # අපේ අලුත් App එක මෙතනට එකතු කරන්න
]
දැන් අපි blog
App එකේ View එකක් හදමු. blog/views.py
File එක Open කරලා මේ Code එක එකතු කරන්න:
# blog/views.py
from django.shortcuts import render
from django.http import HttpResponse
def home(request):
return HttpResponse("<h1>ආයුබෝවන්, Django ලෝකයට! මේ අපේ පළමු Blog App එක!</h1>")
මේ View එකට Request එකක් එනකොට, "ආයුබෝවන්, Django ලෝකයට! මේ අපේ පළමු Blog App එක!" කියලා Message එකක් Return කරනවා.
මේ View එකට URL එකක් සෙට් කරන්න ඕනේ. ඒකට අපි blog
App එක ඇතුළේම urls.py
File එකක් හදමු. blog
Folder එක ඇතුළේ අලුතින් urls.py
කියලා File එකක් හදලා මේ Code එක එකතු කරන්න:
# blog/urls.py (blog folder එක ඇතුළේ)
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
දැන් මේ blog
App එකේ urls.py
එක Project එකේ Main mywebsite/urls.py
එකට include කරන්න ඕනේ:
# mywebsite/urls.py (Project folder එක ඇතුළේ)
from django.contrib import admin
from django.urls import path, include # include function එක import කරගන්න
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')), # අපේ blog app එකේ urls ටික include කරමු
]
අපි path('', include('blog.urls'))
කියලා දුන්නාම, ඔබේ Website එකේ Base URL එකට (/
) එන හැම Request එකක්ම blog
App එකේ urls.py
File එකට යවනවා. ඒ urls.py
එකේ අපි path('', views.home, name='home')
කියලා දාලා තියෙන නිසා, blog
App එකේ views.py
එකේ තියෙන home
Function එක Call වෙනවා.
අන්තිමට, අපි Database එක Setup කරමු. Django Default විදියට SQLite Database එකක් පාවිච්චි කරනවා, ඒක Development වලට ගොඩක් හොඳයි.
python manage.py migrate
මේ Command එකෙන් Django වලට අවශ්ය කරන Default Tables Database එකේ හදනවා. (උදා: User Authentication, Admin Panel Tables).
දැන් අපි Development Server එක Run කරමු:
python manage.py runserver
ඔබට Terminal එකේ මේ වගේ Output එකක් පෙනේවි:
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
May 21, 2024 - 10:30:00
Django version 5.0.6, using settings 'mywebsite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
දැන් ඔබේ Web Browser එක Open කරලා http://127.0.0.1:8000/
කියන URL එකට යන්න. ඔබට "ආයුබෝවන්, Django ලෝකයට! මේ අපේ පළමු Blog App එක!" කියලා Message එක පෙනේවි. සුභ පැතුම්! ඔබ ඔබේ පළමු Django Web App එක සාර්ථකව Run කළා!
ඔබට Django Admin Panel එක බලන්න ඕනේ නම්, http://127.0.0.1:8000/admin/
කියන URL එකට යන්න. ඒකට Login වෙන්න Superuser කෙනෙක් හදන්න ඕනේ:
python manage.py createsuperuser
ඔබේ Username, Email, Password ටික ටයිප් කරලා Enter කරන්න. දැන් Admin Panel එකට Login වෙන්න පුළුවන්.
ගැටළු නිරාකරණය සහ හොඳම පුරුදු
අලුතින් Framework එකක් ඉගෙන ගන්නකොට පොඩි පොඩි ගැටළු එන එක සාමාන්ය දෙයක්. ඒවා හදාගන්න විදිය දැනගෙන ඉන්න එක ගොඩක් වැදගත්.
පොදු ගැටළු සහ විසඳුම්
- `blog` App එක Load වෙන්නේ නැහැ / `No module named 'blog'` Error එකක් එනවා:
- ගොඩක් වෙලාවට මේක වෙන්නේ
mywebsite/settings.py
File එකේINSTALLED_APPS
List එකට ඔබේ App එක (අපේ උදාහරණයේ'blog'
) එකතු කරන්න අමතක වුණාමයි. python manage.py runserver
එක නවත්තලා (CTRL+C
) ආයේ Run කරන්න.
- ගොඩක් වෙලාවට මේක වෙන්නේ
- URL එකට ගියාම Page එකක් පෙන්වන්නේ නැහැ / 404 Not Found Error එකක් එනවා:
mywebsite/urls.py
සහblog/urls.py
යන Files දෙකේම URL Patterns හරියට දීලා තියෙනවද කියලා බලන්න.include
Function එකmywebsite/urls.py
එකට Import කරලා තියෙනවද කියලා බලන්න. (from django.urls import path, include
).blog/views.py
එකේ Function එකට නිවැරදිව Request එක යන විදියට URL එක සෙට් කරලා තියෙනවද කියලා බලන්න.
- `manage.py` Command එක වැඩ කරන්නේ නැහැ:
- ඔබ Virtual Environment එක Activate කරලා තියෙනවද? (
(venv)
කියලා Terminal එකේ මුලින් පෙනෙන්න ඕනේ). - ඔබ
mydjangosite
කියන Project Root Directory එක ඇතුළේ ඉන්නවද? (ඒ Directory එක ඇතුළේmanage.py
File එක තියෙන්න ඕනේ).
- ඔබ Virtual Environment එක Activate කරලා තියෙනවද? (
- Pip Install එකෙන් Module එකක් Install වෙන්නේ නැහැ:
- Virtual Environment එක Activate කරලා තියෙනවද කියලා බලන්න.
pip
Update කරන්න:python -m pip install --upgrade pip
.
Project vs. App: නියම තේරුම
මේක තවත් වරදවා වටහා ගන්න පුළුවන් තැනක්. ආයෙත් අපි මේක පැහැදිලි කරගමු.
- Project: ඔබේ සමස්ත Website එකේ Framework එක, නැත්නම් Container එක. ඔබේ Website එකේ Global Configuration (Settings), Global URLs, Static Files Setup වගේ දේවල් මේකේ තියෙනවා. මේක ඔබේ ගෙදර වගේ. ගේ ඇතුළේ විවිධ කාමර තියෙනවා.
- App: Project එක ඇතුළේ තියෙන, යම්කිසි විශේෂිත Feature එකක් (Module) ක්රියාත්මක කරන කොටසක්. උදාහරණයක් විදියට, Blog App එකක්, User Profile App එකක්, E-commerce Cart App එකක් වගේ දේවල්. මේවා ඔබේ ගෙදර තියෙන කාමර වගේ. හැම කාමරයක්ම එකිනෙකට වෙනස් වැඩක් කරනවා (නිදන කාමරය, කුස්සිය, නාන කාමරය), හැබැයි ඒවා ඔක්කොම එකම ගෙදරට අයිතියි.
මේ වෙන් කිරීමෙන් වෙන්නේ ඔබේ Code එක Organized වෙනවා, Modules වලට කඩලා තියෙන නිසා තේරුම් ගන්න ලේසියි, ඒ වගේම නැවත භාවිතා කරන්න පුළුවන් (Reusable).
Apps නැවත භාවිතා කළ හැකි ලෙස තියාගනිමු (Keep Apps Reusable)
මේක Django Developers ලා අතර තියෙන හොඳම Practices වලින් එකක්. ඔබේ App එකක් හදනකොට, ඒක ඒ Project එකට විතරක් සීමා නොවී, ඕනෑම Django Project එකකදී පාවිච්චි කරන්න පුළුවන් විදියට හදන්න උත්සාහ කරන්න.
මේකට කරන්න පුළුවන් දේවල්:
- Project-specific Logic එක App එකෙන් අයින් කරන්න: ඔබේ App එකේ Business Logic එක (
views.py
) සහ Data Model එක (models.py
) ඒ App එකටම සීමා කරන්න. Project එකේ Global Settings, Global URLs වගේ දේවල් App එක ඇතුළේ Hardcode කරන්න එපා. - Generic Views සහ Models භාවිතා කරන්න: Django වල තියෙන Generic Views (e.g.,
ListView
,DetailView
) සහ Model Inheritance වගේ දේවල් පාවිච්චි කරලා App එකක් Generic විදියට හදන්න පුළුවන්. - Templates App එක ඇතුළේ තියාගන්න: ඔබේ App එකට අදාල Templates ඒ App එකේම (
blog/templates/blog/
වගේ Folder එකක) තියාගන්න. - Configurations Settings වලින් ගන්න: App එකට අවශ්ය වෙන configurations (උදා: API Keys)
settings.py
File එකෙන් ගන්න පුරුදු වෙන්න, App එකේම ඒවා Hardcode නොකර.
ඔබේ App එක Reusable වුණාම, ඔබට ඒක වෙනත් Project එකකදී, නැත්නම් අලුත් Project එකක් පටන් ගන්නකොට, නැවත මුල ඉඳන් හදන්න ඕනේ වෙන්නේ නැහැ. ඒකෙන් ඔබේ වෙලාව ඉතිරි වෙනවා, ඒ වගේම Code Quality එකත් වැඩි වෙනවා.
අවසාන වශයෙන් (Conclusion)
හරි, යාළුවනේ! අද අපි Django Framework එක ගැන ගොඩක් දේවල් ඉගෙන ගත්තා. අපි "Batteries Included" philosophy එක ගැන දැනගත්තා, MVT Architecture එකේ කොටස් තුන (Model, View, Template) කොහොමද වැඩ කරන්නේ කියලා තේරුම් ගත්තා, ඒ වගේම අපේ පළමු Django Project එක සහ App එක හදලා, Development Server එකක් Run කරලා Page එකක් Browser එකේ බැලුවා. ඒ වගේම, පොදු ගැටළු ටිකක් සහ "Project vs. App" කියන Concept එකත් පැහැදිලි කරගෙන, Reusable Apps හදන එකේ වැදගත්කම ගැනත් කතා කළා.
Django කියන්නේ Python Developers ලට Web Development කරන්න තියෙන සුපිරිම Tool එකක්. මේකේ තියෙන Power එක නිසා, ඔබේ Idea එකක් ගොඩක් ඉක්මනින් Real World Application එකක් බවට පත් කරගන්න පුළුවන්.
මේ Tutorial එකෙන් ඔබ Django වලට හොඳ පදනමක් දාගන්න ඇති කියලා මම විශ්වාස කරනවා. මේක පටන් ගැනීමක් විතරයි! තවත් ගොඩක් දේවල් ඉගෙන ගන්න තියෙනවා. Models, Database Interactions, Forms, User Authentication, Static Files, Deployment වගේ දේවල් ගැන තවදුරටත් හොයලා බලන්න. මතක තියාගන්න, Practice කරන එක තමයි වැදගත්ම දේ. අද ඉගෙන ගත්ත දේවල් ඔබේම පොඩි Project එකක Implement කරන්න උත්සාහ කරන්න.
ඔබට මේ Tutorial එක ගැන ප්රශ්න තියෙනවා නම්, නැත්නම් ඔබේ Django Experience එක බෙදාගන්න ඕනේ නම්, පහළින් Comment එකක් දාන්න! ඔබේ අදහස් අපිට ගොඩක් වටිනවා. එහෙනම්, තවත් Tutorial එකකින් හමුවෙමු! Happy Coding!