Django Sinhala Tutorial

"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) උදව් කිරීමයි.

වෙබ් රාමුවක් (Web Framework) යනු කුමක්ද?
එය හරියට නිවසක් සෑදීමට පෙර සූදානම් කළ අත්තිවාරමක් සහ සැකිල්ලක් වැනිය. ඔබට මුල සිටම අත්තිවාරම දමා, කණු සිටුවා, බිත්ති බඳිනවා වෙනුවට, රාමුව මගින් සපයන ලද ව්‍යුහය තුළ, ඔබට අවශ්‍ය කාමර (ඔබගේ යෙදුමේ features) පමණක් නිර්මාණය කළ හැක. Django මගින් දත්ත සමුදා සම්බන්ධතා, පරිශීලක කළමනාකරණය, ආරක්ෂාව, සහ URL මාර්ගගත කිරීම (routing) වැනි වෙහෙසකර, පුනරාවර්තන කාර්යයන් බොහොමයක් අප වෙනුවෙන් ස්වයංක්‍රීයව සිදු කරයි.

මෙම නිබන්ධනයෙන්, අපි Django හි මූලික සංකල්ප ඉගෙන ගනිමින්, සරල **"කළ යුතු දේ ලැයිස්තුවක්" (To-Do List)** සහිත වෙබ් යෙදුමක් මුල සිටම නිර්මාණය කරමු. මෙම පාඩම අවසානයේදී, ඔබට Django ව්‍යාපෘතියක් ආරම්භ කර, දත්ත සමුදායක් සමඟ සම්බන්ධ වී, දත්ත පෙන්වන සහ දත්ත ඇතුළත් කළ හැකි වෙබ් පිටු නිර්මාණය කිරීමට හැකි වනු ඇත.

පූර්ව අවශ්‍යතා: මෙම පාඩම සඳහා Python සහ HTML පිළිබඳ මූලික අවබෝධයක් තිබීම උපකාරී වේ.


1 වන කොටස: Django පරිසරය සකසා ගැනීම (Setting Up the Environment) ⚙️

ඕනෑම Django ව්‍යාපෘතියක් ආරම්භ කිරීමට පෙර, ඒ සඳහාම වෙන්වූ, පිරිසිදු වැඩබිමක් සකසා ගැනීම ඉතා වැදගත් වේ. මේ සඳහා අපි **Virtual Environments** භාවිතා කරමු.

1.1 Virtual Environment එකක් සෑදීම

Virtual Environment එකක් යනු ඔබගේ ප්‍රධාන Python ස්ථාපනයෙන් (installation) වෙන්වූ, මෙම ව්‍යාපෘතියට පමණක් අදාළ පැකේජ (packages) රඳවා තබාගන්නා හුදකලා (isolated) පරිසරයකි. මෙය, විවිධ ව්‍යාපෘති වල අවශ්‍යතා එකිනෙක ගැටීම වළක්වා ගැනීමට ඇති හොඳම ක්‍රමයයි.

  1. ඔබගේ පරිගණකයේ Command Prompt (Windows) හෝ Terminal (Mac/Linux) එක විවෘත කරගන්න.
  2. ඔබගේ ව්‍යාපෘතිය සෑදීමට අවශ්‍ය ෆෝල්ඩරයක් සාදා, එයට පිවිසෙන්න.
    mkdir mydjangoproject
    cd mydjangoproject
  3. පහත විධානය මගින් `venv` නමින් virtual environment එකක් සාදන්න:
    python -m venv venv
  4. එය සක්‍රිය (activate) කරන්න:
    • Windows: venv\Scripts\activate
    • Mac/Linux: source venv/bin/activate
    ඔබගේ terminal prompt එකේ මුලට `(venv)` ලෙස දිස්වන්නේ නම්, ඔබගේ virtual environment එක සාර්ථකව සක්‍රිය වී ඇත.

1.2 Django ස්ථාපනය කිරීම (Installing Django)

