"The Web Framework for Perfectionists with Deadlines" - ඔබගේ පළමු දත්ත සමුදාය-පදනම් වූ (Database-Driven) වෙබ් යෙදුම නිර්මාණය කරමු.
අපි මීට පෙර පාඩම් වලින් Python ක්රමලේඛන භාෂාවේ මූලික කරුණු සහ HTML/CSS භාවිතයෙන් සරල ස්ථිතික (static) වෙබ් අඩවියක් නිර්මාණය කරන ආකාරය ඉගෙන ගත්තෙමු. නමුත්, Instagram, YouTube, Spotify වැනි ලොව දැවැන්ත වෙබ් අඩවි ක්රියාත්මක වන්නේ කෙසේද? ඒවාට පරිශීලකයන්ට ලොග් වීමට, දත්ත ඇතුළත් කිරීමට (පින්තූර, comments), සහ එම දත්ත දත්ත සමුදායක (database) ගබඩා කර නැවත පෙන්වීමට හැකි වන්නේ කෙසේද? මෙවැනි ගතික (dynamic) වෙබ් යෙදුම් නිර්මාණය කිරීම සඳහා, අපට **වෙබ් රාමුවක් (Web Framework)** අවශ්ය වේ.
Django** යනු Python භාෂාවෙන් ලියැවුණු, ඉහළ මට්ටමේ (high-level), නොමිලේ සහ විවෘත මූලාශ්ර (open-source) වෙබ් රාමුවකි. එහි අරමුණ, සංකීර්ණ, දත්ත සමුදාය-පදනම් වූ වෙබ් අඩවි ඉක්මනින් සහ පහසුවෙන් නිර්මාණය කිරීමට සංවර්ධකයන්ට (developers) උදව් කිරීමයි.
මෙම නිබන්ධනයෙන්, අපි Django හි මූලික සංකල්ප ඉගෙන ගනිමින්, සරල **"කළ යුතු දේ ලැයිස්තුවක්" (To-Do List)** සහිත වෙබ් යෙදුමක් මුල සිටම නිර්මාණය කරමු. මෙම පාඩම අවසානයේදී, ඔබට Django ව්යාපෘතියක් ආරම්භ කර, දත්ත සමුදායක් සමඟ සම්බන්ධ වී, දත්ත පෙන්වන සහ දත්ත ඇතුළත් කළ හැකි වෙබ් පිටු නිර්මාණය කිරීමට හැකි වනු ඇත.
පූර්ව අවශ්යතා: මෙම පාඩම සඳහා Python සහ HTML පිළිබඳ මූලික අවබෝධයක් තිබීම උපකාරී වේ.
ඕනෑම Django ව්යාපෘතියක් ආරම්භ කිරීමට පෙර, ඒ සඳහාම වෙන්වූ, පිරිසිදු වැඩබිමක් සකසා ගැනීම ඉතා වැදගත් වේ. මේ සඳහා අපි **Virtual Environments** භාවිතා කරමු.
Virtual Environment එකක් යනු ඔබගේ ප්රධාන Python ස්ථාපනයෙන් (installation) වෙන්වූ, මෙම ව්යාපෘතියට පමණක් අදාළ පැකේජ (packages) රඳවා තබාගන්නා හුදකලා (isolated) පරිසරයකි. මෙය, විවිධ ව්යාපෘති වල අවශ්යතා එකිනෙක ගැටීම වළක්වා ගැනීමට ඇති හොඳම ක්රමයයි.
mkdir mydjangoproject
cd mydjangoproject
python -m venv venv
venv\Scripts\activatesource venv/bin/activateVirtual environment එක සක්රියව තිබියදී, Python හි පැකේජ කළමනාකරු වන `pip` භාවිතා කර Django ස්ථාපනය කරමු.
pip install django
දැන් අපි අපගේ ප්රධාන ව්යාපෘති ව්යුහය නිර්මාණය කරමු. Django හිදී, "Project" එකක් යනු සම්පූර්ණ වෙබ් අඩවියයි. "App" එකක් යනු එම වෙබ් අඩවියේ ඇති එක් විශේෂාංගයකි (feature).
django-admin startproject todoproject .
මෙහි `todoproject` යනු අපගේ ව්යාපෘතියේ නමයි. අවසානයේ ඇති තිත (`.`) මගින්, නව ෆෝල්ඩරයක් සෑදීම වෙනුවට, දැනට පවතින ෆෝල්ඩරය තුළම ව්යාපෘතිය නිර්මාණය කරන ලෙස දන්වයි.
Django මගින්, අපගේ වෙබ් අඩවිය නිර්මාණය කරන අතරතුර එය පරීක්ෂා කිරීමට, සැහැල්ලු (lightweight) වෙබ් සර්වරයක් සපයයි.
python manage.py runserver
දැන් ඔබගේ වෙබ් බ්රව්සරය විවෘත කර, `http://127.0.0.1:8000/` යන ලිපිනයට පිවිසෙන්න. ඔබට රොකට්ටුවක් සහිත Django හි පිළිගැනීමේ පිටුව දිස්වන්නේ නම්, ඔබගේ ව්යාපෘතිය සාර්ථකව ආරම්භ වී ඇත!
දැන් අපගේ ව්යාපෘති රාමුව (Project) සූදානම්. අපි දැන් අපගේ "To-Do List" එකට අදාළ තර්කනය (logic) සහ දත්ත රඳවා තබා ගැනීමට **App** එකක් නිර්මාණය කරමු.
python manage.py startapp todo
මෙමගින් `todo` නමින් නව ෆෝල්ඩරයක්, ඊට අදාළ ගොනු (`models.py`, `views.py`, etc.) සමඟ නිර්මාණය වනු ඇත.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
# ...
'todo', # අපගේ app එක මෙතනට එක් කරන්න
]
අපගේ To-Do List එකේ ගබඩා කළ යුතු දත්ත මොනවාද? අපට සෑම "කාර්යයක්" (Task) සඳහාම මාතෘකාවක් (title) සහ එය සම්පූර්ණද නැද්ද (completed status) යන්න අවශ්ය වේ. Django හිදී, දත්ත සමුදා වගුවක් (database table) නිරූපණය කරන්නේ Python class එකක් මගිනි. මෙය **Model** ලෙස හැඳින්වේ.
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=200)
completed = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
python manage.py makemigrations
python manage.py migrate
පළමු විධානය මගින් වෙනස්කම් ඇතුළත් "සැලැස්මක්" (migration file) සකසන අතර, දෙවන විධානය මගින් එම සැලැස්ම දත්ත සමුදාය මත ක්රියාත්මක කරයි.
Django හි ඇති විශිෂ්ටතම අංගයක් නම්, අපගේ දත්ත කළමනාකරණයට ස්වයංක්රීයව ජනනය වන පරිපාලක අතුරුමුහුණතයි (Admin Interface). `todo/admin.py` ගොනුව විවෘත කර, අපගේ `Task` model එක එහි ලියාපදිංචි කරමු.
from django.contrib import admin
from .models import Task # අපගේ Task model එක import කරන්න
admin.site.register(Task) # Admin අඩවියේ ලියාපදිංචි කරන්න
දැන්, `python manage.py createsuperuser` විධානය මගින් පරිපාලක ගිණුමක් සාදා, `python manage.py runserver` මගින් සර්වරය පණ ගන්වා, `http://127.0.0.1:8000/admin/` වෙත ගොස්, ඔබ සෑදූ username සහ password මගින් ලොග් වී, Tasks කිහිපයක් අතින් (manually) ඇතුළත් කර බලන්න.
දැන් අපේ දත්ත සමුදායේ ඇති කාර්යයන්, පරිශීලකයාට පෙනෙන වෙබ් පිටුවක පෙන්වීමට කාලයයි. Django හිදී මෙය **Model-View-Template (MVT)** රටාවට අනුව පියවර තුනකින් සිදුවේ.
from django.shortcuts import render
from .models import Task
def task_list(request):
tasks = Task.objects.all().order_by('created_at') # සියලුම Tasks ලබා ගැනීම
context = {'tasks': tasks} # Template එකට යැවීමට දත්ත සකස් කිරීම
return render(request, 'todo/task_list.html', context)
<!DOCTYPE html>
<html>
<head>
<title>To-Do List</title>
</head>
<body>
<h1>My To-Do List</h1>
<ul>
{% for task in tasks %}
<li>{{ task.title }}</li>
{% empty %}
<li>No tasks yet. Add one below!</li>
{% endfor %}
</ul>
</body>
</html>
මෙහි `{% for ... %}` සහ `{{ ... }}` යනු Django Template Language හි කොටස් වේ.
from django.urls import path
from . import views
urlpatterns = [
path('', views.task_list, name='task_list'),
]
from django.contrib import admin
from django.urls import path, include # include එක් කරන්න
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('todo.urls')), # මෙම පේළිය එක් කරන්න
]
දැන් සර්වරය නැවත ක්රියාත්මක කර (`python manage.py runserver`), `http://127.0.0.1:8000/` වෙත පිවිසෙන්න. ඔබ admin හරහා ඇතුළත් කළ කාර්යයන් ලැයිස්තුව ඔබට දැකගත හැකි වනු ඇත!
සුබ පැතුම්! ඔබ Python Django භාවිතා කර ඔබගේ පළමු, සම්පූර්ණ, දත්ත සමුදාය-පදනම් වූ වෙබ් යෙදුම සාර්ථකව නිර්මාණය කළා. මෙම ක්රියාවලියේදී, ඔබ Django හි මූලික සහ බලවත්ම සංකල්ප ප්රායෝගිකව අත්විඳා ඇත.
ඔබ ඉගෙන ගත් MVT ගැලපුම:
මෙය Django ලෝකයේ ආරම්භය පමණි. ඔබට මෙම යෙදුම තවදුරටත් දියුණු කළ හැකිය: කාර්යයන් සම්පූර්ණ (complete) ලෙස සලකුණු කිරීමට, ඒවා සංස්කරණය කිරීමට (edit), සහ මැකීමට (delete) අවශ්ය functionality එක් කරන්න. CSS භාවිතා කර ඔබගේ යෙදුම අලංකාර කරන්න.
ඊළGLISH පාඩම: Python සහ Django වලින් පසුව, වෙබ් සංවර්ධන ලෝකයේ තවත් ප්රබල රාමුවක් වන, PHP භාෂාව සමඟ භාවිතා වන **Laravel** පිළිබඳව අපගේ මීළඟ නිබන්ධනයෙන් ඉගෙන ගනිමු!