안녕하세요. 현재 django를 사용해서 web site & api 를 작성하고 있는데요

 
Yuk Seungchan

안녕하세요.

현재 django를 사용해서 web site & api 를 작성하고 있는데요.

django에서 model 은 보통 app안에 있는데요. app에 영향받지 않는 model을 만들 수 있나요?

syncdb나 migrate를 적용할 수 있지만 app에 속해있지 않는 model을 만들 수 있는지 궁금합니다.

  • Juram Park

    흠~ 잘은 모르지만 갑자기 든 생각이 그냥 onlymodel같은 app이름으로 만들어서 그 app에는 url이나 views를 제외하면 안되는건가요 ?

    Chinseok Lee

    “app에 영향받지 않는 model” 이 어떤 걸 하시려는 것인지 잘 이해가 안 됩니다. 좀 더 자세한 설명이 필요할 듯 하네요.

    Yuk Seungchan

    현재 개발하고 있는 서비스가 API와 CMS 2개가 동시에 돌아가고 있는데요.

    현재는 각 기능에 맞는 앱을 만들어서 모델을 만들고 해당 앱에 들어가는 api, cms를 구현했는데, 이번에 구조를 좀 바꿔보려고 합니다.

    cms와 api를 하나의 큰 앱으로 만들어서 사용하려고 합니다

    예로 api 앱과 cms앱을 만들었을 때, 두 앱에 공통적으로 사용되는 Notice라는 앱을 models라는 독립 된 directory를 만들어서 모델만 정의를 하려고 하는 상황입니다. 😀

    Chinseok Lee

    개인적으로는, 하나의 앱 안에서 models 를 정의하고, api/cms view 를 따로 처리하시는 방법이 좋을 듯 하구요.

    다수의 앱으로 나누실려면, model 만을 정의할 app 을 만들어서 처리하시고, api/cms app 에서는 view/templates 처리만 하실 수도 있겠네요.

    Yuk Seungchan

    이진석 현재는 전자의 방법으로 하고 있는데 하나의 프로젝트 안에 여러 서비스가 돌아가니 어떤게 구조가 좀 더 나을지 고민이 되네요.

    답변 감사합니다 😀

    Chinseok Lee

    views.py / models.py 를 모듈로 정의해서 쓰는 방법도 좋습니다.
    views/__init__.py
    views/api/v1.py
    views/api/v2.py
    views/cms.py

    Donghyun Cho

    질문을 제가 잘 이해를 했는지는 모르겠지만..
    cms의 모델을 api에서 사용하고 싶으신가요? 다른 app이 추가되도 해당 app의 모델을 api도 쓰시고 싶으신가요? 저는 보통
    core, app1, app2, ..이렇게 만들고 모든 공유되는 모듈이나 helper들은 다 core에 넣고,각 앱의 api는 app1.api.resources로 사용합니다. 각 app의 api마다 또 공유되는 코드들은 물론 core.api.resouces, core.api.abstract 나 core.api.mixin등으로 사용해요..
    왠만하면 모델을 기준으로 app을 나누는게 좋고요, 정 api와 cms를 나누고 싶으시면 api앱을 만들고 blank models.py를 넣어서 사용하시면 될 듯 해요.
    추가로 더 말씀드리면.. app을 나누는 기준은 모듈화를 할 수 있느냐인데.. 쉽게 생각하면 독립된 라이브러리를 만들 수 있도록 app을 만드는게 좋아요. 앱을 다른 프로젝트에서 복사해서 사용할 수 있는지를 항상 염두하시면 관리하시는데 도움이 될 거에요. 라이브러리를 pip으로 설치하여 사용하는것과 같은거죠. 반대로, 내가 만든 앱을 라이브러리로 만들어 배포하여 다른 사람들이 사용할 수 있도록 독립된 앱을 만들 수 있도록 앱을 나누는게 바람직 하다고 생각합니다.

    Donghyun Cho

    혹시나 해서 말씀드리지만.. app이나 모델의 이름은 단수형으로 사용하고, 기타 서브 패키지 및 폴더들은 복수형으로 사용하셔도 무방할꺼에요. 그리고, app안에서 import하실때는 relative path를 사용하시기 바랍니다. 이미 아시겠지만..
    Happy Coding 하세요.

    박영록

    현재 쓰고 있으신 그 방법이 정답에 가깝습니다. 메인이 되는 app의 models에 대부분의 모델을 정의해두고, api나 cms에서는 해당 app의 모델을 이용한 view만 만들면 되죠. 만약 api와 cms 둘 뿐이라면 둘 중 하나에 몰아넣으면 될 거구요.

    django에서 다른 app의 모델을 사용하는 일은 부자연스러운 일이 아닙니다.

Advertisements