පරිශීලකයින්ට පීසා ලැයිස්තුව පෙන්වා ඇණවුම් කිරීමට සලස්වන ආකාරය.
ලියාපදිංචි වී ඇතුල් වූ (logged-in) පරිශීලකයින්ට, අපගේ පීසා ලැයිස්තුව පෙන්වීම සහ ඔවුන්ට කැමති පීසා එකක් ඇණවුම් කිරීමට අවශ්ය ක්රියාකාරීත්වය ගොඩනැගීම. පරිශීලකයෙකු ඇණවුමක් කළ විට, එය 'Pending' තත්ත්වය යටතේ දත්ත සමුදායේ (database) සටහන් විය යුතුය.
පීසා ඇණවුම් කළ හැක්කේ ලියාපදිංචි පරිශීලකයින්ට පමණක් බැවින්, පීසා ලැයිස්තුව පෙන්වන පිටුවට පිවිසීමට login වීම අනිවාර්ය කළ යුතුය. මේ සඳහා Django හි @login_required decorator එක භාවිතා කරමු. මෙමගින්, login නොවූ පරිශීලකයෙක් එම පිටුවට පිවිසීමට උත්සාහ කළහොත්, ඔහුව ස්වයංක්රීයව login පිටුවට යොමු කරයි.
Database එකෙන් සියලුම පීසා ගෙන, ඒවා template එකට යවන view එකක් නිර්මාණය කරමු. අපි මෙය අපගේ මුල් පිටුව (Homepage) ලෙස සලකමු.
orders/views.pyfrom django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Pizza # Pizza model එක import කරගන්න
@login_required
def home_view(request):
pizzas = Pizza.objects.all() # Database එකෙන් සියලුම Pizza objects ලබාගැනීම
return render(request, 'home.html', {'pizzas': pizzas})
templates/home.html<div> එකක් වෙනුවට, වඩාත් අලංකාර Bootstrap Card එකක් භාවිතා කර ඇත.
<h1>Our Pizzas</h1>
<div class="row">
{% for pizza in pizzas %}
<div class="col-md-6">
<div class="card mb-3">
<div class="card-body">
<h5 class="card-title">{{ pizza.name }}</h5>
<p class="card-text">Price: Rs. {{ pizza.price }}</p>
<form action="{% url 'add_to_order' %}" method="post">
{% csrf_token %}
<input type="hidden" name="pizza_id" value="{{ pizza.id }}">
<div class="mb-2">
<label for="quantity-{{pizza.id}}" class="form-label">Quantity:</label>
<input type="number" name="quantity" id="quantity-{{pizza.id}}" class="form-control" value="1" min="1" style="width: 80px;">
</div>
<button type="submit" class="btn btn-primary">Order Now</button>
</form>
</div>
</div>
</div>
{% endfor %}
</div>
action="{% url 'add_to_order' %}": Form එක submit කළ විට, 'add_to_order' නමැති URL එකට දත්ත යැවිය යුතු බව දන්වයි.
pizzaproject/urls.py# pizzaproject/urls.py
from orders import views as orders_views
from django.urls import path
urlpatterns = [
path('', orders_views.home_view, name='home'), # මුල් පිටුවට අදාළ URL
# ... අනෙකුත් URLs
]
පරිශීලකයා "Order Now" බොත්තම click කළ විට, එම දත්ත භාරගෙන Order object එකක් නිර්මාණය කරන view එක සකසමු.
orders/views.pyfrom .models import Pizza, Order # Order model එකත් import කරගන්න
from django.shortcuts import redirect
@login_required
def add_to_order_view(request):
if request.method == 'POST':
# Form එකෙන් එවන දත්ත ලබාගැනීම
pizza_id = request.POST.get('pizza_id')
quantity = int(request.POST.get('quantity'))
# අදාළ Pizza object එක ලබාගැනීම
try:
pizza = Pizza.objects.get(id=pizza_id)
except Pizza.DoesNotExist:
# Handle error, maybe redirect back with a message
return redirect('home')
# මුළු මුදල ගණනය කිරීම
total_price = pizza.price * quantity
# නව Order object එකක් නිර්මාණය කිරීම
Order.objects.create(
pizza=pizza,
user=request.user, # Login වී සිටින user
quantity=quantity,
total_price=total_price
# Status එක default 'Pending' ලෙස Model එකේ ඇති නිසා මෙහිදී දීමට අවශ්ය නැත
)
# සාර්ථකව ඇණවුම සෑදූ පසු, වෙනත් පිටුවකට යොමු කිරීම
# 'my_orders' යනු ඊළඟ කොටසේදී සාදන පිටුවයි
return redirect('my_orders')
# POST request එකක් නොවේ නම්, home එකටම යොමු කරන්න
return redirect('home')
pizzaproject/urls.pyurlpatterns = [
# ...
path('add_to_order/', orders_views.add_to_order_view, name='add_to_order'),
# ...
]
දැන්, පරිශීලකයෙක් පීසා එකක් ඇණවුම් කළ විට, එය දත්ත සමුදායේ Order වගුවේ නව සටහනක් ලෙස 'Pending' තත්ත්වය යටතේ ගබඩා වනු ඇත!
Next Lessonසන්!