혹시, pyjade 로 tempalting 해보신분 계신가요? 돌아가는데 혹시 불편하신점

 
Sung Chan Lee

혹시, pyjade 로 tempalting 해보신분 계신가요?
돌아가는데 혹시 불편하신점 있으신가해서요~

요즘 회사에서는 jade랑 haml 많이 쓰는데(node, rails),
개인프로젝트는 django로 하는데 적용해본적이 없어서 혹시 써보신분 있으면 추천 좀 해주세용~~
아마도 haml은 django에서 안되는거 같고 SHPAML 이란것도 있긴하던데 말이죠~

  • Jamie J Seol

    불편해요ㅠㅠ jinja (는 아니지만 여튼 쟝고 템플릿) 복잡하게 쓰다보면 띄어쓰기 한두개로 해석하는게 바뀌는 일이 생기고 그럽니다.. 물론 코드 양이 확 감소하는건 좋죠

    Sung Chan Lee

    설진석 그렇군요. Rails 에 비해서 그쪽으로는 좀 약한가보네요.
    어디 아티클에 보니 jinja2로 바꾸는것에도 그 시간에 다른걸해라라는 글도 많더라구요.

    Sung Chan Lee

    설진석 사실 더 중요한건 퍼블리셔분들중에 해당것들을 모르시는분들이 많아서 더 어려운점이 많은듯..

    Jamie J Seol

    html 간소화중에선 python이랑 친한 녀석이 없는것같습니다.. 그나마 pyjade가 제일 안정성이 높은 편인데, 말 그대로 그냥 jinja만 쓰는게 더 빠를수도 있습니다.

Advertisements

저는 개발자도 아니고 공학도도 아닙니다. 석우징님이 진행하는 Django 오프라인 스터디

 
Dong-Hun Lee

저는 개발자도 아니고 공학도도 아닙니다. 석우징님이 진행하는 Django 오프라인 스터디 모임에서 처음 코딩이라는 걸 알게 되었습니다. 여기 Facebook 온라인 모임에도 많은 질문을 했었구요. 많은 분들이 친절하게 답변해 주셔서 아주 허접한 사이트지만 modabens.com(Python 2.7 + Django 1.4 + Nginx + uwsgi)이라는 쇼핑몰도 만들었습니다. FRONT쪽은 프레임웍을 사용하지 않아 모바일에서는 많이 깨지지만 열심히 연구하고 있습니다. 한번씩 보시고 많은 지도 부탁드립니다. ^^

1.3.1 -> 1.4.10 삽질기 (결국) 1. 디렉토리 구조 변경 1.3.1에서는 m

 
Hyoungchul Shim

1.3.1 -> 1.4.10 삽질기 (결국)

1. 디렉토리 구조 변경
1.3.1에서는 myproject 안에 app이 있었다면 1.4.x 대에선 myproject 안에 settings.py, urls.py 등의 파일을 담은 myproject 디렉토리가 생성되고
그 안에 app들이 들어갑니다. 그냥 옮겨주면 된다는..

2. manage.py 변경
그냥 새 프로젝트 생성해서 복사 붙여넣기 하세요. 속에 프로젝트명만 변경해주면 됩니다

3. import 에러
패쓰들이 다 달라져서 전부 수정.. 이건 뭐 짜는 사람마다 다를듯 하네요.

4. gunicorn -> uwsgi
기왕 한김에 uwsgi로 바꿔봤는데, 속도가 진짜 기가맥히네요. 눈에 보일정도
gunicorn을 썼던 이유는… 남들이 추천해줘서고요, uwsgi로 바꾼 이유는 역시… 남들이 추천해줘서…

5. prefetch_related
1.3대와 1.4대에 가장 큰 변화중에 하나가 모델에서 prefetch_related가 가능하다고 들었는데 이게 파이썬으로 join 한다고 하니 성능 향상이 얼마나 있을까 싶지만 그래도 적용해봐야겠네요. 아직 안했어요 ㅇㅇ

6. bulk_create
celery로 돌리고 있는 스크립트 중에 한번에 수백개씩 레코드 생성해주는 부분이 있는데 은근 느리더라구요. 이쪽은 bulk_create 로 변경하면 좋다고 합디다. 바꿔봐야죠

요기까지 했는데 우선은 잘 돌아가네요. 삽질기라 해봤자 별 삽질도 안한듯. 근데 왤케 길게 느껴졌지 ㄷㄷ

그 외에 뭔가 잡다하게 엄청 바뀐거 같은데 아직 정신없어서 확인 못했고, 인제 해봐야지요.

1.5.x 버전으로도 올려야 하는데 이건 또 언제하지;;

