Python

Django - ExcelCalCulator_5

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 글

Step 02 - 파일 업로드 하기

  • 로그인을 통해 메인 화면으로 왔다면, 파일 업로드 기능 구현

Step 03 - 파일 업로드 기능 구현

check - 1 : index.html 구현

  • 파일 경로 : ExcelCalculate > main > templates > main > index.html
  • 파일 제출 버튼을 눌렀을 때 가려는 url을 등록한다.
  • 또한 enctype="multipart/form-data" 를 추가한다.
    • 이것을 사용해야 파일의 내용이 올바르게 전달된다.
        <div class="content">
            <div class="fileInputDiv">
                <form action="**calculate/**" method="POST" enctype="multipart/form-data">{% csrf_token %}
                    <div class="input-group">
                        하단 버튼을 통해 파일을 업로드 해주세요.(.xls 확장자의 파일만 가능합니다.)<br>
                        <input id="fileInput" name="fileInput" type="file" class="form-control">
                        <input type="submit" class="btn btn-success btn-lg" value="파일 제출">
                    </div>
                </form>
            </div>
        </div>
  • calculate/ 경로는 초기에 ExcelCalculate > ExcelCalculate > urls.py에서 이미 설정해놨다.
    • 링크 참조 :
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('email/', include('sendEmail.urls'), name="email"), 
    path('calculate/', include('calculate.urls'), name="calculate"),
    path('', include('main.urls'), name="main"),
    path("admin/", admin.site.urls),
]
  • ExcelCalcalculate > calculate > urls.py 에서도 이미 설정을 해놨다.
from django.urls import path
from . import views

urlpatterns = [
    path('', views.calculate, name="calculate_do"), 
]

check - 2 : views.py 구현

  • 파일 경로 : ExcelCalculate > calculate > views.py
  • 이 때, request.POST가 아닌 request.FILES를 이용한다.
# Create your views here.
def calculate(request):
    file = request.FILES['fileInput']
    print("# 사용자가 등록한 파일의 이름: ", file)
    return HttpResponse("calculate, calculate function!")

check - 3 : 테스트

  • 이제 data.xlsx 파일을 업로드 한다.
  • 파일 제출 버튼을 누를 시, 웹에서는 정상적으로 calculate, calculate function! 출력이 되어야 하고 터미널에서는 아래와 같이 print() 문구가 나와야 한다.

Untitled

Django - ExcelCalCulator_4

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 글

Step 02 - 로그인 기능 구현

  • 로그인된 사용자만 이용할 수 있도록 구현
  • 이 때, 현재 사용자가 로그인된 사용자인지 판단하려고 세션 사용
  • 회원 가입 통한 과정 이외에도 정상적인 로그인 과정에서도 세션 처리 진행

Step 03 - 로그인 처리 구현

check - 1 : signin.html 구현

  • 파일 경로 : ExcelCalculate > main > templates > main > signin.html
                <h3>안녕하세요. 로그인을 진행해주세요.</h3><br>
                <form action="signin/login" method="POST">{% csrf_token %}
                    <div class="input-group">

check - 2 : urls.py

  • urls.py에서도 처리해준다.

Django - ExcelCalCulator_3

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 글

