모델에 관하여 질문해봅니다 하나의 앱에 그이름에 맞는 모델 (예: book 앱이면 책 관

 
공대영

모델에 관하여 질문해봅니다

하나의 앱에 그이름에 맞는 모델 (예: book 앱이면 책 관련 모델) 이 들어가죠

그런데 저렇게 구조화된 사이트가 아니고 SPA 처럼 간단한 일을 하는곳에서는 어떻게 모델을 적용해야 좋을까요?

예를들어 책을 CRUD 하는 기능을 book 앱 하나를 만든다 가정하면

책관련 모델말고도 다른 모델이 필요하게 되면 book에 다넣자니 접두사가 매칭이 안되고 ( book_ )

따로 앱을 만들어 모델을 넣자니 book 앱말고는 view할게 없으니 쓸데없이 파일이 쓰이는것 같습니다

이럴땐 어떻게 하면 깔끔하고 보기좋게 할수있을까요?

  • Tae-lim Oh

    앱에서 view를 지우셔도 될 겁니다.

    Donghyun Cho

    저는 공통된 모델이나 추상모델, 그리고 프로젝트 안의 여러 앱에서 공유하는 기능들은 core 라는 앱을 만들어서 사용합니다.
    생각하신 Book처럼 간단한 기능과 구조라도 따로 나누어 놓는것이 관리와 확장면에서도 좋구요. 직관적이고 이해하기 쉬운 구조와 코드야 말로 개발자가 신경써야하는 부분인 듯 합니다. 다른 개발자가 보더라도 쉽게 이해할 수 있도록 말이죠.

    박영록

    저는 django에서 앱을 잘게 나누어서 얻는 이득이 없다고 보기 때문에 그냥 한 앱에 몰아넣는 것을 추천합니다. 여러 프로젝트에서 사용되는 공통 컴포넌트라든가, 로그인하는 방식이 다른 경우 등등에만 앱을 나누고, 그 외에는 프로젝트의 코어 앱은 하나만 두는 게 좋습니다.

    꼭 django의 앱 개념 뿐 아니라 일반적인 코딩에서도 뭔가 단위를 나누는 건 구체적인 기술적 이득이 확실할 때 나누는 게 over engineering을 방지하는데 좋습니다.

    공대영

    역시 단순한게 좋은것 같습니다. 너무 구조화 시키면 피곤해지기만 하네요

    Seungho Kim

    그냥 모델만 만드셔도 될듯합니다.

    Donghyun Cho

    도메인 구조가 어떻게 되는지 모르겠지만 간단한 uml이나 db model 관계 다이어그램을 만들어보시면 프로젝트 내 앱 구조를 잡는데 많은 도움이 될 거에요. 저는 한곳에 다 넣는 방법은 선호하지 않습니다. 확장성, 관리, 협업에 좀 더 신경써야 하지 않을까요?
    위에 제가 쓴 글에 오해가 있을까봐 첨언하자면, 모델 하나에 앱 하나를 만드는 구조를 말씀드리려고 했던건 아니고, 관련된 모델들의 성격에 따라 달라지기 때문에 답변이 상당히 애매했었어요. 카테고리같은 모델은 당연히 같이 들어갈테고요.. Two scoops of django에서 본것 같은데, “하나의 앱을 쉽게 설명할 수 없으면 나눠라.”
    쉽게 생각하면 mp3 파일들이 있는데 장르별로 나누고 각 장르안에서 가수별로 나누는 것과 같다고 생각됩니다. 한 앱에 하나의 models.py만 있어야 하는게 아닌것 처럼요.
    제가 중요하게 생각하는건 새로온 개발자가 프로젝트 투입하고 쉽게 구조와 코드를 이해할 수 있을까?입니다.

질문이 있습니다! 아래 사진의 두 필드는 같은건가요….?

 
최준석

질문이 있습니다!
아래 사진의 두 필드는 같은건가요….?


  • Youngsoo Jung

    눈에 보이는 대로 말하면… 다릅니다!

    Chinseok Lee

    예. ForeignKey 에 unique=True 로 두면, django 구동 시에 OneToOneField 로의 변경안내 메세지가 나올겁니다.

    최준석

    정확히 뭐가 다른건가요 ㅠㅠ..
    ForeignKey 부분으로 사용했었는데 아래 사진과 같은 오류가 나옵니다…

    최준석

    바꾸면 어떤점이 달라지는지 궁금합니다.

    Han Cold Kim

    외래키는 1:N 관계에서 사용하는거고, OneToOne는 1:1 관계에서 사용하는 겁니다.

    User과 UserProfile가 OneToOne로 연결되는 경우가 많죠.

    최준석

    김한기 아… 디비상의 관계에 대한거네요 🙂 기능상에서 달라지는 점은 없을까요…?

    Han Cold Kim

    글쎄요… 달라지는점이 있을진 잘모르겠는데… 1:1 관계라면… OneToOne를 사용하는게 아무래도 좋을꺼같아요…

    최준석

    김한기 감사합니다 🙂 unique를 추가하고 기능상 달라지는 점이 있으면 어떻하나 고민하고있었네요…

    Chinseok Lee

    db 상에는 모두 동일하게 외래키 필드가 생성이 됩니다만
    ForeignKey 에 unique=True 라면, OneToOneField 를 쓰는 것이 코드가 간결해집니다. ForeignKey 는 unique=True 가 지정되어있더라도 1:N 관계임을 전제하고 있기 때문이죠.

    아래 var1 과 var2 가 대략적으로 OneToOneField 와 ForeignKey(unique=True) 와의 관계를 보여줍니다.

    var1 = 1
    var2 = [1]

    Chinseok Lee

    class User(models.Model): pass

    class Profile1(models.Model):
    … user = models.ForeignKey(User, unique=True)

    class Profile2(models.Model):
    … user = models.OneToOneField(User)

    위와 같은 모델 관계에서, 다음과 같은 코드를 쓸 수 있게 됩니다.

    user = User.objects.first()
    myprofile1 = user.profile1_set.first()
    # 실행되는 쿼리에서 조건절 : WHERE “app_profile1″.”user_id” = %s ORDER BY “app_profile1″.”id” ASC LIMIT 1\’ – PARAMS = (1,)

    myprofile2 = user.profile2
    # 실행되는 쿼리에서 조건절 : WHERE “app_profile2″.”user_id” = %s\’ – PARAMS = (1,)

현 PHP로 되어 있는 시스템에 Django로 일부 기능을 붙이려 하니 Session 이

 
Daesung Kang

현 PHP로 되어 있는 시스템에 Django로 일부 기능을 붙이려 하니 Session 이 핵심이네요. PHP의 세션 파일 읽어서 서비스하는데 이상은 없을 것 같지만… 예상하지 못한 이슈가 없었으면 하는 바램이 있네요. 혹시 이것 관련해서 경험 있으신 분들 공유부탁합니다.

  • Donghyun Cho

    같은 도메인아래 있다면 세션 쿠키를 읽어서 사용하시는데 문제 없을것 같아요. 그렇지 않다면 SSO을 구성하셔야 할 듯 합니다. JWT도 같이 알아보시는것이 좋겠어요.

    JeongHwan Kim

    전에도 말씀드렸지만 전 아주 비 권장하는 방법을 썼다고… 그렇지만 그 수준도 나쁘지 않다고.
    다른 곳에서 이렇게 바보 처럼(?) 하는 곳이 있을까 싶습니다. 아마 못 찾으실 꺼에요 +_+a
    더불어 저는 PHP 에서 생성,갱신 python 에서는 read 만 해서 상관없었습니다.python도 write 해도 뭐 관계는 없겠지만,혹시 동시성에 걸리면 또 모르겠네요.
    아참 http://dvdprime.donga.com/ 의 설문 페이지가 말씀하신 구조로 잘 돌아가고 있습니다.

혹시 url pattern 을 db에서 가져올 방법이 있나요? 예를들면 abc, efg 등

 
Seungho Kim

혹시 url pattern 을 db에서 가져올 방법이 있나요? 예를들면 abc, efg 등등 ^[-\w]+/$ 패턴으로 들어옵니다. 근데 url들이 많고 동적으로 변해서 매뉴얼로는 넣을 수가 없습니다. 물론 urls.py에 제일 밑에 넣어놓고 none-named의 우선순위가 낮지만 /login/ 등 다른 url 패턴이랑 엉켜 다른 페이지를 렌딩할까 걱정입니다.

TL;DR url패턴을 동적으로 생성할 방법이 있나요?

  • 박영록

    urls.py는 파이썬 코드니까 아마 가능하겠죠.

    Kwon-Han Bae

    pages 모듈이 그렇게 썻을껍니다.

    Seungho Kim

    장고에서 지원하는게 있으면 쓰려고 했는데 만들어야겠군요. ㅠㅠ 답변감사합니다.

    Chinseok Lee

    혹은 특정 뷰의 url 패턴을 루즈하게 잡고, 그 뷰에서 url 에 따라 분기하는 방법은 어떤가요?

    https://github.com/django/django/blob/master/django/contrib/flatpages/urls.py#L5

    Seungho Kim

    Chinseok Lee 의견 감사합니다.

갑자기 djangoproject.com 이 접속이 안 되어서 멘붕이었는데, 점검 중인가보네

 
Chinseok Lee

갑자기 djangoproject.com 이 접속이 안 되어서 멘붕이었는데, 점검 중인가보네요.

문서는 http://django.readthedocs.org/en/1.8.x/ 를 참고하시기를.

  • Daesung Kang

    저는 오전부터 안되어서 구글의 저장된 페이지에서 보았습니다. 이런 방법도 있네요.

    Chinseok Lee

    복구되었답니다. 🙂

jquery 의 autocomplete를 이용하여 자동검색을 만들어보려하는데 요청은 가는데

 
신영원

jquery 의 autocomplete를 이용하여 자동검색을 만들어보려하는데
요청은 가는데 응답이안오는것 같네요
ajax부분을 어떻게 고쳐야 하나요?..

  • Kyoung Mook Ryu

    httpresponse 말고 jsonresponse를 사용해보세요

    Chinseok Lee

    데이터가 원하는 형태로 오는 지, 브라우저 개발자도구에서 response 를 확인해보세요.

    JsonResponse 는 Django 1.7 에서 추가되었습니다. json.dumps + HttpResponse + content_type 지정을 수행해줍니다. // 쓰신 코드와 같은 일을 합니다.

    Donghyun Cho

    ajax에서 get으로 요청하는데 data에 검색어를 넣어서 보내고 있는데, 이 부분이 잘못 되었습니다. 개발자도구를 보시면 GET으로 요청하는데 ?query=XXX로 데이터가 요청되고 있습니다. query를 term으로 바꿔주시거나 autocomplete이 기본으로 사용하는 query를 python 코드에서 받아주던가 하시면 되겠네요.
    그리고, 장고 orm 쿼리에서 values()를 사용하시면 loop안돌리고 원하시는 결과를 얻으실 수 있을꺼에요. QuerySet을 json으로 덤프하시려면 django에서 지원하는 serializer를 사용하시면 될겁니다.