[패스트캠퍼스python] 장고프로젝만들기 전체 순서/흐름도(ft.쇼핑몰)

[패스트캠퍼스python] 장고프로젝만들기 전체 순서/흐름도(ft.쇼핑몰)

차근차근 순서대로 Django와 python으로 쇼핑몰을 만들어보자.

1. Django 가상환경설정

  1. 가상환경 virtualenv 설치하기 : pip3 install virtualenv
    • 가상환경은 첫 사용시 한번만 설치하면 된다. 이미 설지채놓았다면 2번 가상환경 폴더만들기부터 진행하면된다.
    • virtualenv는 일반적으로 글로벌 설치가 되어야하는 유일한 패키지이다. 나머지 패키지들은 가상 환경에 설치하기때문이다.
Read More
[패스트캠퍼스python] 게시판만들기

[패스트캠퍼스python] 게시판만들기

파이썬 인강 자기계발 챌린지 35회차 미션

게시판만들기위해선 순서가 있다.

  1. html파일로 화면그리기
  2. board 폴더안에 있는 views.py에서 함수 만들기
  3. board 폴더안에 urls.py 생성하기
  4. 프로젝트명과 동일한 폴더하위의 urls.py에 연결하기
  5. board 폴더안에 있는 models.py에서 코드작성하기
Read More
[패스트캠퍼스python] 상속, Django form기능

[패스트캠퍼스python] 상속, Django form기능

파이썬 인강 자기계발 챌린지 34회차 미션

1. 상속

지금까지 회원가입페이지와 로그인페이지를 만들어보았다.
html코드를 보면 알겠지만 두 페이지가 body태그빼고 똑같다.
이럴땐 하나의 템플릿을 만들고 상속을 이용해야한다.

왜냐고?
개발자라면 중복되는 코드는 어떻게든 줄이고싶은 마음이 단전에서부터 부글부글 끓어올라야하기 때문이다!ㅋㅋㅋ

Read More
[패스트캠퍼스python] 세션session, 로그인화면만들기

[패스트캠퍼스python] 세션session, 로그인화면만들기

파이썬 인강 자기계발 챌린지 33회차 미션

1. 세션 Session

웹사이트 로그인 기능을 만들기위해 꼭 필요하면서도 중요한 개념인 세션에 대해 알아보자.

구조 설명
클라이언트 웹브라우저
쿠키 서버별 저장소
서버 서버
데이터베이스 클라이언트별 저장소
Read More
[패스트캠퍼스python] 회원가입페이지만들기2 비밀번호일치여부확인

[패스트캠퍼스python] 회원가입페이지만들기2 비밀번호일치여부확인

파이썬 인강 자기계발 챌린지 32회차 미션

1. 비밀번호와 비밀번호확인값 데이터베이스에 넣기

원래 프론트앤드에서 주로 담당하지만 백엔드로도 만들 수 있다.
기본 코드는 앱 하위 view.py파일에서 아래 코드를 작성한다.

  1. request를 가져오는 방식에느 get과 post가 있다.
  2. post일때 회원가입페이지이므로 register.html 파일에서 input태그마다 붙여준 name값을 키로 가지고와서 함수를 실행시킨다.
  3. fcuser에 입력값을 생성하기 위해서는 기존의 clas fcuser를 상단에 import해야한다 -> from .models import Fcuser
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from django.shortcuts import render
from .models import Fcuser #새로운 import

def register(request):
if request.method == "GET":
return render(request, 'register.html') #연결하고싶은 파일의 경로
elif request.method == "POST":

#회원가입하는 코드작성 -> register.html파일에서 name값을 키로해서 함수진행
username = request.POST['username']
password = request.POST['password']
re_password = request.POST['re-password']

#fcuser생성 -> fcuser를 사용하기 위해서 기존의 clas fcuser를 import해야한다
fcuser = Fcuser( #객체를 생성해서 저장
username=username,
password=password
)

fcuser.save()

return render(request, 'register.html') #연결하고싶은 파일의 경로