Virtual environment එක සක්‍රියව තිබියදී, Python හි පැකේජ කළමනාකරු වන `pip` භාවිතා කර Django ස්ථාපනය කරමු.

pip install django

1.3 Django ව්‍යාපෘතිය (Project) ආරම්භ කිරීම

දැන් අපි අපගේ ප්‍රධාන ව්‍යාපෘති ව්‍යුහය නිර්මාණය කරමු. Django හිදී, "Project" එකක් යනු සම්පූර්ණ වෙබ් අඩවියයි. "App" එකක් යනු එම වෙබ් අඩවියේ ඇති එක් විශේෂාංගයකි (feature).

django-admin startproject todoproject .

මෙහි `todoproject` යනු අපගේ ව්‍යාපෘතියේ නමයි. අවසානයේ ඇති තිත (`.`) මගින්, නව ෆෝල්ඩරයක් සෑදීම වෙනුවට, දැනට පවතින ෆෝල්ඩරය තුළම ව්‍යාපෘතිය නිර්මාණය කරන ලෙස දන්වයි.

1.4 සංවර්ධන සර්වරය (Development Server) ක්‍රියාත්මක කිරීම

Django මගින්, අපගේ වෙබ් අඩවිය නිර්මාණය කරන අතරතුර එය පරීක්ෂා කිරීමට, සැහැල්ලු (lightweight) වෙබ් සර්වරයක් සපයයි.

python manage.py runserver

දැන් ඔබගේ වෙබ් බ්‍රව්සරය විවෘත කර, `http://127.0.0.1:8000/` යන ලිපිනයට පිවිසෙන්න. ඔබට රොකට්ටුවක් සහිත Django හි පිළිගැනීමේ පිටුව දිස්වන්නේ නම්, ඔබගේ ව්‍යාපෘතිය සාර්ථකව ආරම්භ වී ඇත!


2 වන කොටස: ඔබගේ To-Do App එක නිර්මාණය කිරීම 📱

දැන් අපගේ ව්‍යාපෘති රාමුව (Project) සූදානම්. අපි දැන් අපගේ "To-Do List" එකට අදාළ තර්කනය (logic) සහ දත්ත රඳවා තබා ගැනීමට **App** එකක් නිර්මාණය කරමු.

  1. Terminal එකේ Ctrl+C ඔබා සර්වරය නවත්වා, පහත විධානය ක්‍රියාත්මක කරන්න:
    python manage.py startapp todo
    මෙමගින් `todo` නමින් නව ෆෝල්ඩරයක්, ඊට අදාළ ගොනු (`models.py`, `views.py`, etc.) සමඟ නිර්මාණය වනු ඇත.
  2. App එක ලියාපදිංචි කිරීම: අප `todo` නමින් app එකක් සෑදූ බව, ප්‍රධාන ව්‍යාපෘතියට දැන්විය යුතුය. `todoproject/settings.py` ගොනුව විවෘත කර, `INSTALLED_APPS` ලැයිස්තුවට `'todo'` යන්න එක් කරන්න.
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        # ...
        'todo', # අපගේ app එක මෙතනට එක් කරන්න
    ]

3 වන කොටස: දත්ත ආකෘතිය - The Model 📝