하튼 잘 끝냈으니 치킨이나 먹으러 가야겠습니다. 치멘

  • 김슬

    좋은 삽질기 감사합니다

    Hyoungchul Shim

    김슬 치멘

    이경표

    치멘.

    Kenial Lee

    삽질기 감사합니다.

    근데 1의 문제는, 최초 프로젝트 생성시 템플릿 형태만 변경된 것 아닌가요? 기존 프로젝트는 그냥 붙여도 될 것 같은데… 제 경우에는 django 버전이 아니라 엉뚱하게 uwsgi -> gunicorn으로 이전하면서 패스가 꼬여서 setting.py에서 sys.path로 주물럭거려 맞추고 있습니다 -_-;

    아니 그냥… 저만 그런가 싶어서요.

    그리고 치렐루야 헉헉

    Hyoungchul Shim

    이수겸 왠지 트..트렌드를 따라가고싶어서요. 디렉토리가 깊어지니 쿨해진 기분이 드네요!! (?)
    그리고 저는 그냥 각 파일 내에서 import 하는 부분에서 고쳤는데 어떤분 얘기를 들어보면 wsgi파일에서 고치면 된다고 하시는 분도 있고… 햇깔리네요;;

    Moon Soo Kim

    1.5 -> 1.6 은 상대적으로 수월한 것 같습니다. 갠적으로는 1.5 로의 이주가 참 빡셌던 기억이…

    Hyoungchul Shim

    Moon Soo Kim 듣던중 반가운 얘기군요 ㅜㅜ 1.3->1.4 같은 지옥을 다시 경험하라면 그냥 지금 버전 쓸듯..ㅜ

    Moon Soo Kim

    심형철 1.6 마이그레이션은 편안히 지나가시길 기원합니다 ㅎㅎ 그건 그렇고 1.5 마이그레이션 글에 댓글 단 줄 알았는데 여기에 달았네요 ㅋ…

    Hyoungchul Shim

    Moon Soo Kim ㅋㅋㅋ 저도 눈치를 못채고 있었습니다 ㅋㅋㅋ

Remote Job opportunity for UK client any one inter

 
Sertaç Nz

Remote Job opportunity for UK client any one interested? Apply !

django-rest-framework의 serializer를 사용중인데… 이런 상황

 
Han Cold Kim

django-rest-framework의 serializer를 사용중인데…

이런 상황에서 좋은 해결책을 알고계시거나 떠오르시는분 계신가요…??

일단 serializers.py의 소스고요…

상황은 이렇습니다…

ModelSerializer를 사용하여 장고가 제공하는 User에 대한 UserSerializer를 정의하고있는데…

User에는 password는 있지만 password2는 없기때문에

serializer에서 custom field로 추가해주었습니다.

그리고 password와 password2가 같은 값인지 비교하기위해

def validate_password2(self, attrs, source)를 구현하였습니다.

이제 문제는 이겁니다…

password2가 User에 없기때문에… serializer.is_valid()를 호출할때

TypeError: ‘password2’ is an invalid keyword argument for this function

위와 같은 에러가 나더라고요…

그래서 장고의 User에 대한 ModelForm은 어떻게 구현되어있나 참고했는데…

https://github.com/django/django/blob/1.6/django/contrib/auth/forms.py#L67-L121

비슷한 방식으로 했지만

장고의 ModelForm에선 fields에 password2를 포함시키지 않았더라고요.

그래서 똑같이 serializer에서도 해봤지만…

password2를 빼니까…

validate_password2 함수를 호출하지 않아서…

유효성 검증이 되질 않네요…;;