회원가입페이지에서 값들을 입력하고 등록버튼을 누르면 빤짝하고 아래 이미지처럼 모든 값들이 리셋되어진다.

어떠한 변화가 생긴걸까?
위의 코드의 함수가 실행되었지만 입력값들이 post로 들어왔기때문에 elif문을 실행해주고 마지막에 render가 ‘register.html’를 호출했기때문에 페이지사의 변화는 없어보일뿐 데이터는 데이터베이스에 저장되어있다.




2. 비밀번호와 비밀번호확인입력값이 일치하는 지 확인

일치여부는 if문으로 간단하게 나타낼수있다.
앱 하위의 views.py에서 아래 코드를 작성하면된다

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
from django.shortcuts import render
from .models import Fcuser
from django.http import HttpResponse #새로운 import

def register(request):
if request.method == "GET": #기존회원로그인
return render(request, 'register.html')
elif request.method == "POST": #회원가입
username = request.POST['username']
password = request.POST['password']
re_password = request.POST['re-password']

#비밀번호와 비밀번호확인일치여부
if password != re_password:
return HttpResponse('비밀번호가 다릅니다')
# HttpResponse를 사용하기위해 파일 상단에 import시켜준다

fcuser = Fcuser(
username=username,
password=password
)

fcuser.save()

return render(request, 'register.html')

기존이 회원가입페이지내용이 다 사라져버려서 유저입장에서 불편하다.
따라서 기존 코드에서 더 나아가보자.

기존 register()함수에서 res_data = {} 변수를 생성하여 불일치의 경우의 데이터를 변수에 담는다.
함수가 끝나가는 마지막라인에서 변수 res_data도 함께 return해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def register(request):
if request.method == "GET":
return render(request, 'register.html')
elif request.method == "POST":

#회원가입하는 코드작성 -> 앞에서 만든 네임값을 키로해서 진행
username = request.POST['username']
password = request.POST['password']
re_password = request.POST['re-password']

#비밀번호와 비밀번호확인일치여부
res_data = {} #불일치의 경우 데이터를 res_data라는 변수에 담는다.
if password != re_password:
res_data['error'] = '비밀번호가 다릅니다'


fcuser = Fcuser(
username=username,
password=password
)

fcuser.save()

return render(request, 'register.html', res_data)

위 코드이 변수res_data가 return할 값이 출력되어야하기때문에 register.html error가 출력된 수 있도록 코드를 추가해야한다.
에러코드가 나타나길 원하는 위치에 {{ error }}를 작성해주면 끝!

1
2
3
4
5
<div class="row">
<div class="col-12">
{{ error }}
</div>
</div>

[패스트캠퍼스python] 부트스트랩을 이용한 회원가입페이지만들기, csrf token

[패스트캠퍼스python] 부트스트랩을 이용한 회원가입페이지만들기, csrf token

파이썬 인강 자기계발 챌린지 31회차 미션
부트스트랩을 이용해 회원가입페이지를 만들어보자

1. 부트스트랩 설정

앱 아래에 만들어놓은 templates폴더안에 register.html 파일을 생성한다.
그 뒤 부트스트랩 홈페이지로 이동한다.

  1. head태그안에 부트스트랩 CSS를 복붙한다.
  2. head태그안에 부트스트랩 JS를 복붙한다.
  3. head태그안에 아래 기본 meta코드를 복붙한다.
1
2
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

또는

  1. 위의 3단계를 생략하고 부트스트랩 Starter template를 복붙해도 된다!




2. Bootstrap’s form styles 적용하기.

부트스트랩 컴포넌즈 폼에서 form태그를 복붙해온뒤 센터정렬이라든지 커스터마이징을 할수있다.
부트스트랩의 기본 폼스타일은 아래 이미지와 같다.
딱 심플 그자체!

기본 폼 스타일에서 커스터마이징을 해보자.
input태그를 추가하여 비밀번호 확인을 만들 수 있다.
input태그를 추가한 후 python manage.py runserver명령어를 입력한 뒤 주소창에 register/를 추가입력해주면 커스터마이징한 웹페이지가 나타난다.




