본문 바로가기

개발53

Flask-SQLAlchemy의 Column에 subquery 사용 class Question(db.Model): ... answer_count = db.column_property(db.select([db.func.count(db.text('qid'))]) .select_from(db.text('answer')) .where(db.text('qid == question.id')) .correlate_except(db.text('answer')) .label('answer_count')) 2020. 12. 21.
Python으로 http 서버 띄우기 python -m http.server 로 띄울 수 있다. 물론 상용으로 쓰면 안되고 개발, 테스트 용도. http.server 모듈을 열어보면 if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() parser.add_argument('--cgi', action='store_true', help='Run as CGI Server') parser.add_argument('--bind', '-b', default='', metavar='ADDRESS', help='Specify alternate bind address ' '[default: all interfaces]') parser.add_argument('--direc.. 2020. 12. 16.
파라메터를 정의하는 새로운 방법 3.8에 함수 파라메터를 정의하는 재밌는 방법이 추가됐다. '/'로 구분하면 그 뒤는 순서대로 넘기거나 키워드로 넘길 수 있다. def func(posonly1, posonly2, /, positional_or_keyword): ... 예) def func1(p1, p2, /, p3, p4): print(p1, p2, p3, p4) func1(1, 2, 3, 4) func1(1, 2, p3=3, p4=4) 3.7에서도 비슷한 방법이 있었는데, '*'로 구분해 그 뒤는 무조건 키워드로 넘겨야한다. def func(arg, *, kw_only1, kw_only2): ... 예) def func2(p1, p2, *, p3, p4): print(p1, p2, p3, p4) # func2(1, 2, 3, 4) 2020. 12. 7.
Flask-restx와 webargs에서 TypeError 처리 webargs로 파싱을 하다 필드가 없거나 없어야 하는 필드가 넘어오거나 타입이 안맞거나 아무튼 문제가 있으면 abort로 예외를 보낸다. 이 경우 기본은 402 응답이 와야하는데 이상하게 아래와 같이 500이 와서 로그를 보니 TypeError: Object of type GeneratedSchema is not JSON serializable 어떤 부분이 문제인지 조금 더 찾아보니 handle_error로 넘어오는 schema를 abort로 넘기고 있다. 스키마를 결과에 보여주고 싶었나? FlaskParser를 제외한 다른 파서들에선 안넘기는데 실수인가 싶기도 하고...실수면 많은 사람들이 알아야하는데 검색해도 안나오는 것을 보면 내쪽이 뭘 잘못했나 싶기도 하고. 아무튼 그 부분이 문제라 아래와 같이.. 2020. 12. 7.