Python
Simple 하게 Python 에서 orm 사용하기
Simple 하게 Python 에서 orm 사용하기
2021.10.19python 에서 orm을 사용할일이 생겨서 orm을 찾던중 sqlAlchemy 는 너무 문서가 잘 읽히지 않고 옜날 느낌이라서.. https://docs.sqlalchemy.org/en/14/ SQLAlchemy Documentation — SQLAlchemy 1.4 Documentation docs.sqlalchemy.org 좀더 문서화가 잘 되어있고 github 에서도 star 가 많은것을 찾다가 peewee를 찾게되었습니다. http://docs.peewee-orm.com/en/latest/ peewee — peewee 3.14.4 documentation Peewee is a simple and small ORM. It has few (but expressive) concepts, making ..
ubuntu 에서 opencv 로 h264 codec 비디오 파일 만들기
ubuntu 에서 opencv 로 h264 codec 비디오 파일 만들기
2021.09.01개발환경 -fast api -docker -python3.9 -postgres 를 사용하였습니다. 참고하시길 바랍니다. 이글을 쓰게된 이유는 python에서 openvcv 를 사용해 영상을 N x M 으로 자른뒤 각각의 html5 video 태그에 뿌려주는 걸 개발하다가 생긴 문제에 대해서 해결과정을 적으려고 합니다. html5 video 태그의 표준 코덱은 H 2 6 4 코덱입니다. cv2.VideoWriter_fourcc(*"H264") 하지만 docker build 이후 영상을 자르면 다음과 같은 에러를 내뱉으며 영상을 자를수 없다고 합니다. https://stackoverflow.com/questions/33134985/cv2-videowriter-will-not-write-file-using-f..
python - default 인자 와 doc string 을 사용한 동적인 에러처리
python - default 인자 와 doc string 을 사용한 동적인 에러처리
2021.08.22디폴트 인자 값으로 None을 사용하는 것은 인자가 가변적인 경우 특히 중요하다. JSON 데이터로 인코딩된 값을 읽으려고하는데 데이터 디코딩에 실패하면 기본값으로 빈 dict 를 반환하고싶다고 가정해보자. import json def decode(data, default={}): try: return json.loads(data) except ValueError: return default 이 코드는 몇가지 문제가 있다. default 값이 모듈을 로드하는 시점에 단 한번만 평가되기 때문에 default에 지정된 dict 가 decode 함수 호출에 모두 공유된다. 이로인해 매우 놀라운 결과가 나타난다.. foo = decode('error data') foo['A'] = 10 bar = decode(..
bootstrap 을 이용한 로그인 화면 구현하기
bootstrap 을 이용한 로그인 화면 구현하기
2020.12.08혼자서 개발을 하기 위해서 html 과 css 까지 건드리기엔 손이 많이 가는 부분입니다. 그래서 bootstrap 을 이용해서 미리 만들어진 코드를 가지고 저희에 입맛에 맞게 조금씩 수정할 예정입니다. getbootstrap.com/ Bootstrap The most popular HTML, CSS, and JS library in the world. getbootstrap.com 부트스트랩 site 에 접속하셔서 Examples --> Download examples 를 클릭하고 예제 파일들을 다운받습니다. 안에 많은 파일들이 존재합니다 저는 로그인 화면을 사용할려고 하기때문에 sign-in 파일을 사용합니다. flask에서 app.py 파일을 메인으로 한다고 가정하에 같은 경로에 templates ..
Decorator
Decorator
2020.12.07데코레이터 (Decorator) 함수 앞뒤에 기능을 추가해서 손쉽게 함수를 활용할 수 있는 기법 혹시 다음과 같이 @가 사용된 파이썬 코드를 본 적이 있으신지? @decorator_func def function(): print("what is decorator?") 위 코드에서 @decorator_func 부분이 데코레이터임 def logger_login(): print("Dave login") logger_login() 시간을 앞뒤로 추가하고 싶다. 이렇게 넣으면 됩니다. import datetime def logger_login(): print(datetime.datetime.now()) print("Dave login") print(datetime.datetime.now()) logger_logi..
데코레이터를 이해하기전 알아야 할것들
데코레이터를 이해하기전 알아야 할것들
2020.12.06first_class 함수 다음과 같이 다룰 수 있는 함수를 first_class 함수라고 부름 함수 자체를 변수에 저장가능 함수의 인자에 다른 함수를 인수로 전달 가능 함수의 반환 값(return 값)으로 함수를 전달 가능 파이썬과 First_class 함수 사실 파이썬에서는 모든 것이 객체! 파이썬 함수도 객체로 되어 있어서, 기본 함수 기능 이외 객체 와 같은 활용이 가능 즉 파이썬의 함수들은 First-class 함수로 사용가능 언어별 일급함수 지원여부 python, Go, javascript, Kotlin 은 일급함수 지원 c언어 등은 미지원 def calc_square(digit): return digit * digit print(calc_square(2)) def list_square(fun..
설문조사 앱 만들기2
설문조사 앱 만들기2
2020.12.05데이터 베이스 만들기 --> python manage.py migrate 보통은 데이터 베이스 관련 설정이 끝난 직후에 실행합니다. 데이터베이스를 만들었으니 앱에서 사용할 모델을 작성하겠습니다. 모델만들기 장고에서 모델은 데이터베이스의 구조도입니다. 데이터 베이스에 어떤 테이블을 만들고 어떤 컬럼을 갖게 할 것인지 결정합니다. 또 해당 컬럼의 제약 조건까지도 모델에서 결정합니다. 이 모델은 보통 modles.py 에 작성하고 클래스 형태입니다. 투표 앱을 위한 두 개의 모델을 만들어 보겠습니다. polls/models.py 파일에 코드를 작성합니다. from django.db import models class Question(models.Model): question_text = models.CharF..
웹 서버 시작하기
웹 서버 시작하기
2020.12.04웹 서버를 실행하는 명령어의 옵션을 살펴봅시다 기본 웹서버는 8000포트를 기본으로 동작합니다. 포트를 변경하고 싶다면 포트 번호를 인수로 전달 합니다. python manage.py 8080 만약 ip를 직접 지정하거나 같은 네트워크 망 안에서 접속이 가능 하도록 하고 싶다면 다음 명령어를 입력할 수 있습니다. python manage.py 0.0.0.0:8000 혹은 python manage.py 0:8000 이 명령어에서 IP주소 0은 0.0.0.0의 약어입니다. 해당 형태로 동작 시킬 때는 settings.py 에 있는 ALLOWED_HOSTS를 설정해야 합니다. 이 경량 웹서버를 이용해 실제 서버에 배포하지 않아도 우리는 웹 서비스의 변경 사항을 테스트 해볼 수 있습니다. 또 서버가 실행 중이어..
django 시작하기
django 시작하기
2020.12.04필자 는 MAC을 사용하기 있기 때문에 MAC 을 기준으로 적어 나가겠습니다. 파이참 프로 버전 기준으로 venv 를 사용해 가상환경으로 dajngo 프로젝트를 생성했습니다. django가 설치가 안되신분들은 --> pip install django 를 하신뒤 프로젝트를 만드시면 됩니다. 프로젝트 만들기 --> django-admin startproject config . 위의 명령을 입력할 때 주의 할 점은 config 다음에 한칸을 띄우고 .(점)이 있다는 것입니다. 이 점은 현재 폴더에 파일을 만들겠다는 의미입니다. 장고 프로젝트를 만들면 config 폴더가 생기고 manage.py 라는 파일이 만들어 집니다. - 장고로 프로젝트를 생성했기 때문에 우리는 당장이라도 웹 사이트를 사용할 수 있는 상태..
벡터 클래스의 부활
벡터 클래스의 부활
2020.12.04from array import array import math class Vector2d: typecode = 'd' def __init__(self, x, y): self.x = float(x) self.y = float(y) def __iter__(self): return (i for i in (self.x, self.y)) def __repr__(self): class_name = type(self).__name__ return '{}({!r}, {!r})'.format(class_name, *self) def __str__(self): return str(tuple(self)) def __bytes__(self): return (bytes([ord(self.typecode)]) + bytes(a..
WeakValueDictionary 촌극
WeakValueDictionary 촌극
2020.12.04WeakValueDictionary 클래스는 객체애 대한 약한 참조를 값으로 가지는 가변 매핑을 구현한다. 참조된 객체가 프로그램 다른 곳에서 가비지 컬렉트되면 해당키도 WeakValueDictonary 에서 자동 제거된다. 이 클래스는 일반적으로 캐시를 구현하기 위해 사용된다. class Cheese: def __init__(self, kind): self.kind = kind def __repr__(self): return 'Cheese(%r)' % self.kind import weakref stock = weakref.WeakValueDictionary() catalog = [Cheese('Red Leicester'), Cheese('Tilsit'), Cheese('Brie'), Cheese('P..
약한참조
약한참조
2020.12.02객체가 메모리에 유지되거나 유지되지 않도록 만드는것은 참조의 존재여부다. 객체 참조 카운트가 0이면 가비지 컬렉터는 해당 객체를 제거한다. 그러나 불필요하게 객체를 유지시키지 않으면서 객체를 참조할 수 있으면 도움이 되는 경우가 종종 있다. 캐시가 대표적인 경우다. 약한 참조는 참조 카운트를 증가시키지 않고 객체를 참조한다. 참조의 대상인 객체를 참조 대상 (referent) 이라고 한다. 따라서 약한 참조는 참조 대상이 가비지 컬렉트 되는것을 방지하지 않는다고 말할 수 있다. 약한 참조는 캐시 어플리케이션에서 유용하게 사용된다. 캐시가 참조하고 있다고 해서 캐시된 객체가 계속 남아 있기 원치 않기 때문이다. import weakref a_set = {0, 1} wref = weakref.ref(a_se..