3. html페이지를 view에 연결하기

부트스트랩으로 만든 html페이지를 view에 연결을 해줘야한다.
앱 아래의 views.py파일에서 아래 코드를 입력한다.

view는 항상 request라는 매개변수를 받기때문에 입력을 해주어야한다.

1
2
3
4
from django.shortcuts import render

def register(request):
return render(request, 'register.html') #따옴표안에 연결하고싶은 파일의 경로입력




4. url설정

  1. 앱 하위에 urls.py파일을 생성한 뒤 아래 코드를 입력해준다
    register는 3번에서 만든 views안의 register함수를 연결해준 것이다.
1
2
3
4
5
6
7
from django.urls import path
from . import views

urlpatterns = [
path('register/', views.register),
#register는 views안의 register함수에 연결하겠다는 의미
]
  1. 프로젝트폴더의 동일한 이름으로 자동생성된 파일 하위의 urls.py를 클릭한다.
    urls.py에서 path('앱명/', include('앱명.urls')) 한줄을 추가한다.
    추가한 뒤 전체코드는 아래와 같다.
1
2
3
4
5
6
7
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('앱명/', include('앱명.urls'))
]
  1. python3 manage.py runserver 실행.
    잘 연결되었는지 확인을 위해 python3 manage.py runserver를 실행한다.




5. csrf_token

장고를 이용하면 꼭 넣어야하는 코드이고 항상 form태그 안에 위치해야한다.
form의 겨우 데이터를 서버에 전달하는 역할을 하는데 우리 사이트에서 우리 서버로 데이터를 전송하는 것은 문제될것이 없으나 피싱범죄를 목적으로 자신의 웹사이트에서 전송을 하는 경우가 있다.
이를 방지하기 위해, 즉 크로스도메인을 막기위해 암호화된 키를 숨겨놓는다.

참고링크 : CORS 크로스 도메인 이슈와 해결방법

이 코드를 {% csrf_token %}입력을 해놓으면 장고가 알아서 암호화된 키를 생성하고 키검증까지 자동으로 해준다.

1
2
3
<form method="POST" action=".">
{% csrf_token %}
</form>

여기서 action값을 생략하거나 점(.)을 입력하면 현재페이지 action이 진행된다.
실제 사용예시는 아래와 같다. form태그 밑에 위치하면 된다!

[패스트캠퍼스python] DB에 만든 app 연결, admin페이지 출력 문자열 한글로 변경

파이썬 인강 자기계발 챌린지 30회차 미션

만들어놓은 DB에 내가 만든 앱 연결해보자.
이는 admin.py를 이용해서 진행해야한다.

1. admin.py 작성

데이터를 추가,수정한 뒤 migrate를 한 상태에서 상위 앱폴더에서 admin.py폴더를 찾는다.
그리고 migrate한 models안에 있는 내용을 import해온다.
pass는 아무것도 안하겠다는 의미이다.
그 뒤 아래와 같이 빈 클래스를 만들어 admin에 두가지(Fcuser, FcuserAdmin) 다 등록(register)한다.

1
2
3
4
5
6
7
from django.contrib import admin
from .models import Fcuser

class FcuserAdmin(admin.ModelAdmin):
pass

admin.site.register(Fcuser, FcuserAdmin)

2. python3 manage.py runserver

  1. 명령어입력
    잘 반영되었는지 runserver명령어롤 틍해 실행해보자.
    터미널에 아래 코드들이 출력되고 그 중 http://127.0.0.1:8000/를 ctrl를 누른상태에서 click하면 바로 인터넷창이 오픈된다.
1
2
3
4
5
6
7
8
9
(fcdjango_venv) C:\경로\fc_community>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
June 21, 2020 - 14:47:46
Django version 3.0.7, using settings 'fc_community.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
  1. 주소창에 admin/ 추가입력 후 enter.
    인터넷창이 오픈되면 주소뒤에 admin/을 붙여준다.
    그러면 장고에서 기본적으로 제공하는 site가 출력되면서 로그인페이지가 나타난다.
    아직 첫 아이디를 만들지 않았으므로 인터넷창을 닫아주고 터미널창에 ctrl+c 명령어를 입력하여 돌아가던 server를 멈춰준다.