Step 02 - 인증하기 구현

  • 자신의 이메일로 발송된 인증 코드를 입력한 후, “인증하기” 버튼을 누르면, main app[views.py](http://views.py) 파일에 만들어 놓은 verify 함수로 오도록 설정한다.
    • verifyCode.html url을 설정한다.
    • 파일 경로 : ExcelCalculate > main > templates > main > verifyCode.html
    • 46번 줄의 form 태그 action 값을 verify로 설정
                <h3>이메일로 전송된 메일의 인증코드를 입력해주세요.</h3><br>
                <form action="verify" method="POST">{% csrf_token %}
                    <div class="input-group">
  • 이번에는 main app > views.pyverify 함수를 구현한다.
    • 사용자가 입력한 code 값을 받아왔고, 쿠키에 저장된 code 값을 가져온다.
    • 두 값을 비교해 일치할 때는 해당 사용자의 user_validate 값을 1로 변경시켜준다.
    • user의 user_validate 값은 1로 변경시켜 준 후, 해당 변경 사항을 저장한다.
    • 한번 더 쿠키 값을 세팅하려고 redirect 함수에 메인 화면을 넘겨 준 결괏 값은 response로 받아와서 해당 response에 대해 이전에 설정한 2개의 쿠키값을 삭제하고, 로그인된 유저의 정보를 쿠키로 설정하며 response를 반환해 준다.
    • 만약 두 값이 일치하지 않는 경우, 다시 인증 코드 입력 화면으로 redirect 시켜 준다.
    • 코드 구현 후, 회원 가입을 재 진행한다. 이메일로 전송된 인증 코드를 입력 한다.
from django.shortcuts import render, redirect
from random import * 
from .models import *
from sendEmail.views import *

# Create your views here.
def index(request):
	# 생략

def signup(request):
	# 생략

def join(request):
	# 생략

def signin(request):
	# 생략

def verifyCode(request):
	# 생략

def verify(request):
    user_code = request.POST['verifyCode']
    cookie_code = request.COOKIES.get('code')
    if user_code == cookie_code:
        user = User.objects.get(id = request.COOKIES.get('user_id'))
        user.user_validate = 1
        user.save()
        
        response = redirect('main_index')
        response.delete_cookie('code')
        response.delete_cookie('user_id')
        response.set_cookie('user', user)
        return response
    else:
        return redirect('main_verifyCode')

def result(request):
	# 생략
  • 인증이 이루어진 과정은 아래와 같다.

Untitled

Django - ExcelCalCulator_2

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 글

Step 02 - 이메일 인증으로 회원 가입

  • 절차는 다음과 같다.
    • 회원 가입 화면에서 개인정보 입력 후 회원 가입하기 버튼 클릭 때 해당 정보로 유저 데이터 생성 및 DB에 저장, 이 때 인증되지 않은 유저로 등록
    • DB에 저장 후, 입력한 이메일로 인증 코드 발송
    • 발송된 인증 코드는 유저 이름과 함께 쿠키로 저장 후 인증 코드 입력 화면으로 전환
    • 인증 코드 입력 화면에서 인증 코드 입력 후 인증하기 버튼 클릭 때 입력된 코드와 쿠키에 저장된 인증 코드 비교 후 회원 성공/실패 처리
    • 성공 때는 회원의 인증 값을 true 로 설정, 실패 때 해당 회원정보 삭제

Step 03 - DB 설정

  • 사용자 정보를 저장할 수 있는 모델을 만들어야 한다.
  • 회원 가입 시 필요한 기본 정보 : 이름, 이메일, 비밀번호, 그리고 사용자의 인증여부를 체크해 주는 정보를 가지게 된다.
    • 파일 경로 : ExcelCalculate > main > models.py
from django.db import models

# Create your models here.
class User(models.Model):
    user_name = models.CharField(max_length = 20)
    user_email = models.EmailField(unique=True)
    user_password = models.CharField(max_length=100)
    user_validate = models.BooleanField(default=False)
  • User 모델을 정의했다면, 이를 반영하기 위해서 아래 명령어들을 통해 migrations 파일을 만들고 migrate 한다.
$ python manage.py makemigrations
Migrations for 'main':
  main\migrations\0001_initial.py
    - Create model User
$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, main, sessions
Running migrations:
  Applying main.0001_initial... OK

Step 04 - 회원가입 url 설정

  • 회원 가입 때 사용자 데이터를 저장하기 위해, 먼저 signup.html 에서 회원 가입 버튼 클릭 때 이동할 url 설정을 하도록 한다.

Django - ExcelCalCulator_1

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - Github Repo 생성

  • 아래와 같이 Github Repo를 생성한다.

Untitled

Step 02 - 가상환경 생성 및 라이브러리 설치

  • virtualenv 명령어를 활용하여 가상환경을 설치한다.
  • 실행 경로 : ExcelCalculate-with-Django
$ virtualenv venv
created virtual environment CPython3.9.13.final.0-64 in 2305ms
  creator CPython3Windows(dest=C:\Users\j2hoo\OneDrive\Desktop\ExcelCalculate-with-Django\venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\j2hoo\AppData\Local\pypa\virtualenv)
    added seed packages: pip==23.1.2, setuptools==68.0.0, wheel==0.40.0
  activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
  • 가상환경 접속 방법은 Windows와 Mac/Linux 계열이 다르다.

네이버 API 사용 신청 (2023 Aug)

개요

  • 크롤링을 위해 네이버 API 사용을 신청해본다.

Step 01 - 사이트 접속

Untitled

Step 02 - 로그인

  • 화면 우측 상단에서 로그인을 진행한다.

Step 03 - API 이용신청 및 Application 등록

  • 상단 메뉴에서 Application 클릭 후, 내 애플리케이션을 클릭한다.

Untitled

  • 확인 버튼을 클릭한다.

Untitled

  • 이용약관에 동의한다.

Untitled

  • 계정 정보를 등록 및 휴대폰 인증을 진행한다.

Untitled

  • 애플리케이션을 등록한다. (아무이름을 작성한다)
  • 개인 PC로 접속하기 위해 WEB 설정 - localhost를 입력한다.
  • 사용 API는 여기에서는 간단하게 검색만 지정한다.

Untitled

윈도우 우분투 가상 환경 설치 (feat.chocolatey)

개요

  • 크롤링 교재에서 윈도우에 우분투 가상 환경을 설치하는 부분이 있어서 실제로 잘 되는지 테스트를 해보았다.
  • 향후 교재를 활용한다면, 해당 가상환경에서 진행 하는 것도 고려할 수 있다.
  • 가상환경은 vagrant를 활용했다.

교재

  • 파이썬을 활용한 크롤러 개발과 스크레이핑 입문

Untitled

Step 01. Chocolatey 설치

  • 윈도우에서 많이 활용되는 패키지 매니저가 바로 Chocolatey 이다.
  • 먼저 3가지를 확인해야 한다.
  • 첫번째 PowerShel이 설치 되어 있어야 하며, 최소 지원 버전은 3이다.
    • PowerShell 버전 확인
    • PowerShell 탭을 열고 $PSVersionTable 명령어를 실행한다.
PS C:\Users\j2hoo> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.22621.1778
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.1778
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Untitled

Django Gmail 발송 예제 (2023년 버전)

개요

  • 최근 django 강의를 진행하면서, Gmail로 이메일을 발송 하는 예제에서 인증 코드 진행하는 부분이 오래된 것을 확인
  • 업그레이드 된 버전을 소개한다.

가상환경 및 django 라이브러리 설치

  • 먼저 빈 폴더를 생성 후, 가상환경을 생성한다.
  • (옵션) virtualenv 라이브러리 미 설치 시
$ pip install virtualenv
  • 기 설치가 되어 있다면 아래 코드를 순차적으로 실행한다.
$ virtualenv venv
$ source venv/Scripts/activate
  • 가상환경에 접속해 있다면 django를 설치 한다.
$ pip install django

장고 프로젝트 및 앱 설치

  • 이제 장고 프로젝트를 설정한다.
$ django-admin startproject djangogmail
  • 이제 해당 프로젝트 폴더에서 1개의 app을 만들어준다.
$ cd djangogmail/
$ python manage.py startapp main
  • 앱을 등록해준다.
    • 파일 경로 : djangogmail > djangogmail > settings.py
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "main"
]
  • runserver를 실행하여 장고 기본 화면이 나오는지 확인한다.