අපගේ To-Do List එකේ ගබඩා කළ යුතු දත්ත මොනවාද? අපට සෑම "කාර්යයක්" (Task) සඳහාම මාතෘකාවක් (title) සහ එය සම්පූර්ණද නැද්ද (completed status) යන්න අවශ්‍ය වේ. Django හිදී, දත්ත සමුදා වගුවක් (database table) නිරූපණය කරන්නේ Python class එකක් මගිනි. මෙය **Model** ලෙස හැඳින්වේ.

  1. `todo/models.py` ගොනුව විවෘත කර, පහත කේතය ඇතුළත් කරන්න:
    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
    
  2. කේතය විග්‍රහ කරමු:
    • `Task` class එක `models.Model` වෙතින් උරුම (inherit) වේ.
    • `title`: අක්ෂර 200ක උපරිම දිගක් සහිත පෙළ ක්ෂේත්‍රයකි (`CharField`).
    • `completed`: `True` හෝ `False` අගයක් ගන්නා බුලියානු ක්ෂේත්‍රයකි (`BooleanField`). `default=False` මගින්, අලුතින් සාදන සෑම කාර්යයක්ම මුලදී "සම්පූර්ණ නැති" ලෙස සලකයි.
    • `__str__`: මෙම method එක, Django admin වැනි ස්ථානවලදී, object එක මිනිසුන්ට කියවිය හැකි ආකාරයට (එහි මාතෘකාව) පෙන්වීමට උපකාරී වේ.
  3. දත්ත සමුදායට වෙනස්කම් යෙදීම (Migrations): අපි අපගේ model එක නිර්මාණය කළා. දැන්, මෙම Python class එකට අදාළව නියම දත්ත සමුදා වගුවක් නිර්මාණය කරන ලෙස Django ට දැන්විය යුතුය.
    python manage.py makemigrations
    python manage.py migrate
    පළමු විධානය මගින් වෙනස්කම් ඇතුළත් "සැලැස්මක්" (migration file) සකසන අතර, දෙවන විධානය මගින් එම සැලැස්ම දත්ත සමුදාය මත ක්‍රියාත්මක කරයි.

Django Admin

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) ඇතුළත් කර බලන්න.


4 වන කොටස: දත්ත පෙන්වීම - Views, Templates සහ URLs 🖼️

දැන් අපේ දත්ත සමුදායේ ඇති කාර්යයන්, පරිශීලකයාට පෙනෙන වෙබ් පිටුවක පෙන්වීමට කාලයයි. Django හිදී මෙය **Model-View-Template (MVT)** රටාවට අනුව පියවර තුනකින් සිදුවේ.

  1. View (දර්ශනය): දත්ත සමුදායෙන් දත්ත ලබාගෙන, කුමන HTML පිටුව පෙන්විය යුතුද යන්න තීරණය කරන තර්කනය (logic) මෙහි අඩංගු වේ. `todo/views.py` ගොනුවේ පහත function එක ලියන්න:
    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)
    
  2. Template (සැකිල්ල): පරිශීලකයා දකින HTML පිටුව. View එකෙන් එවන දත්ත පෙන්වන ආකාරය මෙහි නිර්වචනය වේ.
    • `todo` ෆෝල්ඩරය තුළ, `templates` නමින් නව ෆෝල්ඩරයක් සාදන්න.
    • එම `templates` ෆෝල්ඩරය තුළ, `todo` නමින් තවත් ෆෝල්ඩරයක් සාදන්න.
    • එම දෙවන `todo` ෆෝල්ඩරය තුළ, `task_list.html` නමින් නව ගොනුවක් සාදා, පහත කේතය යොදන්න.
    <!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 හි කොටස් වේ.
  3. URL (මාර්ගය): කුමන වෙබ් ලිපිනයට (URL) පිවිසූ විට, කුමන View එක ක්‍රියාත්මක විය යුතුද යන්න නිර්වචනය කිරීම.
    • `todo` ෆෝල්ඩරය තුළ, `urls.py` නමින් නව ගොනුවක් සාදා, පහත කේතය යොදන්න:
      from django.urls import path
      from . import views
      
      urlpatterns = [
          path('', views.task_list, name='task_list'),
      ]
      
    • දැන්, ප්‍රධාන ව්‍යාපෘතියේ `todoproject/urls.py` ගොනුව විවෘත කර, අපගේ `todo` app එකේ URL රටා එයට ඇතුළත් (include) කරන්න:
      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** පිළිබඳව අපගේ මීළඟ නිබන්ධනයෙන් ඉගෙන ගනිමු!