3. python3 manage.py createsuperuser

  1. manage.py명령어를 통해 첫 user를 생성한다.
    자동적으로 아이디와 이메일주소, 비번과 비번확인 총 4단계의 입력과정을 거치면 드디어 생성!!

  2. 다시python3 manage.py runserver를 통해 http://127.0.0.1:8000/admin/으로 들어가서 방금 생성한 아이디와 비번으로 로그인을 한다.
    그러면 아래와 같이 사이트가 뾰로롱 생성된다.

파란색띠가 app을 나타내며

  • Authentication and Authorization 은 장고에서 제공하는 기본 앱이고
  • 내가 만들었던 fcuser앱이 정상적을 출력되고 그 아래에 만들었던 Fcusers모델이 잘 등록되어있는 것을 확인할 수 있다.
  1. add를 누른뒤 사용자명과 비밀번호를 입력하면 아래 이미지처럼 Fcuser object(1)가 생성되고 그 안에 추가로 만든 사용자명과 비밀번호를 확인할 수 있다.

이렇듯 장고는 데이터베이스를 건들이지않아도 웹페이지에서 데이터베이스를 쉽게 다룰 수 있어 정말 편리하다.
조금 아쉬운 점이 있다면 유저명이 Fcuser object(1) 이렇게 생성되어서 어떤 유저인지 한눈에 확인하기 어렵다. 이를 바꿔주는 설정을 해보자.

4. DB웹상 유저명 보기 쉽게 변경

파이썬에는 기본 문자열을 반환해주는 언더바 두개로 감싼 내장함수( str )를 가지고 있다.
이를 이용하여 문자열을 원하는대로 바꿀수있다.
fcuser앱 아래의 models.py에서 class 안에 아래 코드를 추가해주면된다.

1
2
def __str__(self): 
return self().username

5. DB웹상 다양한 유저정보 출력

원하는대로 Fcuser object(1)에서 유저명으로 변경되었다.
하지만 뭔가 좀 아쉽다.
더 많은 정보들이 한눈에 보였으면 좋겠다. 이럴때 해줄 수 있는 방법이 있다.
fcuser앱 아래의 admin.py에서 class 안에 아래 코드를 추가해주면된다.
password말고도 다양한 내용을 추가입력하면 아래 이미지처럼 한눈에 보기좋게 출력된다.

1
2
class FcuserAdmin(admin.ModelAdmin):
list_display = ('username', 'password') #튜플로 만듬

유저명 위의 카테고리설명줄도 FCUSER -> 사용자명, 비밀번호로 변경된 것을 확인할 수 있다.
이는 처음 클래스를 만들때 verbose_name="비밀번호"속성을 추가했기 때문이다.

6. admin페이지 출력 문자열 변경

admin page에서 만든 fcuser앱의 하위의 fcusers도 변경해보자.
fcuser였는데 s가 붙은 이유는 기본적으로 장고에서는 복수형태로 자동변환해서 출력해주기때문이다.

fcusers가 뭘 뜻하는지 알기 쉽게 한글명으로 변경하려면 fcuser앱 아래의 models.py에서 class안의 class Meta:에서 verbose_name을 속성을 주면 된다.

1
2
3
4
class Meta:
db_table = "fastcampus_fcuser"
verbose_name = "패스트캠퍼스 사용자"
verbose_name_plural = "패스트캠퍼스 사용자"

위에서 말했듯이 장고에서 자동적으로 복수형을 기입하기 때문에 verbose_name_plural입력하지 않는 경우 아래 이미지와 같이 패스크캠퍼스 사용자s라는 한국어에서 듣도보도 못한 문법으로 출력된다ㅋㅋㅋㅋㅋ

[패스트캠퍼스python] 은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다의 윈도우7해결, DB관리

