우선 devlivery app을 추가하도록 하겠습니다.
$python manage.py startapp delivery
/fastcampus/fastcampus/settings.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'order',
'boss',
'settings',
'rest_framework',
]
...
/fastcampus/fastcampus/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('order/', include('order.urls')),
path('admin/', admin.site.urls),
path('boss/', include('boss.urls')),
path('delivery/', include('delivery.urls')),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
배달 기사가 배송완료 버튼을 누르면 배송중에서 배송완료로 뜨게 되는 것은 기존의 코드를 그대로 활용하고 삭제 몇개만 하면 되기 때문에 매우 쉽습니다. 바로 코드로 들어가겠습니다.
/fastcampus/delivery/urls.py
from django.urls import path
from delivery import views
urlpatterns = [
path('orders/', views.order_list, name="order_list")
]
/fastcampus/delivery/views.py
from django.utils import timezone
from django.shortcuts import render
from order.models import Shop, Menu, Order, Orderfood
from order.serializer import ShopSerializer, MenuSerializer
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.parsers import JSONParser
@csrf_exempt
def order_list(request):
if request.method == 'GET':
order_list = Order.objects.all()
return render(request, "delivery/order_list.html", {'order_list': order_list})
elif request.method == 'POST':
order_item = Order.objects.get(pk=int(request.POST['order_id']))
order_item.deliver_finish = 1
order_item.save()
return render(request, "delivery/success.html")
/fastcampus/delivery/templates/delivery/order_list.html
<table style="border: 1px solid black; border-collapse: collapse;">
<tr style="border: 1px solid black;">
<th style="border: 1px solid black;">주문 시간</th>
<th style="border: 1px solid black;">음식</th>
<th style="border: 1px solid black;">배달 예상 시간</th>
<th style="border: 1px solid black;">배달 완료 여부</th>
</tr>
{% for order in order_list %}
<tr style="border: 1px solid black;">
<td style="border: 1px solid black;">
{{ order.order_date }}
</td>
<td style="border: 1px solid black;">
{% for food in order.orderfood_set.all %}
<h5>{{ food.food_name }}</h5>
{% endfor %}
</td>
<td style="border: 1px solid black;">
{% if order.estimated_time == -1 %}
미정
{% else %}
{{ order.estimated_time }}분
{% endif %}
</td>
<td style="border: 1px solid black;">
{% if order.deliver_finish == 0 %}
<form method="post" action="{% url 'order_list' %}">
<input type="hidden" name="order_id" value="{{ order.id }}">
<input type="submit" value="배송완료 버튼">
</form>
{% else %}
완료
{% endif %}
</td>
</tr>
{% endfor %}
</table>
/fastcampus/delivery/templates/delivery/success.html
배송 완료가 확인 되었습니다.
다른 주문 내역을 보기 위해선 <a href="{% url 'order_list' %}">여기</a>를 클릭해주세요.
이렇게 그냥 짜봤습니다. 이전에도 많이 활용했던 코드이므로, 그냥 넘어가도록 하겠습니다. 특별한 점이라곤 배송완료 누르면 deliver_finish를 default값인 0에서 1로 바꾸어 배송완료로 만드는 것 밖에 없습니다.
다음과 같이 배달기사의 입장에서 배송완료 버튼을 누르게 되면
배송 완료 성공 버튼이 나타나게되고, 여기를 클릭해서 배송완료가 되었는지 확인하게 되면
다음과 같이 정상 작동하는 것을 보실 수 있습니다.
다음 부터는 AWS를 통해서 아키텍쳐를 설계해 보도록 하겠습니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Django 결과를 EC2에 배포하기 (0) | 2022.06.30 |
---|---|
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - 데이터베이스 구축 (AWS RDS) (0) | 2022.06.30 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Boss 백엔드 개발 2 (0) | 2022.06.29 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Boss 백엔드 개발 1 (0) | 2022.06.29 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - Order백엔드 개발 3 (0) | 2022.06.29 |