Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| public:computer:django [2021/08/03 18:11] – created alex | public:computer:django [2021/08/24 17:59] (current) – [develop with django] alex | ||
|---|---|---|---|
| Line 17: | Line 17: | ||
| * admin site | * admin site | ||
| * runserver; 상용화를 고려할 때 runserver 대신 apache / nginx 선택 | * runserver; 상용화를 고려할 때 runserver 대신 apache / nginx 선택 | ||
| + | * 소스 입력 시 한글 사용; #-*- coding: utf-8 -*- | ||
| Line 75: | Line 76: | ||
| ^ 작업 순서 | ^ 작업 순서 | ||
| | 뼈대 만들기 | | 뼈대 만들기 | ||
| - | | ::: | settings.py | + | | ::: | settings.py |
| | ::: | migrate | | ::: | migrate | ||
| | ::: | createsuperuser | | ::: | createsuperuser | ||
| Line 96: | Line 97: | ||
| * 애플리케이션 생성 | * 애플리케이션 생성 | ||
| * 애플리케이션 등록 | * 애플리케이션 등록 | ||
| + | |||
| + | <cli prompt=' | ||
| + | (djprj)$ django-admin startproject mysite . | ||
| + | </ | ||
| + | |||
| + | <sxh python; title: settings.py> | ||
| + | # settings.py | ||
| + | |||
| + | # ALLOWED_HOST 지정 | ||
| + | ALLOWED_HOSTS = [' | ||
| + | |||
| + | # 애플리케이션 등록 | ||
| + | |||
| + | # 템플릿 설정, DIRS 변경 | ||
| + | TEMPLATES = [ | ||
| + | { | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ], | ||
| + | }, | ||
| + | }, | ||
| + | ] | ||
| + | |||
| + | # 데이터베이스 엔진 | ||
| + | # Database | ||
| + | # https:// | ||
| + | DATABASES = { | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # 타임존 설정 | ||
| + | # TIME_ZONE = ' | ||
| + | TIME_ZONE = ' | ||
| + | |||
| + | # 정적 파일 설정 | ||
| + | STATIC_URL = '/ | ||
| + | |||
| + | STATICFILES_DIRS = [os.path.join(BASE_DIR, | ||
| + | |||
| + | # 미디어 관련 사항 지정 | ||
| + | MEDIA_URL = '/ | ||
| + | MEDIA_ROOT = os.path.join(BASE_DIR, | ||
| + | |||
| + | # 한국 시간대만 사용하는 경우 | ||
| + | # USE_TZ = True | ||
| + | USE_TZ = False | ||
| + | |||
| + | # 장고 사용 언어 | ||
| + | # | ||
| + | LANGUAGE_CODE = ' | ||
| + | |||
| + | </ | ||
| + | |||
| * models | * models | ||
| * 테이블 정의 | * 테이블 정의 | ||
| Line 107: | Line 171: | ||
| * 상속; base.html, home.html, footer.html, | * 상속; base.html, home.html, footer.html, | ||
| * 인증 | * 인증 | ||
| + | |||
| + | ===== 장고 핵심 기능 ===== | ||
| + | ==== Model ==== | ||
| + | * 모델 속성, 모델 메소드, Meta 내부 클래스 속성, Manager 속성 | ||
| + | * 모델 간 관계 | ||
| + | * 1: | ||
| + | * N: | ||
| + | * 1: | ||
| + | * 관계 매니저(RelatedManager) | ||
| + | |||
| + | |||
| + | ==== View ==== | ||
| + | ^ 제네릭 뷰 분류 및 역할 | ||
| + | | Base View | View | 가장 기본이 되는 최상위 제네릭 뷰. 다른 모든 제네릭 뷰는 View의 하위 클래스. | ||
| + | | ::: | TemplateView | ||
| + | | ::: | Redirect View | URL이 주어지면 해당 URL로 리다이렉트 | ||
| + | | Generic Display View | ListView | ||
| + | | ::: | DetailView | ||
| + | | Generic Edit View | FormView | ||
| + | | ::: | CreateView | ||
| + | | ::: | UpdateView | ||
| + | | ::: | DeleteView | ||
| + | | Generic Data View | ArchiveIndexView | ||
| + | | ::: | YearArchiveView | ||
| + | | ::: | MonthArchiveView | ||
| + | | ::: | WeekArchiveView | ||
| + | | ::: | DayArchiveView | ||
| + | | ::: | TodayArchiveView | ||
| + | | ::: | DateDetailView | ||
| + | |||
| + | * 속성 오버라이딩; | ||
| + | * 메소드 오버라이딩; | ||
| + | * 제네릭 뷰의 처리 흐름 | ||
| + | * ListView; setup() -> dispatch() -> http_method_not_allowed() -> get() -> get_queryset() -> get_context_data() -> get_context_object_name() -> render_to_response() -> get_template_names() | ||
| + | * DetailView; setup() -> dispatch() -> http_method_not_allowed() -> get() -> get_object() -> get_queryset() -> get_context_data() -> get_context_object_name() -> render_to_response() -> get_template_names() | ||
| + | * MRO(Method Resolution Order); 다중 상속에서 동일한 이름을 가진 메소드가 둘 이상의 부모 클래스에 존재할 경우 어느 메소드를 먼저 사용해야 할지 결정하는 알고리즘 | ||
| + | * 제네릭 뷰의 페이징 처리 | ||
| + | * 페이징 기능 활성화 | ||
| + | * Paginator 클래스 | ||
| + | * Page 클래스 | ||
| + | * 단축 함수 | ||
| + | * render_to_response() | ||
| + | * render() | ||
| + | * redirect() | ||
| + | * get_object_or_404() | ||
| + | * get_list_or_404() | ||
| + | |||
| + | ==== Template ==== | ||
| + | * {% include %} | ||
| + | * {% static %} | ||
| + | |||
| + | ==== Form ==== | ||
| + | * 일반 폼; Form 클래스를 상속받아 정의 | ||
| + | * 모델 폼; ModelForm 클래스를 상속 받아 정의. 폼 필드의 구성을 데이터베이스 모델 정의 기반으로 폼을 정의하는 경우에 사용. modelform_factory() 함수를 사용해 모델 폼을 정의할 수도 있음. | ||
| + | * 폼셋; 일반 폼을 여러 개 묶어서 한 번에 보여주는 폼. formset_factory() 함수를 사용해 폼셋을 정의. | ||
| + | * 모델 폼셋; 데이터베이스 모델이 기초해서 만든 모델 폼을 여러 개 묶은 폼셋. modelformset_factory() 함수를 사용해 모델 폼셋을 정의. | ||
| + | * 인라인 폼셋; 두 모델 간의 관계가 1:N인 경우, N 모델에 기초해서 만든 모델 폼을 여러 개 묶은 폼셋. inlineformset_factory() 함수를 사용해 인라인 폼셋을 정의 | ||
| ===== AWS, Heroku ===== | ===== AWS, Heroku ===== | ||
| + | * AWS S3 서비스 연동을 위한 썸네일용 패키지 | ||
| + | * sorl-thumbnail: | ||
| + | * django-imagekit: | ||
| + | * easy-thumbnails: | ||
| + | * RDS, MySQL DB 연동 | ||
| + | * AWS 사이트에서 MySQL 생성 -> 장고 프로그램에서 사용 | ||
| + | * AWS RDS로 MySQL 생성; 마스터 사용자이름, | ||
| + | * 패키지; mysqlclient 설치 -> settings.py 파일에서 DATABASES 부분 수정 -> migrate 실행 -> createsuperuser 실행 -> 기존 SQLite3의 데이터 export/ | ||
| + | * S3 서비스 활용(Storage 서버 연동) | ||
| + | * S3(Simple Storage Service) 버킷 생성 | ||
| + | * IAM(Identity and Access Management) 사용자 생성; IAM메뉴 -> 사용자 -> 사용자추가 -> 사용자이름, | ||
| + | * boto3, django-storages 패키지 설치 | ||
| + | * settings.py 수정; INSTALLED_APPS에 ' | ||
| + | * urls.py 수정; | ||
| + | * storage.py 추가; S3Boto3Storage 클래스 상속 받아 정의 | ||
| + | * 정적 파일 모으기(collectstatic 명령) -> S3 사이트에서 버킷 내용 확인 | ||
| + | <cli prompt=' | ||
| + | (djprj)$ python manage.py collectstatic | ||
| + | </ | ||
| + | * Elastic Beanstalk 서비스 활용(웹 서버 활용); 브라우저 UI, EB CLI 명령 | ||
| + | * EB 애플리케이션 및 환경 생성; Elastic Beanstalk -> 시작하기 -> 애플리케이션 이름, 플랫폼, 애플리케이션 코드 -> url 확인 후 접속 확인 | ||
| + | * 장고 프로젝트 배포; requirements.txt 생성 -> .ebextensions 폴더 만들기 -> django.config(변경 가능) 파일 생성 (YAML) -> settings.py 수정 -> 프로젝트 압축 | ||
| + | * Elastic Beanstalk 메뉴 -> 생성한 애플리케이션 이름 -> 애플리케이션 버전 -> 업로드 -> 버전 레이블 입력 -> 업로드 -> 작업 -> 배포 -> 환경 선택 -> 배포 -> 이벤트 페이지 -> 에러 발생시 -> 환경명/ | ||
| + | * Heroku 서비스 활용(웹 서버 활용) | ||
| + | * 프로그램 설치; Heroku CLI, git | ||
| + | * 장고 프로젝트 배포 준비; gunicorn 패키지 설치 -> 가상환경 맞추기 (requirements.txt) -> Procfile, runtime.txt, | ||
| + | * Heroku CLI; git init -> heroku login -> heroku create 앱이름 -> 비밀 데이터를 앱의 환경 변수로 등록 heroku config:set DJANGO_SECRET_KEY, | ||
| + | |||
| + | * EC2 서비스 참고 사항 | ||
| + | |||
| + | ^ ^ 장점 | ||
| + | | EC2(Elastic Comput Cloud) 서비스 | ||
| + | | Heroku 서비스 | ||
| + | |||
| + | * ref; IaaS(Infra as a Service), Paas(Platform as a Service) | ||