파이썬 인강 자기계발 챌린지 29회차 미션

아래는 강사님이 python3 manage.py makemigrations명령어를 입력하고 난 뒤의 터미널 출력모습이다.

강사님 터미널

그리고 아래 이미지는 내 터미널에서 출력한 모습이다.

그대로 따라한 내 터미널

내가 뭐 터미널에 치는 코드들이 툭하면 자꾸 은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.라는 출력이 떴다.

너무나 빡쳐!!!!

빡치고있는 와중에 구글링해보니 위의 에러는 환경변수에 의해 발생하는 에러라고 한다.
내가 컴퓨터가 두대가 있는데 하나는 윈도우 10을 쓰지만 다른 하나는 윈도우 7를 쓴다.
그래서 두 OS에 python과 vscode 그리고 가상환경을 사용할 수 있는 환경변수 설정방법을 기록하려고 한다

1. python과 vscode 그리고 가상환경을 사용할 수 있는 환경변수 설정방법

1. 윈도우10 환경변수

window키를 누르고 검색창에 고급 시스템 설정 보기를 검색한다. 띄어쓰기에 유의하자.

윈도우10의 환경변수창

윈도우 10의 경우 환경변수를 추가할 수 있게끔 예쁜 GUI가 나온다.
새로만들기를 클릭하고 아래를 추가해준다

  • 변수 값 : C:\Users\파이썬저장한경로\Python\Python38\Scripts;

위의 값은 파이썬에서 가상환경을 사용하기 위한 내용이다.
이 밖에도 python과 vscode를 추가해주면 되는데 사실 프로그램을 다운로드할때 자동적으로 추가가되어있을 것이다.
깔끔하게 해결!!

2. 윈도우7 환경변수 설정

하지만 윈도우7의 경우는 거지같이 나온다.
일단 환경변수 설정에 들어가보자.
window키를 누르고 검색창에 고급 시스템 설정 보기를 똑같이 검색한다. 띄어쓰기에 유의하자.

윈도우 7의 환경변수창

새로만들기를 클릭하고 아래 값을 그대로 입력했다

  • 변수이름 : path
  • 변수 값 : C:\Users\파이썬저장한경로\Python\Python38\Scripts;

왜지? 윈도우10은 리스트에 추가된 행이 바로 나오는데 윈도우7은 전혀 그런게 보이지않았다.
내가 잘못했나?
다시 path의 값 전체를 삭제하고 파이썬의 가상환경을 사용하기위해서 아래를 입력했다.
꼭 자신이 파이썬과 vs code, 가상환경을 다운로드한 경로를 지정해야한다.
C:\Users\파이썬저장한경로\Python\Python38\Scripts\;를 붙여넣었다.

3. 설치위치 찾기

만약 python과 vs code, 가상환경을 어디 설치했는지 경로를 모르겠다면?
걱정 할 필요없다!
window에서 모든 프로그램을 클릭한 후 python을 찾은 뒤 우클릭한다.
그리고 속성을 클릭하면 대상에 경로가 설정되어있다.
그 경로 그대로 복붙하면 된다!

윈도우 7의 환경변수창

그리고 새로만들기를 눌렀는데 아무런 변화가 없다?!?!
그래서 변경을 누르고 기존 path를 아예 삭제하고 다시 등록해보았다.
그.런.데.
알고보니 path의 기존경로는 절대 지우면 안되고 그 뒤에 세미콜론(;)으로 붙여서 입력해야한다는 것이다.
window의 기본 path는 건들면 절대 안된다고 한다!
나는 그것도 모르고… 이미 지워버렸다…
멘붕왔다가 잠시 진정하고 다시 환경변수 기본값을 찾는 여정부터 이어나갔다.

4. 환경변수 기본값 찾기

환경변수의 기본값은 찾는 방법은 아래와 같다.
cmd를 열고 regedit명령어를 입력한다.
레지스트리편집기가 자동으로 open될텐데 아래 위치로 찾아간다.

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Enviroment\Path

