티스토리 뷰

박종현

Thank you for your contribution.

 

Django는 하나의 코드로 여러 사이트를 운영할 수 있는 Site 프레임워크를 제공합니다. 이를 이용하면 같은 레이아웃을 가지지만 서로 다른 콘텐츠를 제공하는 두 개 이상의 사이트를 쉽게 만들 수 있습니다. 하지만 내용뿐만 아니라 레이아웃까지 다르게 가져가려면 사이트 별로 자원을 구분할 수 있는 방법이 필요합니다. 이 발표에서는 Django의 Site 프레임워크에 관해 알아보고, Site 프레임워크를 미들웨어 수준에서 확장하고 커스텀 자원 로더를 작성하여, 하나의 코드 기반으로 여러 개의 사용자 정의 가능한 사이트를 운영할 수 있는 방법에 관해 이야기하고자 합니다. 각 사이트 별로 서로 다른 템플릿과 리소스를 사용하되, 특정 사이트에 템플릿이 없을 경우 기본(fallback) 템플릿을 사용하는 방법에 관해 알아볼 것입니다. 사이트 별로 urls.py 파일을 별도로 구성하는 방법 및 사이트 URL에 따라 settings.py 값을 오버로딩 하는 법도 이야기할 것입니다. 이를 통해, 코드 개발의 편의성을 유지하면서도 다양성을 가지는 여러 사이트를 운영하는 경험을 공유하려고 합니다.

 

https://www.pycon.kr/program/talk-detail?id=135

 


 

하나의 Django 코드로 여러 사이트 운영하기

 

이번에 많은 분들이 와줘셔서 감사인사

오픈소스도 운영하고 있음.

 

https://github.com/lablup/backend.ai

 

lablup/backend.ai

Meta-repository for backend.ai. Contribute to lablup/backend.ai development by creating an account on GitHub.

github.com

 

사용자를 분리하고 어떻게 분배할 것이지 정리.

여러 사이트 운영이 필요한 경우

 

 

여전에 학교별로 공급한 적이 있었는데,

내용은 같지만 학교별로 로고가 다르거나 권한이 다른 경우가 있어.

이런 사례가 있어 해당 프로그램을 만듬.

 

 

앱 중에 오버러드가 있어.

여기에 사이트 정보가 모여있어.

사용자에 따라 어떻게 구성할지 정해져 있음.

 

---

 

데이터 분리

 

어떻게 분리할지 정리함.

db수준에서 사이트 지정.

웹사이트의 도메인과 네임을 지정.

 

 

 

이런 식의 구조를 가짐.

 

사용하려면 몇가지 설정을 해주어야 함.

간단한 모델이 있어.

도메인을 전달받아 엔트리에서 사이트를 전달받어 저장.

 

 

class Entry()를 만들어 지정.

sires에 필드를 생성. 

사용자 별로 접속한 사이트의 접속정보를 전달해줌.

 

---

 

 

view에서 사용

 

 

사이트의 주소르 받아 분기별로 작성 가능.

단순한 기능으로 제작.

 

----

 

프레임워크 활성화

 

 

기본적으로 활성화 되지 않기 때문에 설정이 필요.

세팅의 INSTALLED_APPS에 해당 옵션을 추가.

활성화 한 후에는 마이그레이션을 해주어야 함

 

그 다음사이트를 수동으로만들어주어야 함.

 

 

site1, site2를 만들어 도메인을 설정. domina1 = 'site1.mysite.com' 식으로 저장.

 

 

-----

 

미들웨어 

 

장고의 미들웨어 - 유저의 요청이 뷰로 가기전에 특정 작업을 수행.

 

 

view에 커스텀 미들웨어를 추가.

 

 

----

 

사이트 구분을 위한 미들웨어 작성

 

 

요청이 들어온 도메인으로 사이트를 구분.

그 도메인에 따라 별도의 작업이 가능.

 

 

def __call__()에 작성.

그런데 로컬이랑 맞지 않는 문제 발생. 

디버그 용 코드를 추가해줌.

 

 

----

 

 

설정 및 url 불러오기

 

 

사이트별 설정 적용.

사이트 도메인으로 폴더를 생성.

그리고 각 사이트별로 별도의 세팅 파일 생성도 가능.

 

 

---

 

url 구분하기

 

일치하는 폴더가 있을 경우 하위 url파일을 찾아 적용.

사이트 별로 다른 설정과 url을 사용 가능.

 

---

 

템플릿 불러오기

사이트별로 별도의 템플릿을 사용하고 싶은 경우.

별도의 로더를 사용

새로운 모듈을 추가함. template loader.

 

템플릿 뿐만 아니라 관련 폴더도 같이 불러옴.

커스텀 템플릿 로더를 끼워넣고, 먼저 찾은 다음 그 다음 파일 디렉토리를 검색

 

----

 

사이트 별 템플릿 구분하기

두가지 메소드를 정의해주어야 하마.

오버로드 폴더 아래 템플릿을 호출.

그 안에서 템플릿을 찾는 것.

 

파일이 없으면 다른 로더에서 검색.

이런 식으로 템플릿을 사이트 별로 불러올 수 있어.

 

----

 

리소스 불러이기 

 

static finder 설정 추가. 

세팅에 커스텀 세팅을 추가해줌.

 

def find()를 오버라이드해서 사용.

 

def multisitedinder()에 statuc_dir을 추가.

차이는 오버로드 내에 static 폴더를 찾는 것을 추가한 것.

---

 

요약

 

멀티파인더를 사용하여 하나의 소스로 여러 사이트 서빙이 가능

하위에는 자신만의 세팅과 고유 설정을 적용 가능.

 

 

 

----

 

예시

 

왼쪽은 공통사이트

우측 상단은 각 사이트별 엔트리 출력

우측 하단은 살짝 변형

 

사이트별로 살짝 다른 형태로 표시

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
26 27 28 29 30 31
글 보관함