어떻게 해야할까요??

  • Sung Chan Lee

    해보진 않았지만 password 를 valid override 하면 안되나요?

    Han Cold Kim

    오… 한번 해보겠습니다.

    김슬

    편법 같지만 저는 required만 False로 해놓고 쓰고 있습니다..;

    Han Cold Kim

    이성찬님 그렇게 해보니까… validate_password에서 attr에 password2 필드가 없네요… ㅠㅠ

    Han Cold Kim

    김슬님 어떻게요…???

    Sung Chan Lee

    김한기 크헉 그렇군요~

    Jacob Seongwoon Lee

    오.. 제가 안그래도 딱 작업하려던 부분이었는데 답변오면 참고하겠습니다.

    Chinseok Lee

    serializer 에 pasword2 필드를 추가로 등록하셨나요?

    Chinseok Lee

    아. 추가하셨다고 써놓으셨군요. 흠.

    Chinseok Lee

    validate_password2 를 이렇게 해보세요.

    —-

    from django.contrib.auth.models import User
    from rest_framework import serializers

    class UserSerializer(serializers.ModelSerializer):
    … password2 = serializers.CharField()

    … def validate_password2(self, attrs, source):
    ……. password2 = attrs.pop(source)
    ……. if attrs[‘password’] != password2:
    ……….. raise serializers.ValidationError(‘password mismatch’)
    …….. return attrs

    … class Meta:
    ……. model = User

    Han Cold Kim

    오오오… 벨리데이션만 하고 팝으로 빼버리고 하는 방법이군요… 오 왠지 될꺼 같아요 ㅋㅋ 당장 해보겠습니다!

    Han Cold Kim

    잘됩니다!!! 후후후 감사합니다 !!!

    Han Cold Kim

    아 산넘어 산입니다…;;

    이진석님께서 알려주신 방법대로 벨리데이션 함수에서 pop로 attr에서 제거하여 정상적으로 진행되었지만…

    serializer.data를 하니 User에 password2 속성이 없다고 나오네요…;;

    http://django-rest-framework.org/api-guide/serializers#serializing-objects

    위와 같이 나와야하는데…;;

    이것도 극복할 수 있을까요?

    Chinseok Lee

    흠. to_native 를 재정의하는 방법밖에 모르겠네요. 😦

    from django.contrib.auth.models import User
    from rest_framework import serializers

    class UserSerializer(serializers.ModelSerializer):
    … password2 = serializers.CharField()

    … def validate_password2(self, attrs, source):
    ……. password2 = attrs.pop(source)
    ……. if attrs[‘password’] != password2:
    ……….. raise serializers.ValidationError(‘password mismatch’)
    …….. return attrs

    … def to_native(self, obj):
    ……. self.fields.pop(‘password2’)
    ……. return super(UserSerializer, self).to_native(obj)

    … class Meta:
    ……. model = User

    Han Cold Kim

    오… 그렇군요… 시도해보겠습니다!

    Han Cold Kim

    휴… 시리얼라이저 완성하는데 오래걸렸네요..

    오래 걸린 이유는…

    ‘근데 이 문제 100% 나 말고 겪은 사람 있을꺼다’라는 생각이들어서…

    django-rest-framework 구글 그룹스 검색 좀 하고 이것저것 하느라 좀 늦었네요…

    혹시나 코드가 필요하신분이 계실꺼 같아 간단히 gist로 붙여넣어두었습니다..

    serializer.data시 object에 password2필드가 없다고 나오는 문제는 구글 그룹스 내에서도 이진석님이 제시해주신방법(바로 윗윗 댓글)처럼 해결하라는걸 종종 보았고,

    또 문제가 serializer.data시 password도 나오는 문제가있었는데. 그건 data함수를 오버라이딩하여 password를 지워줘서 해결하였습니다…!

    도움주신 모든분들 감사합니다.

    참조: https://groups.google.com/forum/?fromgroups#!searchin/django-rest-framework/write-only

    Jacob Seongwoon Lee

    Han Kim 코드 감사합니다. 쭉 한번 봐야겠네요 🙂

    Steve Seungduk Kim

    불필요하게 password2를 보관할 필요는 없을 것 같아 보여요… password를 검사한는건 클라이언트에서 처리하는게 낫지 않을까요?

    Han Cold Kim

    둘다 하려고요…

    Han Cold Kim

    그리고 해당 코드를 보심 아시겠지만 password2를 보관하진 않습니다.

    Steve Seungduk Kim

    model에 추가하진 않고 serializer에서만 검사를 한다는 것 같은데, 그렇다 하더라도 굳이 할 이유가… 그냥 개인적인 생각이에요 ㅎㅎ

    Han Cold Kim

    뭐 꼭 할필요는 없죠…

여태까지 1.3.1 쓰다가 1.4를 지나 1.5 버전으로 올리려고 합니다 잘 되길 장고신

 
Hyoungchul Shim

여태까지 1.3.1 쓰다가 1.4를 지나 1.5 버전으로 올리려고 합니다

잘 되길 장고신께 빌어주세요

감사합니다

  • 김슬

    완료하신 후 삽질기를 기대해봅니다.

    Hyoungchul Shim

    김슬 삽질을 안한 삽질기를 올리고싶네요…

    Sung Chan Lee

    레일즈 2. 에서 4.
    으로 올리는거보다 쉬울꺼에요… 몇일째 삽질 중…
    장고는 작년에 한번 올려본적있었는데.. ㅠ.ㅠ

    Hyoungchul Shim

    이성찬 그렇군요 레일즈 ㄷㄷ 저는 지금 파일 구조가 달라져서 삽질중입니다.. 삽질만은 안하려 했건만 뭐가 잔뜩 바꼈네요 ㅜㅜ

    이경표

    고생하시네요. 저두 지금 하나를 올려야하는데 시작할 엄두를 못내고 있네요.

    Hyoungchul Shim

    이경표 저는 새 테스트환경 하나 만들어놓고 하나씩 해보고 있습니다. 여기서 멀쩡히 돌아가면 그대로 기존 테섭에 반영해서 다시 테스트 해보고, 그 뒤에 실섭 반영해야죠. 으엌 갈길이 멉니다 ㄷㄷ

    이경표

    심형철 화이팅!!

    Hwan Kim

    저도 … 1.3에서 1.5로 업글중인데 예상하지 못한 문제들 이곳저곳 터지고 있습니다….

    Dong-Hun Lee

    저는 1.4 쓰는데 겁나서 그냥 써요.ㅜㅜ

    Jung Kyoung Up

    1.6으로 올리셔야죠. 파이팅.

    Hyoungchul Shim

    김환 저도 인제 1.4로 올렸는데 수많은 문제들과 씨름… 1.5는 또 엄청 바꼈다던데 걱정되네요 ㄷㄷ

    Hyoungchul Shim

    이동훈 저도 그렇게 2년 넘게 1.3대를 썼었죠..ㅜㅜ

    Hyoungchul Shim

    정경업 선구자분들이 실컷 삽질하고 난 뒤에 따라갈래요 ㄷㄷ