그리고 path를 더블클릭하면 변경되기전이 값이 저장되어있다.
복붙해서 환경변수에 한꺼번에 등록했다. 휴- 살았다!


2. Database관리

데이터베이스를 관리해보자.
데이터를 수정,추가한 경우에 항상 1번부터 2번까지 반복을 해주면 데이터베이스버전이 새로 생성되고 관리된다.

  1. python3 manage.py makemigrations명령어를 입력한다
    내 경우에는 ‘python3’은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는배치 파일이 아닙니다.에러가 사라지지않았다…
    하지만 python명령어는 위의 환경변수 세팅을 통해 잘되었으므로 3을 뺀 python manage.py makemigrations를 입력했다. 다행히 성공적으로 create model이 되었다.

  2. python3 manage.py migrate
    위와 마찬가지로 3을 뺀 뒤 실행했더니 잘 진행되었다.

1번과 2번을 통해 우리는 명령어 sqlite3 db.sqlite3등을 이용하여 직접 sqlite를 만질 필요가 없다. 왜냐면 장고가 다 알아서 데이터베이스의 테이블을 자동으로 생성해주기때문이다.

M계층 DB관리

[패스트캠퍼스python] 프로젝트와 앱의 차이, 템플릿생성, 프로젝트에 앱등록하기,Class생성, class Meta

파이썬 인강 자기계발 챌린지 28회차 미션

1. 새로운 프로젝트 생성하기 : django-admin startproject 새로운프로젝트명

장고 설치가 완료되면 django-admin 명령어를 사용할 수 있다.
django-admin startproject fc_community를 통해 fcdjango_venv 아래에 fc_community 프로젝트가 만들어지고 안에 기본적인 내용들이 자동생성된다. 짜라란~

2. app생성하기 : django-admin startapp 새로운앱명

django-admin startapp board명령어를 통해 fcdjango_venv 아래에 board라는 새로운 앱이 생성되어지고 models과 view게층이 자동적으로 생성된다.

3. project와 app의 차이점

그렇다면 startproject명렁어와 startapp명령어의 차이점이 무엇일까?

위의 두가지 명령어로 자동생성된 파일들을 보자.

startproject와 startapp 차이

1번 빨간색은 startproject명렁어를 통해 자동생성된 파일들이다.
2번 파란색은 startapp명령어를 통해 자동생성된 파일들이다.

  • 프로젝트는 앱 한개 이상을 담을 수 있고 관련된 configuration도 함께 담아 하나의 웹사이트를 구성한다.

  • 은 뷰계층과 모델게층을 묶어서 제공하며 하나의 웹앱기능만 담당한다. 또한 app은 프로젝트 A, B, C, D등등 동시에 여러 프로젝트에 포함될 수 있다.

4. templates생성

MTV모델링을 하기 위해서는 템플릿폴더를 생성해줘야한다.
템플릿은 어디에나 만들어도되지만 보통 앱안에 만든다.
앱폴더명을 우클릭한 뒤 새로운 폴더를 누른 뒤 폴더이름은 templates라고 생성한다.
장고에서 사용하는 템플릿엔진이 사용될때 이 폴더가 기본적으로 작동한다.
그러니 app을 만든 뒤 항상 templates폴더도 생성할 것!
세트로 기억하자 세트!

5. 만든 app을 프로젝트에 등록하기

만든 앱들이 자동적으로 프로젝트에 등록되면 정말 좋겠지만 그렇지않다.
따라서 프로젝트에 만든 앱을 등록시켜 연결이 되게끔 만들어줘야한다.

startproject명령어로 프로젝트를 생성하면 프로젝트폴더안에 동일한 이름의 폴더가 하나 더 생성된다.
여기서 만든 앱들을 등록시킬 수 있다.
프로젝트명과 동일한 파일명을 클릭하면 여러 파일 중에 settings.py가 있다.
클릭후 Application definition를 찾아보면 이미 installed된 앱 목록이 나온다.
장고에서 기본적으로 제공해주는 앱으로 아래 코드에서 django.contrib로 시작하는 6개가 바로 그 앱들이다.
이 코드 아래에 새로 만든 app을 추가해줘야한다.
꼭 등록을 해줘야 모델이라든지 뷰등을 사용할 수 있게 된다.
절대 까먹지말자!

