KTH 의 H3 행사에서 실시간 중계도 하던데, “파이썬으로 클라우드하고 싶어요” 를 못

 
Chinseok Lee

KTH 의 H3 행사에서 실시간 중계도 하던데, “파이썬으로 클라우드하고 싶어요” 를 못 봐서 아쉽네요.
http://h3.paran.com/2011/session/python-and-cloud.html

발표자료와 발표영상이 언제쯤 공개될려나요. 오매불망~~~*

  • Sukchen Kang

    파이썬 장점 관련 설명과 GIL 이슈, 이를 위한 multiprocess 모듈과 parallel python(http://www.parallelpython.com/), mrJob(https://github.com/Yelp/mrjob) 설명이였습니다. 요약을 이렇게 하긴 했지만, GIL 관련 이슈 설명이나 병렬/분산 처리 관련 설명을 적절한 유머와 함께 깔끔하게 해주신 점이 인상깊더군요.

    Sukchen Kang

    프레젠테이션은 http://www.slideshare.net/devparan/track3-6 에서 확인하실 수 있습니다. (‘개그버전’ 이군요..;; )

    Chinseok Lee

    Sukchen Kang 감사합니다. 🙂

게임동아 관리자 화면 중 기사 관리 부분을 올려봅니다 Django admin을 열심히 활용

 
Jung Kyoung Up

게임동아 관리자 화면 중 기사 관리 부분을 올려봅니다 Django admin을 열심히 활용해보고자 발악한 모습입니다. 다소 넓지만, 한 화면에 기사에 대한 많은 정보를 넣고, 게임이나 장르같은 관계 정보를 조작할수도 있고 포탈에 배포도 할 수 있습니다. MtoM 관계 표현하는게 좀 짜증났었습니다.


  • Lee Jun Haeng

    정말 admin을 그대로 쓰고계시군요. +.+

    장덕현

    메뉴명이 영문이라 괜찮나요? 사용자들이 불편해 하지는 않아요?

    Jung Kyoung Up

    @장덕현 앱이름 변경은 아직 못찾았지만 모델이름은 메타클레스로 한글로 써놔서 알아볼만합니다

    장덕현

    정경업 모델의 메타클래스에서 앱라벨값을 변경하니까 테이블명에 한글이 들어가져서 다른 방법이 필요할 것 같은 어떤 방법으로 하셨나요?

    장덕현

    verbose_name_plural 이거군요. ;; 한참 찾았네요

    김범준

    Django admin이 무척 효율적으로 보이는데요. 사례소개 해주셔서 감사합니다. 아주 잘 봤습니다. ^^

혹시 Django에서 group by를 이용해서 원하는 개수의 group을 한번의 quer

 
Eunchan Kim

혹시 Django에서 group by를 이용해서 원하는 개수의 group을 한번의 query로 가져올 수 있는 방법이 있을까요? 글을 date로 묶었는데 최근 n개의 date 글을 가져오려고 합니다. 현재는 date로 묶어서 하나씩 하나씩 가져오는 방식을 하고 있는데요. 이거 model구조를 바꾸는게 나을것 같기도해서 자문을 구합니다 .;;

– Model에서 date와 post간의 relation을 만든다.
– group by로 가져온다.

두 방법중 어떤게 나을까요? 초보가 django로 홈페이지를 보수해보려고 낑낑대면서 풀리지 않는 문제입니다. ㅜ.ㅜ

  • Chinseok Lee

    현재 Post 의 모델 구조를 보여주시면, 더 좋은 답변을 얻으실 수 있지 않을까요?

    Jung Kyoung Up

    질문을 제대로 이해했는지 모르겠지만 혹시나 해서, 게임동아에 7일 기준으로 최신 인기 뉴스를 읽어오는 위젯 소스를 적어봅니다.

    WIDGET_LATEST_DAY = 7

    target_date = datetime.datetime.today() – datetime.timedelta(days=WIDGET_LATEST_DAY)

    article_best = Article.objects.filter(module__name=’news’, created__gt=target_date).order_by(‘-count_view’,)[:5]

    길어서 자동 줄바꿈되길래 한줄마다 간격을 좀 주었습니다.

    Eunchan Kim

    사실 구조랄 것도 없습니다. ;; 그저 별보는거 관측일지라서요.

    현재 코드 접근이 안되긴 하는데 간단히 다시 입력해보자면 아래와 같습니다.

    class Journal (models.Model):
    date = models.DateField()
    blah blah blah
    body = TextField()

    이게 하루 관측을 가면 대상별로 글이 작성이 되기때문하루에 본 대상만큼의 post가 쌓이게 되는데 이걸 이틀치 또는 7일치 (기간으로 7일이 아닌 최근 관측일로부터 7일만큼의 유효한 관측일) 등을 뽑아보고 싶은 것이었습니다.

    아무래도… Model구조를 바꿔야 겠네요 -_-;;

    Taeho Kim

    https://docs.djangoproject.com/en/1.3/ref/models/querysets/#dates 이게 원하시는 것 같은데요…

    Kee-un Cho

    꼭 하나의 쿼리로 돼야 하는 건가요?
    DAYS = 7 # any number of dates you want
    dt = Journal.objects.values(‘date’).dictinct().order_by(‘-date’)[DAYS-1]
    rows = Journal.objects.filter(date__gte=dt)
    이정도로 타협을; ㅋ

    Eunchan Kim

    @조기언 네 저도 지금은 그런방법으로 하고 있습니다. 혹시 하나로 가능한지 궁금해서요 🙂 만일 Model구조를

    class Date(models.Model):
    date = DateField()

    class Relationship(models.Model):
    date = ForeignKey(Date)
    journal = ManyToManyField(Journal)

    class Journal(models.Model):
    date = ForeignKey(Date,through=RelationShip)
    body = TextField()

    이런 방식으로 하면 Relationship을 가져옴으로써 한번에 해결이 가능할까요?

    Chinseok Lee

    “하나의 쿼리” 가 반드시 빠르게 동작하는 것은 아닌 듯 합니다.

    제가 보기에는 2개의 쿼리 방법이 괜찮은 듯 하네요.

    Kee-un Cho

    김은찬 음.. 모델을 쪼개신 게 오히려 산으로 간다는 느낌이네요; ㅋ 암튼, 하나의 쿼리를 고집해도 그 쿼리에 sub쿼리가 포함되는 구조라면 그건 하나의 쿼리가 아닐 수 있죠.. ^^; 지금 들고 계신 예제는 그렇게 relation이 복잡해질 이유가 없는 것 같습니다;;

    Chinseok Lee

    유효한 관측일 날짜정보를 캐싱해두는 방법도 괜찮습니다.

    Eunchan Kim

    답변 감사합니다. 쿼리 두개로 하는 지금 방식 그대로 가야겠네요 ^^

사이트를 만들다보면 단순히 하나의 모델에서 데이터를 읽고 쓰는게 아니라 다른 모델과 연계되

 
Jung Kyoung Up

사이트를 만들다보면 단순히 하나의 모델에서 데이터를 읽고 쓰는게 아니라 다른 모델과 연계되어 쓰이는일이 대부분입니다.

관계가 맺어져있는 모델들이 save, delete 될때 다른 모델도 무언가 처리를 해야해하는 로직을 국내 유일한 Django 책만을 보고 만들면, views.py에서 관계에 관한 처리도 다 해버리게 되더군요.

삽질을 좀 하고 보니, models.py에 관계에 관한 로직을 다 넣어놓고 views.py에서는 정말 보여지는 페이지를 만드는 부분에 집중할 수 있었습니다.

Django admin을 실제 사이트 운영에 써보고자 삽질한 결과입니다.(….)

IT동아는 데이터 관리를 위해 직접 다 페이지를 만들어서 썼지만, 게임동아는 admin만을 활용해서 구성되어있습니다. admin을 최대한 활용하는게 몇배는 더 나은것 같습니다.

  • 김범준

    저도 책보고 공부할때 Django Model을 썼었는데, 실제 사이트 구축시에 DB가 Sybase라서 ㅠㅠ, 우짤수 없이 sql을 직접써서 Django의 진면목을 느끼지 못하는게 안타까울 따름입니다.
    Sybase가 아니더라도 그 많은 Sql을 모두 ORM화 하는것도 사실 무시무시하는 작업이어서, sqlalchemy도 그저 바라만 보고 있지요. ^^

    Chinseok Lee

    MVC 패턴에서 컨트롤러(django에서는 View) 가 비대해지는 경향이 있는데, Model 을 풍성하게 만드는게 유지보수 측면에서도 나은 듯 합니다.

    Joongi Kim

    맞아요. 가능한 많은 데이터 관련 로직을 모델로 몰아놓는 것이 추상화에 도움이 됩니다.

    Yeaji Shin

    이미 그렇게 된 싸이트의 경우에는 처음에 구조 이해하기가 좀 힘이 들긴 합니다…. 만 기능구현에 10줄이 안들어갈 수 있는 장점이 있지요.

1년전에 짠 제 Django 소스(IT동아 기사 퍼블리싱 부분)를 스스로 고치면서 느낍니다

 
Jung Kyoung Up

1년전에 짠 제 Django 소스(IT동아 기사 퍼블리싱 부분)를 스스로 고치면서 느낍니다. 아.. 참 진짜 그지같이 만들어놨네.. 아오 ㅠㅠ 맘같아서는 싹 뒤집고 다시 만들고 싶습니다.

  • Jung Kyoung Up

    문현진 리팩토링은 좋지만 루비네요 =ㅁ=;;

DB에 입력된 데이타 출력해 주는 부분 관련해서 문의좀 드리려고 합니다. 제가 원하는 내용

 
Hyun-min Choi

DB에 입력된 데이타 출력해 주는 부분 관련해서 문의좀 드리려고 합니다.
제가 원하는 내용은요.
하나의 html 파일에서 서로 다른 필드 개수를 가지는 model을 리스팅 하는 부분관련해서 입니다.
예를 들어 Item(필드 5개), Location(필드 개수 7개) 과 같이 2개의 model 이 있는데요.
list.html 라는 템플릿 파일에서 위 두개의 모델이 모두 표현이 되려고 합니다.

콘텍스트로 item 을 주면
T1 T2 T3 T4 T5
——————-
ca1 ca2 ca3 ca4 ca5
cb1 cb2 cb3 cb4 cb5
cc1 cc2 cc3 cc4 cc5

콘텍스트로 location 을 주면
T1 T2 T3 T4 T5 T6 T7
—————————-
ca1 ca2 ca3 ca4 ca5 ca6 ca7
cb1 cb2 cb3 cb4 cb5 cb6 cb7
cc1 cc2 cc3 cc4 cc5 cc6 cc7

admin template 에서 list_display 변수와 비슷하게
특정 공간에서 보여줄 필드를 제어해주는 부분이 있으면
좋을텐데요.
혹시 이런 문제에 도움이 될만한 문서 링크라도 부탁드립니다.
감사합니다.

  • Chinseok Lee

    다음과 같이 하는 건, 아닌가요? 흠.

    {% if item %}
    T1 T2 T3 T4 T5
    ——————-
    ca1 ca2 ca3 ca4 ca5
    cb1 cb2 cb3 cb4 cb5
    cc1 cc2 cc3 cc4 cc5

    {% endif %}

    {% if location %}
    T1 T2 T3 T4 T5 T6 T7
    —————————-
    ca1 ca2 ca3 ca4 ca5 ca6 ca7
    cb1 cb2 cb3 cb4 cb5 cb6 cb7
    cc1 cc2 cc3 cc4 cc5 cc6 cc7

    {% endif %}

    Hyun-min Choi

    안녕하세요. 제가 올린 질문에 관심 가져 주셔서 감사합니다.
    제가 궁금했던 부분을 더 추가하면요.

    view 에서는 model 객체에 상관이 없이, 똑같은 변수명으로 (아래에서는 items_list)을 템플릿에 보내구요.

    # views.py
    def ListItem(request):
    ..
    m_list = Item.objects.all()
    context = { ‘items_list’ : m_list ,}
    return render_to_response(‘list.html’, context)

    def ListLocation(request):
    ..
    m_list = Location.objects.all()
    context = { ‘items_list’ : m_list ,}
    return render_to_response(‘list.html’, context)

    템플릿에서는 대상 items_list가 item model 또는 location model이 될 수 있습니다.
    그리고 제가 원하는 것은 model 여부에 상관이 없이 대상 model 이 가지는 필드 수만큼 모두 출력을 하려고 합니다.

    # list.html
    {% for item in items_list %}

    근데 문제는
    {{ item.??? }}
    이런식으로 ??? 에 해당 model이 가지는 필드명을 명시해야만 제대로 된 값이 출력이 되더라구요.

    템플릿에서는 items_list이 어떤 model인지 모를 경우라고 가정하고,
    model의 필드 개수만큼 출력을 하려고 하는데요.

    문제는 아마도 대상 출력하는 방식으로 좀 정리가 될 것같데요.
    조금만 더 도움 부탁드립니다.
    감사합니다.

    Chinseok Lee

    item.__class__._meta.get_all_field_names() 을 통해, 필드명 리스트를 얻을 수 있습니다.

    Hyun-min Choi

    아하. 간단한 내장 함수가 있었네요.ㅎ
    감사합니다. ~~