python과 flask를 사용해서 간단한 웹사이트를 만들고 외부 API를 사용하여 데이터 흐름을 만들어 보았다.
php도 사용해서 데이터를 화면상에 원하는 모양으로도 출력해보았다.
문제는 flask가 나쁜 웹프레임워크는 아니지만, 사용자 인증, 세션 관리, 폼 처리, 데이터베이스 관리 등의 기능을 일일히 구현해주거나 코드로 작성해야 하는게 생각보다 따져야할게 많다.
무엇보다 보안에 관련하여 미리 세팅되어 있는것들이 많아 관리하기가 편하다.
Django는 MVC(Model-View-Controller) 아키텍처를 기반으로 하는데, 애플리케이션(웹)을 3가지 부분으로 나눠서 만들어진다.
1. 모델(Model): 데이터베이스와 관련된 로직을 처리하는 부분. 데이터베이스 테이블을 정의하고, 데이터를 검색, 저장, 수정, 삭제한다. 2. 뷰(View): 사용자에게 보여지는 부분. 웹 페이지의 내용을 동적으로 생성하고, 사용자의 요청을 처리하여 적절한 응답을 보여준다. 3. 컨트롤러(Controller): 사용자의 요청을 받아서 해당하는 뷰를 호출하고, 데이터를 모델로부터 가져와서 뷰에 전달하는 부분. 사용자의 입력을 검증하고, 필요한 처리를 수행한다. |
이렇게만 보면 헷갈리므로 간단한 예시를 들어보자, 예를 들어 "로그인 페이지"를 구성한다고 가정해보자.
1. 사용자가 로그인 페이지에 접속. (naver.com/login)
2. View에서 사용자의 요청을 받고, 로그인 페이지를 보여준다. (ID , PW를 입력하는 칸이 있는 페이지)
3. 사용자는 로그인 정보(아이디, 비밀번호)를 입력하고 "로그인" 버튼을 클릭. (입력 후 로그인 버튼 클릭)
4. View는 사용자의 요청을 Controller로 전달. (로그인 버튼을 누르면 컨트롤러에게 "ID랑 PW를 전달한다")
5. Controller는 사용자가 입력한 로그인 정보를 받아 Model에게 전달. (컨트롤러가 모델에게 전달)
6. Model은 받은 로그인 정보와 데이터베이스에 저장된 정보를 비교. (모델은 DB를 열어서 입력 정보와 데이터베이스 정보를 비교한다)
7. 만약 로그인 정보가 일치한다면, Model은 인증 성공을 전달.(컨트롤러에게 "입력된 정보가 DB와 일치하는지 여부를 전달한다")
8. Model은 사용자의 인증 상태를 유지하기 위해 세션을 생성. (세션은 나중에 설명하겠지만, 롯데월드 입장시 손목에 차는 입장밴드 같은거다.)
9. Controller는 인증 성공을 받아 View에게 전달. (전달받은 로그인 성공 또는 실패를 View에게 다시 전달)
10. View는 인증 성공을 받아 사용자를 로그인 상태로 전환. (로그인 성공하면 성공 페이지로 가고, 실패하면 다시 로그인 페이지로 가거나 특정 동작을 실행합니다->N번 실패시 계정잠금 같은거를 실행한다.)
모든 웹은
DB <-> 백엔드 <-> 프론트 엔드 |
가 기본적인 형태이고 Model은 데이터를 전체적으로 처리하고, View는 화면에서의 모든 동작을 담당한다, 컨트롤러는 view와 model사이에서 경우의 수를 따져서 개발자 입력한 동작을 수행하는 부분이라고 보면 된다.
더불어 Django는 세션관리, URL 라우팅, 전세계의 수많은 능력자들이 만들어준 템플릿, 폼 처리 기능을 내장하고 있고, 어드민 페이지가 기본으로 있어서 사용자 관리하기가 매우 편하다.
일단 설치부터 하자.
1) pip install django
2) django-admin startproject my_project
3) cd my_project
4) python manage.py migrate (만일 안된다면 python3로 해보면 된다.)
5) python manage.py runserver
6) python manage.py startapp main
7) vi settings.py -> 해당 경로로 직접 가서 메모장 편집을 해도 된다. (my_project/settings.py 를 수정해야 한다.)
8) settings.py의 INSTALLED_APPS를 아래와 같이 수정한다. 맨 아래에 'main', 추가 (i를 누르면 편집 모드고, 수정 후 esc -> !wq 를 입력하여 저장하면서 종료 하자)
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'main', ] |
9) mkdir main
10) cd main
11) mkdir templates
12) cd templated
13) mkdir main
14) cd main
15) vi index.html (사이트 접속시의 가장 먼저 표시되는 화면을 만들어주자)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>장고장고장고</title>
</head>
<body>
장고의 메인페이지 html입니다.
</body>
</html>
16) cd ..
17) cd ..
18) vi views.py (main/views.py)를 수정해야 한다.
from django.shortcuts import render # Create your views here. def index(request): return render(request,'main/index.html') |
19) vi urls.py (main/urls.py)를 만들어 준다.
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ] |
20) python manage.py runserver (위에서 이미 실행했으면 따로 실행을 다시 안해도 된다.)
이후 기본 페이지인 http://localhost:8000를 url에 입력하면 화면이 뜬다.
![]() |
끝.
'프로그래밍 > Python' 카테고리의 다른 글
왜 가상환경을 만들어야 하는데? (1) | 2023.10.06 |
---|---|
[python,tistory,github actions]매일 구글 트랜드 키워드 Top 10을 사용하여 뉴스글 자동 생성하기 -1(계획) (0) | 2023.10.04 |
[selenium 셀레니움]카X오 로그인 하기 (0) | 2023.09.15 |
[selenium 셀레니움]네이버 로그인시 자동방지 이미지 안뜨게 우회하기 (0) | 2023.09.13 |
[selenium]셀레니움 설치시 chrome driver를 못 찾을때 (0) | 2023.09.13 |