웹의 동작 순서와 개념
클라이언트: 요청을 보내는 곳으로 주로 나 혹은 내 컴퓨터를 뜻한다.
서버: 요청을 받아서 응답(처리)하는 곳으로 웹 페이지에 무언가를 요청하면 (로그인을 요청한다든지 등) 그 후 이루어지는 과정들을 뜻한다.
API: 데이터를 어떻게 주고 받을지 정한 약속을 의미한다. 예를 들어, 블로그에 게시물을 작성할 때 '블로그 ip/post 생성' 이라고 게시글 작성을 서버에 요청하게 될 것이다. 즉, 모든 요청은 API를 통해 수행된다고 볼 수 있다.
정리하자면 클라이언트는 손님, 서버는 서비스를 제공하는 사람(요리사, 웨이터 등등), API는 주문서 라고 볼 수 있다.
Python 문법 정리
1. 변수 선언
name="songhee" # 문자열(str)형
age=25 # 정수(int)형
2. split() 메소드로 문자열 나누기
favorite_fruit = "사과,복숭아,자두"
favorite_fruit = favorite_fruit.split(",")
print(favorite_fruit)
3. list
hobby = ["게임", "음악 감상"] # 리스트 선언
print("기존 리스트:", hobby, end="\n")
for i in range(len(hobby)):
print(str(i), "번째 인덱스에 들은 값:", hobby[i])
print()
hobby.append("넷플릭스 감상") # '넷플릭스 감상' 원소 추가
print("변경된 리스트:", hobby, end="\n")
for i in range(len(hobby)):
print(str(i), "번째 인덱스에 들은 값:", hobby[i])
4. dictionary
my_info = {"name": "송희", "age": 25, "hobby": hobby}
print("내 정보:", my_info)
print("내 이름:", my_info.get("name"))
print("내 나이:", my_info.get("age"))
print("내 취미:", my_info.get("hobby"))
5. 조건문
my_age = 25
if my_age == 25:
print("맞아요 저는 25살이에요")
else:
print("틀렸지롱~")
6. 반복문
print("구구단을 외자~ 구구단을 외자~ 1단!!")
for i in range(1, 10):
print("1 x", str(i), "=", str(i))
7. 함수
one = 1
two = 2
def num_sum(num1, num2):
return num1+num2
three = num_sum(one, two)
print("one =", str(one), "이고, two =", str(two), "니까, three =", str(three), "겠구나!")
8. 클래스
class personInfo:
name = ""
age = 0
hobby = ""
my_info = personInfo()
my_info.name = "송희"
my_info.age = 25
my_info.hobby = "게임하기"
friend_info = personInfo()
friend_info.name = "은비"
friend_info.age = 25
friend_info.hobby = "쇼핑하기"
print("제 이름은", my_info.name, "이고, 제 나이는", str(my_info.age), "이며, 제 취미는", my_info.hobby, "입니다.")
print("제 친구의 이름은", friend_info.name, "이고, 제 친구의 나이는", str(friend_info.age), "이며, 제 친구의 취미는", friend_info.hobby, "입니다.")
Python의 웹 프레임워크
웹 프레임워크는 '개발을 도와주는 틀'이라고 이해를 하면 된다. 틀이라는 것은 결과물을 일정한 형태로 만들 수 있도록 해주는 것이다. 웹 프레임워크도 마찬가지로 우리가 어떠한 완성된 형태를 만드는 것을 도와주는 역할을 한다.
Python의 프레임워크에는 여러 종류가 있는데 그 중 대표적인 2가지가 Flask와 Django이다. 둘의 차이점을 간단하게 설명하자면 Flask는 서버를 만들기 위한 최소한의 기능만을 제공하고, Django는 이미 다양한 기능을 제공하고 있다. 예를 들어, Flask는 DB와 같은 기능을 직접 추가해주어야 하지만 Django는 이미 DB나 비밀번호 암호화와 같은 기능이 추가되어 있는 셈이다.
Django의 MVT 패턴
Model: 데이터의 저장, 수정, 삭제 등이 일어나는 DB 부분
View: 프로그램이 동작하는 부분, 요청과 응답 사이에 발생하는 서비스가 존재하는 부분 (로직 부분)
Template: 사용자에게 보여지는 화면 (UI 부분)
Django 프로젝트 생성해보기
1. 아무것도 작성하지 않고 기본 템플릿을 실행
2. 화면에 글자 띄우기
우선, views.py에 다음과 같이 작성해준다. 띄우고자 하는 문구를 HttpResponse()의 괄호 안에 적어준다.
# views.py
from django.http import HttpResponse
def base_response(request):
return HttpResponse("안녕하세요! 장고의 시작입니다!")
그 다음, urls.py를 다음과 같이 작성해준다.
# urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('test/', views.base_response,name='first_test'),
]
이렇게 되면, http://127.0.0.1:8000/test/ 라는 로컬호스트 주소에 원하는 문구가 띄워지게 된다.
3. html 파일 띄우기
html 파일은 다음과 같이 간단하게 작성하였다.
<!-- my_test.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>테스트 페이지</title>
</head>
<body>
<h3>테스트 페이지 입니다! 장고를 사용했어요!</h3>
</body>
</html>
views.py에 my_test.html 파일을 연결해주는 함수 코드를 작성한다.
# views.py
from django.shortcuts import render
def first_view(request):
return render(request, 'my_test.html')
그 다음, urls.py에 원하는 주소를 설정하고, 해당 주소에 띄울 파일을 선택하는 코드를 작성해준다.
# urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('first/', views.first_view,name='first_view'),
]
이렇게 되면, http://127.0.0.1:8000/first/ 라는 로컬호스트 주소에 원하는 html 파일이 열릴 것이다.
Django로 사용자 및 게시글 관리가 가능한 프로젝트 생성하기
사용자 관리 기능을 추가하기 위해 터미널에 다음과 같이 작성해준다.
django-admin startapp user
마찬가지로 게시글 관리 기능을 추가하기 위해 터미널에 다음과 같이 작성해준다.
django-admin startapp tweet
입력하고 나면 다음과 같이 각각의 앱이 생성된 것을 확인할 수 있다.
user 앱의 경우 사용자의 로그인, 회원가입, 로그아웃 기능을 수행하고, tweet 앱의 경우 게시글 생성, 삭제, 수정, 댓글 기능을 수행한다. 이제 각각의 앱의 역할을 정했으므로 settings.py를 수정하여 생성한 앱들을 Django에 알려준다. settings.py를 보면 INSTALLED_APPS 라는 배열이 존재하는데, 해당 배열 안에 user와 tweet을 추가해주면 된다.
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user',
'tweet'
]
이제 DB를 연결해주도록 한다. Django는 자동으로 DB와 연동을 해준다. Django 프로젝트를 실행하게 되면 db.sqlite3 이라는 파일이 생성된 것을 확인할 수 있다.