본문 바로가기
Web/Django

[Web] ExcelCalculate with django for Mac - 1

by skwkiix 2023. 7. 31.
728x90
이 포스팅은 "Django 한그릇뚝딱"의 Chapter4 내용을 실습하며 정리한 내용이다.

 

 


프로젝트 개요

  • 액셀 계산 사이트 만들기
  • 기능 구현
    • 로그인 및 회원가입(이메일 인증 방식)
    • 파일 업로드
    • 업로드 된 엑셀 파일 계산

가상 환경 세팅 및 app 구성

1.  가상환경 세팅

  • which python : python 위치 확인
 $ which python
  • virtualenv venv : 가상환경
$ virtualenv venv
  • source venv/bin/activate : 가상환경 활성화
source venv/bin/activate

2.  라이브러리 설치

requirements.txt를 이용하여 필요한 라이브러리를 설치해준다.
  • requirements.txt 생성 후 내용 작성(경로 : ExcelCalculator/)
django
openpyxl
pandas
jinja2
  • 라이브러리 설치
$ pip install -r requirements.txt

3. 프로젝트 이름 설정

ExcelCalculate로 프로젝트 이름을 설정해준다.
  • Django-admin startproject ExcelCalculate

4. 앱 등록

총 3개의 앱. main, sendEmail, calculate 을 만든다.
  • python manage.py startapp 앱 이름
$ cd ExcelCalculate
$ python manage.py startapp main
$ python manage.py startapp sendEmail
$ python manage.py startapp calculate

5.  HTML 파일 추가

저자의 깃허브에서 html 파일 다섯개를 다운로드 한후, 아래 경로에 붙여준다.

  • main>templates>main>

6.  urls.py 설정

sendEmail app, calculate app 은 각 앱의 urls.py에서 처리하도록 보내고,

아무런 일치 사항이 없는 경우 main app의 urls.py에서 처리하도록 설정한다.

  • ExcelCalculate>ExcelCalculate>urls.py
from django.contrib import admin
from django.urls import path, include
​
urlpatterns = [
   path("admin/", admin.site.urls),
   path('email/', include('sendEmail.urls'), name="email"), 
   path('calculate/', include('calculate.urls'), name="calculate"),
   path('', include('main.urls'), name="main"),
]

7.  각 앱의 urls.py 생성 후 설정

  • sendEmail > urls.py
  • sendEmail > views.py의 send 함수로 처리하도록 작성한다. (~/email/send)
from django.urls import path
from . import views
​
urlpatterns = [
   path('send',views.send, name = "email_send"),
]
  • calculate > urls.py
  calculate > views.py 의 calculate 함수로 처리하도록 작성한다.
from django.urls import path
from . import views
​
urlpatterns = [
   path('', views.calculate, name = "calculate_do"),
]
  • main > urls.py
 메인화면, 회원가입, 로그인, 인증코드 입력, 인증코드 확인, 결과확인 url을 처리한다.
from django.urls import path
from . import views
​
urlpatterns = [
   path('', views.index, name="main_index"), #메인화면
   path('signup', views.signup, name="main_signup"), #회원가입
   path('signin', views.signin, name="main_signin"), #로그인
   path('verifyCode', views.verifyCode, name="main_verifyCode"), #인증코드 입력
   path('verify', views.verify, name="main_verify"), #인증 코드 확인 
   path('result', views.result, name="main_result"), # 결과화면
]

8. 각 앱의 views.py 설정

  • main > views.py
from django.shortcuts import render, redirect
​
# Create your views here.
def index(request):
   return render(request, "main/index.html")
​
def signup(request):
   return render(request, "main/signup.html")
​
def signin(request):
   return render(request, "main/signin.html")
​
def verifyCode(request):
   return render(request, "main/verifyCode.html")
​
def verify(request):
   return redirect("main:index")  # 인증이 완료되면 메인 화면으로 보내줌
​
def result(request):
   return render(request, "main/result.html")
​
​

 

  • sendEmail > views.py

  urls.py 에서 views.py에 연결해 준 함수 send 를 생성한다.

from django.shortcuts import render
from django.http import HttpResponse
​
# Create your views here.
def send(receiverEmail, verifyCode):
   return HttpResponse("sendEmail, send function!")

 

  • calculate > views.py

  urls.py 에서 views.py에 연결해 준 함수 calculate 을 생성한다.

from django.shortcuts import render
from django.http import HttpResponse
​
# Create your views here.
def calculate(request):
   return HttpResponse("calculate, calculate function!")

 

  • main > views.py

  urls.py에서 views.py로 연결해준 함수 index, signup, signin, verifyCode, verify, result를 생성한다.

from django.shortcuts import render, redirect
​
# Create your views here.
def index(request):
   return render(request, "main/index.html")
​
def signup(request):
   return render(request, "main/signup.html")
​
def signin(request):
   return render(request, "main/signin.html")
​
def verifyCode(request):
   return render(request, "main/verifyCode.html")
​
def verify(request):
   return redirect("main:index")  # 인증이 완료되면 메인 화면으로 보내줌
​
def result(request):
   return render(request, "main/result.html")
​

9.  결과화면 출력 확인

runserver 커맨드를 실행하여 아래와 같이 결과화면이 잘 출력되는지 확인한다.

 python manage.py runserver

 

결과 화면