Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
public:computer:django [2021/08/03 20:43] alexpublic: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 101: Line 102:
 </cli> </cli>
    
-<sxh>+<sxh python; title: settings.py>
 # settings.py # settings.py
  
Line 170: Line 171:
     * 상속; base.html, home.html, footer.html, ...     * 상속; base.html, home.html, footer.html, ...
   * 인증   * 인증
 +
 +===== 장고 핵심 기능 =====
 +==== Model ====
 +  * 모델 속성, 모델 메소드, Meta 내부 클래스 속성, Manager 속성
 +  * 모델 간 관계
 +    * 1:N(One-to-Many) 관계; N모델에 ForeignKey 필드 정의
 +    * N:N(Many-to-Many) 관계; 한쪽에만 ForeignKey 필드 정의
 +    * 1:1(One-to-One) 관계; 
 +  * 관계 매니저(RelatedManager)
 +
 +
 +==== View ====
 +^  제네릭 뷰 분류 및 역할  ^^^
 +| Base View  | View  | 가장 기본이 되는 최상위 제네릭 뷰. 다른 모든 제네릭 뷰는 View의 하위 클래스.  |
 +| ::: | TemplateView  | 템플릿이 주어지면 해당 템플릿을 렌더링  |
 +| ::: | Redirect View  | URL이 주어지면 해당 URL로 리다이렉트  |
 +| Generic Display View  | ListView  | 조건에 맞는 여러 개의 객체 리스트를 보여줌.  |
 +| ::: | DetailView  | 객체 하나에 대한 상세한 정보를 보여줌.  |
 +| Generic Edit View  | FormView  | 폼이 주어지면 해당 폼을 보여줌.  |
 +| ::: | CreateView  | 폼을 보여주고 폼의 내용으로 DB 레코드를 신규 생성  |
 +| ::: | UpdateView  | 폼을 보여주고 폼의 내용으로 기존 DB 레코드를 수정  |
 +| ::: | DeleteView  | 삭제 컨펌 폼을 보여주고, 기존 DB 레코드를 삭제  |
 +| Generic Data View  | ArchiveIndexView  | 조건에 맞는 여러 개의 객체 및 그 객체들에 대한 날짜 정보를 보여줌.  |
 +| ::: | YearArchiveView  | 연도가 주어지면 그 연도에 해당하는 객체들을 보여줌.  |
 +| ::: | MonthArchiveView  | 연, 월이 주어지면 그에 해당하는 객체들을 보여줌.  |
 +| ::: | WeekArchiveView  | 연도와 주차(Week)가 주어지면 그에 해당하는 객체들을 보여줌.  |
 +| ::: | DayArchiveView  | 연, 월, 일이 주어지면 그 날짜에 해당하는 객체들을 보여줌.  |
 +| ::: | TodayArchiveView  | 오늘 날짜에 해당하는 객체들을 보여줌.  |
 +| ::: | DateDetailView  | 연, 월, 일 기본키(또는 슬러그)가 주어지면 그에 해당하는 특정 객체 하나에 대한 상세한 정보를 보여줌.  |
 +
 +  * 속성 오버라이딩; model, queryset, template_name, context_object_name, paginate_by, date_field, make_object_list, form_class, initial, fields, success_url
 +  * 메소드 오버라이딩; get_queryset(), get_context_data(**kwargs), form_valid(form)
 +  * 제네릭 뷰의 처리 흐름
 +    * 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: S3 서비스와 연동 가능하며 원격 저장소에 대한 쿼리 성능 좋음
 +    * django-imagekit: S3 서비스와 연동을 위해 일부 SW 변경 필요
 +    * easy-thumbnails: S3 서비스와 연동되지 않음
 +  * RDS, MySQL DB 연동
 +    * AWS 사이트에서 MySQL 생성 -> 장고 프로그램에서 사용
 +    * AWS RDS로 MySQL 생성; 마스터 사용자이름, 마스터 암호, 엔드 포인트, 포트 확인
 +    * 패키지; mysqlclient 설치 -> settings.py 파일에서 DATABASES 부분 수정 -> migrate 실행 -> createsuperuser 실행 -> 기존 SQLite3의 데이터 export/import (manage.py dumpdata 및 loaddata)
 +  * S3 서비스 활용(Storage 서버 연동)
 +    * S3(Simple Storage Service) 버킷 생성
 +    * IAM(Identity and Access Management) 사용자 생성; IAM메뉴 -> 사용자 -> 사용자추가 -> 사용자이름, 프로그래밍 방식 엑세스 -> 기존 정책 직접 연결 -> 정책 필터: s3, 정책 목록 : AmazonS3FullAccess -> 사용자 자격 증명(액세스 키와 비밀 엑세스키) csv 다운로드
 +    * boto3, django-storages 패키지 설치
 +    * settings.py 수정; INSTALLED_APPS에 'storage' 추가 -> 파일 끝에 STORAGE관련, AWS 관련 내용 추가 
 +    * urls.py 수정; 
 +    * storage.py 추가; S3Boto3Storage 클래스 상속 받아 정의
 +    * 정적 파일 모으기(collectstatic 명령) -> S3 사이트에서 버킷 내용 확인
 +<cli prompt='(djprj)$ ' comment='# '>
 +(djprj)$ python manage.py collectstatic
 +</cli>
 +  * Elastic Beanstalk 서비스 활용(웹 서버 활용); 브라우저 UI, EB CLI 명령
 +    * EB 애플리케이션 및 환경 생성; Elastic Beanstalk -> 시작하기 -> 애플리케이션 이름, 플랫폼, 애플리케이션 코드 -> url 확인 후 접속 확인
 +    * 장고 프로젝트 배포; requirements.txt 생성 -> .ebextensions 폴더 만들기 -> django.config(변경 가능) 파일 생성 (YAML) -> settings.py 수정 -> 프로젝트 압축
 +    * Elastic Beanstalk 메뉴 -> 생성한 애플리케이션 이름 -> 애플리케이션 버전 -> 업로드 -> 버전 레이블 입력 -> 업로드 -> 작업 -> 배포 -> 환경 선택 -> 배포 -> 이벤트 페이지 -> 에러 발생시 -> 환경명/로그/로그 요청/마지막 100줄 -> django.config 파일 수정 후 압축/업로드/배포 과정 성공할 때까지 반복 -> EB에서 정해준 도메인 URL로 접속 확인
 +  * Heroku 서비스 활용(웹 서버 활용)
 +    * 프로그램 설치; Heroku CLI, git
 +    * 장고 프로젝트 배포 준비; gunicorn 패키지 설치 -> 가상환경 맞추기 (requirements.txt) -> Procfile, runtime.txt, .gitignore 생성 -> settings.py 수정
 +    * Heroku CLI; git init -> heroku login -> heroku create 앱이름 -> 비밀 데이터를 앱의 환경 변수로 등록 heroku config:set DJANGO_SECRET_KEY, DATABASE_NAME,.... -> git add -A -> git commit -m ".." -> git push heroku master -> heroku run python manage.py migrate -> heroku run python manage.py createsuperuser -> heroku open -> url 확인 후 브라우저에서 실행 확인
 +
 +  * EC2 서비스 참고 사항
 +
 +^   ^ 장점  ^ 단점  ^
 +| EC2(Elastic Comput Cloud) 서비스  | 구성 자유도 높음, 비용 낮음  | 작업 난이도 높음  |
 +| Heroku 서비스  | 작업 난이도 낮음  | 구성 자유도 낮음, 비용 높음  |
 +
 +  * ref; IaaS(Infra as a Service), Paas(Platform as a Service)
  • public/computer/django.1627991010.txt.gz
  • Last modified: 2021/08/03 20:43
  • by alex