나는 board와 fcuser앱 두개를 만들었으므로 두개를 아래 코드처럼 추가해줬다.

1
2
3
4
5
6
7
8
9
10
11
12
# Application definition

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'board',
'fcuser'
]

6. Class생성

user를 관리할 수 있는 앱을 만들어보자.

1
2
3
4
class Fcuser(models.Model):
username = models.CharField(max_length=64, verbose_name="사용자명")
password = models.CharField(max_length=64, verbose_name="비밀번호")
registered_dttm = models.DateTimeField(auto_now_add=True, verbose_name="등록시간")
  • CharField는 문자열을 담을 수 있는 필드이다.

  • registered_dttm에서 dttm은 실무에서 자주 사용되는 약어로 dateTime의 약자이다

  • auto_now_add=True 는 fcuser라는 객체가 저장되는 시점에 자동으로 현재시간을 데이터로 넣게된다.

장고는 클래스만 만들면 데이터를 생성하고 삭제하는데에 있어서 별도의 지정이 필요가 없다.
클래스 하나로 모델이 완성되버린 것이다! 디폴트값이 적용되어 바로 출력되기때문에 매우 편리하다.

7. class Meta

테이블명을 바꿀때는 아래 코드를 사용한다.
class Meta:라는 클래스안의 클래스를 통해서 장고프레임워크에게 내가 원하는 것을 전달할 수 있다.

테이블명을 바꾸는 이유는 이해도를 높이기 위함도 있지만 기본적으로 장고에서 제공되는 테이블명과 구분되어야하기 때문에 테이블명을 바꿔주는 것이 좋다.

1
2
3
4
5
6
7
class Fcuser(models.Model):
username = models.CharField(max_length=64, verbose_name="사용자명")
password = models.CharField(max_length=64, verbose_name="비밀번호")
registered_dttm = models.DateTimeField(auto_now_add=True, verbose_name="등록시간")

class Meta:
db_table = "자신이 원하는 테이블명"

[패스트캠퍼스python] 프레임워크 VS 라이브러리, Django의 세가지 계층, Django를 위한 패키지 설치, 가상환경실행하는 순서

파이썬 인강 자기계발 챌린지 27회차 미션

1. 프레임워크 VS 라이브러리

웹 프레임워크

자주 사용되는 코드를 체계화하여 쉽게 사용할 수 있도록 도와주는 코드 집합이다.
라이브러리와 혼동될 수 있지만 규모가 훨씬 크며 프레임워크는 프로젝트의 기반이 된다.
건축에 비유를 해본다면 구조를 만드는 골조가 프레임워크고, 그 외 자재들이 라이브러리가 된다고 할 수 있다.
웹 개발에 필요한 기본적인 구조와 코드(클래스, 함수등)가 만들어져있다.

  • 기본적인 구조와 코드 예시 : URL파싱, 세션관리, 요청파싱, 응답 생성, 데이터베이스연동, 관리자페이지, 비즈니스로직, 데이터정의 등등

웹프레임워크가 위와 같이 다양한 일을 한다면 개발자는 무엇을 해야할까?

개발자는 비즈니스 로직데이터 정의를 중점으로 해야한다.
필요한 것들만 중점적으로 하고 나머지는 프레임워크를 이용하면 된다.

2. Django란

장고는 3가지의 계층을 이루고 있다.

  • 모델 계층
  • 뷰 계층
  • 템플릿 계층

이는 MVC라고 하는 개발방법론(패턴)에 기반한 코드구조이다.

3. 모델 계층

모델 계층은 앞에셔 얘기했던 프레임워크의 다양한 기능(URL파싱, 세션관리, 요청파싱, 응답 생성, 데이터베이스연동, 관리자페이지, 비즈니스로직, 데이터정의)중에 데이터베이스와 연동되는 기능을 담당한다.

