일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c3 step graph
- subporcess path
- python os
- snmp test
- c3 second
- 정규식 활용
- 1697
- gcc regex
- python popen
- c3 초
- semanage
- g++ 업데이트
- linux시간으로 변경
- gcc 업데이트
- python subprocess
- 백준
- 정규식 컴파일
- regex_search
- 정규식 문자열 출력
- telegraf
- centos pyhon 설치
- influxdb 설치
- CentOS7
- grafana dashboard
- snmp
- c3 축 가리기
- c++ 정규식
- selinux port 등록
- InfluxDB
- c3 축 없애기
- Today
- Total
리셋 되지 말자
csapi 프로젝트 (6) - 이미지 업로드 기능 추가 본문
https://not-to-be-reset.tistory.com/343 글에 작성한 대로, 모델 다운로드 링크가 만료되고 코드가 동작하지 않아서 다시 포스팅 합니다.
단일 인스턴스 부터 쿠버네티스 클러스터까지 확장해 나가려고 합니다.
개발환경
2023. 7. 22 기준 wsl 윈도우에서 진행
github 주소
https://github.com/kyeongjun-dev/csapi
커밋 : https://github.com/kyeongjun-dev/csapi/tree/76b27eef60226948edab1506343200ef4cd2e6ad
템플릿 및 api 추가
먼저 csapi/config/settings.py에 template 디렉토리를 추가합니다.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
csapi/config/urls.py를 아래와 같이 수정합니다. 브라우저에서 /api 경로로 접속하면,run_api 함수가 실행되도록 합니다.
from django.contrib import admin
from django.urls import path
from csapi import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name='index'),
path('api/', views.run_api, name='run_api'),
]
csapi/django/views.py를 아래와 같이 수정합니다. csapi/config/urls.py에 지정한 /api 경로로 접속 시, run_api 함수가 실행되도록 합니다. run_api 함수는 GET 요청시, index 함수와 동일하게 index.html을 리턴하고, POST 요청일 경우에는 다른 동작을 합니다. 여기서는 단순히 업로드된 파일의 이름, 크기, 타입(확장자)을 출력한 뒤 테스트용 이미지를 celery로 처리하도록 합니다.
from django.shortcuts import render
from django.http import HttpResponse
from celery import shared_task
from .tasks import api
# Create your views here.
def index(request):
return render(request, 'index.html')
def run_api(request):
if request.method == 'GET':
return render(request, 'index.html')
elif request.method == 'POST' and request.FILES['image']:
uploaded_file = request.FILES['image']
file_name = uploaded_file.name
file_size = uploaded_file.size
file_content_type = uploaded_file.content_type
print(file_name, file_size, file_content_type)
print(api.delay('test_input.png'))
return HttpResponse(api.delay('test_input.png'))
이제 최상단 csapi 디렉토리 하단에 templates 디렉토리를 생성한 뒤, index.html을 아래와 같이 작성합니다.
<html>
<head>
</head>
<body>
<h1> hello world </h1>
{% block content %}
<form action="{% url 'run_api' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="image">
<button type="submit" class="btn btn-primary">업로드</button>
</form>
{% endblock %}
</body>
</html>
서비스 포트 수정
본 글을 작성할 당시, windows WSL 환경에서 8000번 포트에 에러가 아래와같이 발생하여 docker-compose.yml 파일의 django 서비스 포트를 8080으로 변경하였습니다.
[+] Running 4/4
✔ Network csapi_default Created 0.6s
✔ Container csapi-django-1 Created 0.1s
✔ Container csapi-worker-1 Created 0.1s
✔ Container csapi-rabbit-1 Created 0.1s
Attaching to csapi-django-1, csapi-rabbit-1, csapi-worker-1
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:8000 -> 0.0.0.0:0: listen tcp 0.0.0.0:8000: bind: An attempt was made to access a socket in a way forbidden by its access permissions
변경한 docker-compose.yml 파일은 아래와 같습니다.
version: "3"
services:
django:
build:
context: ./django
command: python manage.py runserver 0.0.0.0:8080
ports:
- "8080:8080"
worker:
build:
context: ./celery
command: celery -A csapi.tasks worker --loglevel=info --max-tasks-per-child 1 -c 1
rabbit:
image: rabbitmq:3-management
expose:
- "5672"
ports:
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=guest
이미지 업로드 기능 테스트
docker-compose up --build 명령어로 새롭게 작성한 코드를 적용시킨 뒤, localhost:8080으로 접속하면 아래와 같은 화면을 확인할 수 있습니다.
실제로 이미지를 업로드 하면, docker compose up 명령어를 실행한 창에서 아래와 같은 로그를 확인할 수 있습니다.
csapi-django-1 | input.png 369213 image/png
csapi-rabbit-1 | 2023-09-05 15:04:39.058126+00:00 [info] <0.845.0> accepting AMQP connection <0.845.0> (172.19.0.4:37970 -> 172.19.0.3:5672)
csapi-rabbit-1 | 2023-09-05 15:04:39.060404+00:00 [info] <0.845.0> connection <0.845.0> (172.19.0.4:37970 -> 172.19.0.3:5672): user 'guest' authenticated and granted access to vhost '/'
csapi-django-1 | 21cdcf4d-b808-4f89-95b5-02df3f598820
csapi-worker-1 | [2023-09-05 15:04:39,076: INFO/MainProcess] Task csapi.tasks.api[21cdcf4d-b808-4f89-95b5-02df3f598820] received
csapi-django-1 | [05/Sep/2023 15:04:39] "POST /api/ HTTP/1.1" 200 36
'프로젝트' 카테고리의 다른 글
csapi 프로젝트 (8) - broker url 환경변수로 수정하도록 변경 (1) | 2023.10.08 |
---|---|
csapi 프로젝트 (7) - 이미지 저장 기능 추가 (0) | 2023.09.22 |
csapi 프로젝트 (5) - docker compose scaling 테스트 (0) | 2023.08.05 |
csapi 프로젝트 (4) - django 추가 (0) | 2023.07.28 |
csapi 프로젝트 (3) - celery 함수화 (0) | 2023.07.23 |