구름 ide 사용 이유
-> 구름 IDE는 설치가 필요없는 클라우드 통합 개발환경(IDE)
- 보통 개발을 할 때 OS Version, Python Version, Django Version 별 에러를 잡는데 시간이 많이 소요됩니다. 또한 '개발은 배포 환경과 동일하게!'라는 말을 잊지 마세요. 우리의 리소스를 아껴줄 것입니다.
- 집에 서버와 환경을 구축하는 것은 비용(시간 비용, 금전적 비용, 기회 비용)이 상대적으로 큽니다.
- 배포를 명령어 한 번으로 진행할 수 있어요! 또는 구름에서도 서비스를 런칭할 수도 있답니다.
항상 source venv/bin/activate 입력해서 가상환경 실행 시킨 후 작업 수행하기!!
-> 앞과정에서 실수로 가상환경 실행 안 시킨 후 명령어 입력해서 나중에 에러 생겨 뒤늦게 전 과정으로 돌아가 가상환경 실행시킨 후 다시 명령어 입력해줘서 오류 해결함,,(모델 생성. migration쪽,,)
가상환경 사용하는 이유
-> 컴퓨터 안에 컴퓨터인 가상환경을 만든 후 이걸 떼서 다른 환경에서 실행시키면 밖의 환경이 어떻든 상관없이 잘 돌아간다( 가상환경 설정안하면 버전을 새로운 환경에 다 맞춰주어야 한다)
첫 번째 줄 : venv라는 가상환경 만듦
두 번째 줄 : 가상환경을 실행시킴
장고에서 하나의 웹페이지는 여러 앱으로 만들어져 있다. 해당 프로젝트에서 내가 원하는 기능을 수행하는 앱을 만들어야 하는데 이때 명령어가 python manage.py startapp ~ (~: app이름).
앱을 생성한 뒤에는 반드시 해당 앱을 프로젝트에 등록을 해주어야 함!
-> [프로젝트 명]/settings.py에서 INSTALLED_APPS 리스트에 해당 앱 이름을 추가해 주기
DB를 erd 형식으로 먼저 적어놔야(설계해야) 나중에 유지보수 할 때 유지비용이 적게 든다.
-> 이 테이블을 main/models.py 에 코드로 옮기기
빨간 박스:내가 이름 정의해줄 곳. 나머진 장고에 내장되어 있음 원래부터
데베: null=True :비어있어도된다 / on_delete=models.CASCADE : 같이 지워줌
데이터베이를 다루기 위해서는 SQL이라는 언어를 알아야하는데 파이썬만으로도 데이터베이스를 다룰수있게하는 기법 : ORM기법
-> 이걸 생성해주는 게 python manage.py makemigrations
-> python manage.py migrate :이걸 입력하면 실제로 저 코드가 데이터베이스를 만지게 됨(기본적으로 있는 걸 db에 반영하겠다)
내가 만든 모델을 admin(관리자) 페이지에서 보기 위해서는 admin 앱에 해당 모델을 등록해야한다.
from django.contrib import admin
from .models import Developer, Question, Choice
admin.site.register(Developer)
admin.site.register(Question)
admin.site.register(Choice)
html과 view.py에 파이썬으로 작성한 context를 합쳐야 함.
-> 이를 위해 장고 템플릿 언어 사용한다! django template tag 구글링하면 나옴
장고 템플릿에서는 장고만의 문법인 장고 템플릿 언어(django template language)를 사용할 수 있습니다. html 파일 안에서 원래 쓸 수 없었던 변수, 반복문, 제어문 등을 사용
django 개발 루틴
1. urls.py에서 url('result/')설정해준다
2. views.py에서 url에 접속했을 때 실행할 함수 작성해준
3. templates안에 템플릿 파일을 만들고 사용자가 접근할 수 있도록 html 작성
* model 생성 시 model 별로 migrations/pycache에 저절로 pk 값이 생성된다.('id'라고 저장되어 있음)
result template 과정 중 view 만들기 : 잘 모르겠다면 중간중간 print해서 어떤 값들이 찍히는지 보고 어떻게 할지 생각하
print(f'POST: {request.POST}') 찍어서 POST 값 보기
내가 필요한건 question-1 : ['1'] 에서 대괄호에 들어있는 값. 왜?! -> 각 question 문항에서 선택한 값이 어떤 개발자유형에 해당하는지 알아내야하기 때문! 따라서 얘를 받아와서 count 값 셀 때 사용하기
developer_id=int(request.POST['questions-{n}'][0]) #리스트의 0번째 원소에 developer 유형에 관한 값이 들어있어서
-> 리스트의 0번째 값을 int로 바꿨으므로 developer_id는 1이라는 값을 가지게 될 것
best_developer_id=max(range(1, K+1), key=lambda id: counter[id])
-> 리스트에서 최고값의 index 반환. 그냥 counter.index(max(counter))해도 값 같다.
장고의 shell & ORM
장고의 shell: python manage.py shell
module을 불러올 수 있다
ORM :객체와 관계형데이터베이스 모델을 mapping 시켜준다.
-> SQL을 작성할 필요 없이, 객체를 정의하고 ORM이 제공하는 Method를 사용하여 데이터베이스에 적재된 데이터를 쉽게 접근할 수 있도록 하는 것입니다. 이 과정에서 자동으로 SQL을 생성하면서 매핑