$ python manage.py runserver

Untitled

Django Project ToDoList - 5

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 내용 확인

Step 02 - 데이터 삭제 방법 개요 및 HTML 수정

  • 완료 버튼을 눌렀을 시, 데이터를 삭제하는 기능을 구현한다.
  • HTML 코드를 살펴보면 완료 버튼이 존재한다.
    • 완료 버튼을 클릭할 때, form 태그 내에 있는 input 태그의 값이 함께 넘어오고, inputvalue 값을 이용해 DB에서 알맞은 데이터를 찾아 삭제한다.
          <div class="toDoDiv">
                <ul class="list-group">
                    {% for todo in todos %}
                    <form action="" method="GET">
                        <div class="input-group" name='todo1'>
                            <li class="list-group-item">{{ todo.content }}</li>
                            <input type="hidden" id="todoNum" name="todoNum" value="{{ todo.id }}"></input>
                            <span class="input-group-addon">
                                <button type="submit" class="custom-btn btn btn-danger">완료</button>
                            </span>
                        </div>
                    </form>
                    {% endfor %}
                </ul>
            </div>
  • form 태그의 action은 아직 정의되지 않았는데, 완료 버튼을 클릭 시, form 태그의 action값을 설정하도록 한다.

Django Project ToDoList - 4

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 내용 확인

Step 02 - 남은 과제

  • 사용자가 입력한 문자열을 데이터베이스에 저장하기
  • DB에 저장된 내용을 보여 주기

Step 03 - 모델에 데이터 저장

  • 먼저, my_to_do_app 폴더에 있는 [views.py](http://views.py) 파일에서 model을 사용하려면 [models.py](http://models.py) 파일을 불러와야 한다.