기본적으로 데이터베이스를 사용하려면 SQL이라는 별도의 문법을 사용해야한다.
하지만 Django에서는 모델 계층의 클래스를 연결만해주면 함수를 사용해서 SQL을 생성할 수 있다.
간략하게 클래스를 생성하면 SQL문법으로 자동으로 table을 생성해준다.

python으로 SQL table생성

세상-편하다!

4. 뷰 계층

앞에서 얘기했던 프레임워크의 다양한 기능(URL파싱, 세션관리, 요청파싱, 응답 생성, 데이터베이스연동, 관리자페이지, 비즈니스로직, 데이터정의)중에 비즈니스 로직에 해당된다.
이 비즈니스 로직은 개발영역으로 개발자가 역량을 쏟아야하는 부분이다.

뷰 계층에서 개발자가 비즈니스 로직을 작성하면 프레임워크가 URL파싱, 요청파싱, 응답관리등을 해준다.

뷰계층 URL파싱 예시

위의 이미지처럼 한줄코드만 작성해주면, path뒤의 url로 변수등을 이용하여 요청사항을 쉽게 입력할 수 있다.

5. 템플릿 계층

디자이너에게 친숙한 문법을 제공한다.
HTML을 기반으로 HTML코드안에서 반복문등을 사용할 수 있는 계층이다.

템플릿 계층의 HTML코드

6. Django를 위한 패키지 설치

장고를 가상환경에서 설치하고 실행하고자한다.

1. virtualenv 설치하기 : pip3 install virtualenv

사용하는 에디터에서 터미널을 열고 pip3 install virtualenv 명령어를 입력해준다.
pc 한대에서 여러 프로젝트를 진행할때 버전이 다른 프로그램들을 사용하면 프로젝트왔다갔다할때마다 패키지를 재설치해줘야하는 번거로움이 있다. 따라서 프로젝트별로 패키지를 관리하는 공간이 분리되어야한다.
그러한 환경을 제공해주는 것이 가상환경이다.

가상환경을 제공해주는 패키지는 다양하지만 virtualenv로 진행 할 예정이다.

2. 가상환경 폴더만들기 : virtualenv 새로운파일명

패키지를 설치하면 새로운 명령어인 virtualenv를 사용할 수 있다.
virtualenv 새로운 파일명명령어로 새로운 프로젝트를 생성해준다.
vs code의 익스플로러에 자동으로 프로젝트가 생성된 것을 확인할 수 있다.

새 프로젝트생성

3. Django설치 : pip3 install django

  1. 가상환경안에 들어가기
    장고를 설치하기전 가상환경안에 들어가야한다.
    가상환경안에서 설치해야 패키지관리가 가능하다.

터미널에서 cd 가상환경을 설치한파일경로\Scripts\activate명령어를 입력한다.
내 경우 cd Fastcampus Python\Django\fcdjango_venv\Scripts>activate 로 입력했는데 vs code에서는 activate 명령이 현재 위치에 있지만 이 명령을 찾을 수 없습니다.라는 명령어가 반복적으로 떠서 그냥 명령프롬프트 cmd에서 진행했다.

참고로 cmd키는 방법 : window key + r로 실행창을 띄운 뒤 cmd검색하면 끝!

가상환경에 들어가게되면 line 제일 앞부분에 (fcdjango_venv)가 적히고 그 뒤에 주소가 적힌다.

꼭 (fcdjango_venv)를 확인하고 Django를 설치하자.

  1. 장고설치하기
    가상환경안이란걸 확인 후 pip3 install django명령어를 입력해주면 Django가 Successfully installed asgiref-3.2.9 django-3.0.7 pytz-2020.1 sqlparse-0.3.1 성공적으로 설치된다.

7. 가상환경들어가는 순서

  1. cmd에서 code라고 명령어를 입력하면 vs code가 오픈된다.
    • 그냥 vs code를 더블클릭해서 오픈됨.
  2. vs code의 terminal에서 가상환경을 설치한 폴더로 이동한다.