장고 파일구성!

춤추는망고·2020년 4월 15일
0

이 글은 수정을 마쳤습니다.

좀 더 가공하여, 다른 시리즈에 등장시킬 예정입니다!

/manage.py

: 핵심 프로그램 ( 총괄적인 실행자 )

( Project 에 대한 전반적인 제어를 담당해요! )

기능쓰!

shell : Project 내용을 interpreter 로 제어
migrate : DataBase 연동 ( Django 의 모델을 DB 로 이주시킴 )
test : App 에 대한 테스트 환경 동작
runserver : Project 서버 구동






/project/settings.py

: 프로젝트의 전체적인 설정 프로그램

설정항목쓰!

BASE_DIR : root 디렉토리 위치 설정

SECRET_KEY : 서버의 암호화키 ( 노출되서는 안되요! )

DEBUG : 개발환경에서만 사용해야하는 설정 ( 디버깅 기능이 서버구동을 멈출수도 있음! )

ALLOWED_HOSTS : 서버에 접근권한을 줄 호스트를 지정 ( 아무나 주면 안됨! )

INSTALLED_APPS : Django 인스턴스에서 활성화된 모든 어플리케이션들의 이름

	- 다수의 프로젝트에서 사용가능, 패키징하여 배포도 가능함.
	- 기능을 만들었다면, 여기에 등록해야 쓸 수 있음.
	( # 은 Django 를 API 서버로만 동작시킬땐, 필요없는 기능 )

	# django.contrib.admin - 장고 자체 관리용 사이트
	# django.contrib.auth - 장고 자체 사용자 인증 시스템
	django.contrib.contenttypes - 컨텐츠 타입을 위한 프레임워크
	django.contrib.sessions - 세션 프레임워크
	django.contrib.messages - 메세징 프레임워크
	django.contrib.staticfiles - 정적 파일담당 프레임워크

MIDDLEWARE : Django 에서 활성화된 매개기능들

	( # 은 Django 를 API 서버로만 동작시킬땐, 필요없는 기능 )

	'django.middleware.security.SecurityMiddleware',
	'django.contrib.sessions.middleware.SessionMiddleware',
	'django.middleware.common.CommonMiddleware',
	# 'django.middleware.csrf.CsrfViewMiddleware', -> XSS 와 비슷한 방식의 페이지 변형 공격을 방지
	# 'django.contrib.auth.middleware.AuthenticationMiddleware', -> 장고 자체 사용자 인증 시스템관련 기능
	'django.contrib.messages.middleware.MessageMiddleware',
	'django.middleware.clickjacking.XFrameOptionsMiddleware',

ROOT_URLCONF : 기준 url 지정파일 참조

TEMPLATES : 템플릿 관련 설정

WSGI_APPLICATION : 앱 구현방식 지정

DATABASES : DataBase 에 대한 설정

	ENGINE : DataBase 엔진 지정
	NAME : DataBase 의 파일명을 포함한 절대경로값

	( 이외에도, USER, PASSWORD, HOST 등의 추가설정 필요 )

AUTH_PASSWORD_VALIDATORS : 로그인 프로세스의 암호 분별관련 기능

LANGUAGE_CODE : 관리페이지 언어 ( 한글쓰! = 'ko' )

TIME_ZONE : 기준 시간대 설정 ( 서울쓰! = 'Asia/Seoul' )	    

STATIC_URL : 정적문서가 담길 디렉토리 지정

STATIC_ROOT : 정적경로 지정

- 기준 시간대 관련자료쓰!

기본설정에는 없지만,
RESTful 한 구성을 유지하는데 도움을 주는 설정값!

APPEND_SLASH = False

- Django가 자동으로 경로탐색을 할 때, ' / ' 를 추가하지 않음!






/project/urls.py

: API 디렉토리별 URL 구성 정의 프로그램 ( 인식자 정의자 )


' RESTful 한 API 구성 ' 을 하기 위해선

urls.py 를 잘 정의해야 해요!


project/urls.py 에서 include 메소드를 이용해

App 내부의 urls.py 를 참조할 수 있어요!



- 역할쓰!

URI 주소값으로 ' 기능 별로 사용될 자원의 위치 ' 를 표현

- 구성 메소드쓰!

- include() : Project 내의 다른 URL 패턴을 포함하는 메소드
	      ( App 내의 URL 패턴을 참조하는데 주로 사용 )

- path() : URL 패턴에 맞는 자원을 호출하는 메소드
	   ( 기능에 맞는 URL 을 지정하는데 주로 사용 )

	필수인자인 route, view 와 선택인자인 kwargs, name 를 가짐

	필수인자 1. route : URL 패턴을 가진 문자열

	      - 요청이 처리될 때, Django 는
		url 의 첫 번째 패턴부터 일치하는 패턴을 찾을 때 까지
		요청된 URL 을 각 패턴과 리스트의 순서대로 비교함.

	      - GET 이나 POST 방식의 매개 변수들,
		혹은 도메인 이름검색 X

	      - 예를 들어,

		https://www.example.com/myapp/ 이 요청된 경우,
		URLconf 는 오직 myapp/ 부분만 바라봄.

		https://www.example.com/myapp/?page=3 같은 요청에도,
		URLconf 는 역시 myapp/ 부분만 바라봄.

	필수인자 2. view :

		Project 에서 route 와 일치하는 패턴을 찾으면,
		실행할 특정한 view 함수를 지정함.

		* 여기서 view 함수란,
		  App 의 views.py 파일에서 지정한 함수
		( 요청으로 온 HttpRequest 객체를 첫번째 인자로,
		  요청된 경로로 부터 '캡처된' 값을 키워드 인자(kwargs)로 하여
		  실행되는 함수 ) 

	선택인자 1. kwargs :
		view 에 키워드 인자(kwargs)형태로 전달되는 딕셔너리 형태의 인자

	선택인자 2. name :
		path 에 정의한 view 함수 호출에 대한 이름을 지정
		URL naming 을 하면,
		Project 어디에서나 명확하게 참조할 수 있음. (템플릿 포함)
		하나만 수정해도 Project 내의 모든 URL 패턴을 바꿀 수 있음.






/project/app/models.py

: ORM 방식 테이블 정의자 ( 클래스를 사용함! )

ORM 이란?

- Object Relational Mapping

장고의 핵심 기능 중 하나인 DataBase 관리 기능이에요!


Object ( 객체 ) 를 이용하여,

Relational ( 관계적인 )

Mapping ( 연결 ) 을 하는 기술이죠!

관계형 데이터베이스 ( Relational DataBase ) 에 대해
객체 지향적 ( Objective Oriented ) 으로 제어하는 방식이에요!

( 관계형 데이터베이스에 대한 글은 다음에 작성할 예정이에요! )

개념쓰!

App 에 대한 'Model' 들을 제어하는 파일

Model 이란?

단일 데이터 소스
( 관계형 데이터베이스의 스키마 )

클래스와 변수가 있음
( 클래스 = Schema 이름,
  변수 = Column 이름
  변수에 할당하는 값 = Field 속성 )

관계형 데이터베이스의 필드에 대한 속성설정을 할 수 있음
( 저장하는 데이터의 필수적인 필드, 동작들을 포함 )

관계형 데이터베이스로 이주 ( Migrate ) 할 내용

특징쓰 : 클래스 내부에 메타 클래스로 테이블명을 지정할 수 있음

class Meta:
	db_table = ' 테이블명 '

( 이외에도 많은 특징이 있지만, 생략! 자세한 내용은 공식문서 를 참고하세요~ )






/project/app/views.py

: App 의 Logic 지정자

View 란?

Python 의 메소드와 클래스를 기반으로 정의된 Logic 덩어리

쉽게 말하자면, Django 개발자가 구현한 기능

현 세대의 웹 개발에서는 주로 API 의 한 동작으로 사용

API 란?

: Application Programming Interface


단순히 API 에 대해서만 설명하기에는 너무나도 막연해서,
살을 좀 붙여서 설명드릴게욥 ㅎ

웹 서비스와 관련된 연결환경 ( Interface ) 은 크게 두 가지 있는데요.

개발자가 서비스의 사용자 에게 제공하는 서비스 사용환경
User Interface ( UI )

개발자가 서비스를 구현하는 다른 개발자 에게 제공하는
응용프로그램 개발환경
( API / Application Programming Interface) 입니다.

따라서, API 란!

기존에 있던 프로그램응용 하여 개발 하고자 하는 어떤 개발자를 위해,
다른 개발자가 제공하는 ' 개발자를 위한 프로그램 사용환경 ' 인 것이죠!

요청된 정보를 DataBase 에서 호출하는 기능으로 주로 사용
( Front 와 Back 사이의 End-Point 를 통한 통신처리에 이용 )

urls.py 에서 호출자로 정의한 URL 값이 요청으로 오면,
그에 맞는 View Logic 이 반응하여 응답하는 방식!
profile
지금까지 이런 망고는 없었다. 이것은 개발자인가 춤추는망고인가

0개의 댓글