일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- crud
- pandas
- Class
- git
- dict
- NeXT
- wetube
- react
- 중급파이썬
- merge
- AWS
- Props
- RDS
- 파이썬
- node
- flask
- S3
- 카톡
- socket io
- 튜플
- 채팅
- SSA
- docker
- TypeScript
- async
- Vue
- SAA
- lambda
- MongoDB
- EC2
- Today
- Total
목록전체 글 (420)
초보 개발자
포토 모델에 파일을 업로드하면 지금은 서버에 바로 업로드가 되고 admin페이지에서 이걸 클릭하면 찾을 수 없다고 나온다. 그 이유는 photos는 아직 URL이 없기 때문이다. settings에 가서 MEDIA_ROOT옵션을 통해서 장고에게 어디다 우리가 업로드한 파일을 써야할 지 말해주는 것이다. 이건 절대 경로를 주어야 한다. 그리고 다시 업로드를 시켜보면 uploads안에 저장이 되어있는 것을 확인할 수 있다. 일단 다시 돌아와서 다음과 같이 upload_to를 지정해주었다. makemigrations와 migrate를 해준 뒤 다시 업로드해주면, 우리가 지정해준 경로로 잘 저장이 된 것을 확인할 수 있다. 아까는 media_root가 base_dir로 되어있었고 upload_to에 값이 없어서 ..
set이 작동하는 방식은 간단하다. room이 user를 가리키고 있다면 user.room_set 을통해 user에서 room으로 접근이 가능하다. 그럼 review모델도 User를 가리키고 있기에 review_set.all()을 통해서도 확인이 가능하다. 여기서 이름을 room_set, review_set 말고, 우리가 지정해줄 수도 있다. 그건 User측에서 하는 것이 아니라, 가리키는 쪽 즉, Room과 Review 모델에서 지정해주어야 한다. host에 related_name옵션을 rooms로 바꾸어보자. related_name 그럼 전에 room_set으로 되어있던것이 지금은 rooms로 바뀐 것을 확인할 수 있다. 바꾼 이상 room_set으로는 접근이 불가하다. 먼저 room을 하나 구해준다..
[함수를 만들어서 반환하는 함수] 데코레이터를 이해하기 위해 네스티드 함수와 클로저를 공부해보자. 함수는 객체이고 함수의 이름은 객체를 참조하는 변수이다. 함수 안에서 정의된 함수를 nested함수라고한다. maker는 위에서 정의한 nested함수를 반환하는 함수이다. 우리가 maker라는 함수를 호출하면서 숫자 2를 전달하고 있다. 그럼 함수는 return 2 * n 를 반환하는 형태로 만들어 질 것이다. 그 다음에는 숫자 3을 전달하고 maker함수 안에서 3 * n을 반환하는 함수를 만들었다. [클로저 (Closure)] 앞서 보인 예제에서 한가지 짚고 넘어갈 내용이 있다. m은 maker 안에서만 존재하는 변수인데.. maker 밖에서도 m이 유효할까??? 변수 m은 maker함수에서 선언된 변..
[안전하게 접근하기] 객체가 갖는 값에 직접 접근하는 것은 오류의 확률을 높이므로 메소드를 통해 접근하는 것이 안전하다. 따라서 언더바 2개를 사용하여 변수를 만들고, 이를 외부에서 접근하지 못하도록 설정한 뒤 getter와 setter을 생성하여 이 걸로 값을 변경 및 조회를 하도록 하는 경우가 있다. 하지만 이 경우에는 복잡해질 수 있다. 예를들어 전에는 n.a = 5 n.a 이런식으로 값을 직접 변경 및 조회가 가능했지만 이젠 n.seta(5) n.geta() 이런식으로 변경 및 조회를 해야하니까 말이다. 따라서 아래와 같이 작성을 해보자 프로퍼티를 함수를 호출하면서 프로퍼티 객체를 생성한다. 그리고 그 객체를 n에 넣어준 것이다. 그리고 인자에 2개의 메서드를 넣어주었다. 첫번째에는 getter ..
[__dict__의 단점과 그 해결책] 파이썬은 __dict__의 이름으로 객체 하나당 하나의 딕셔너리를 할당한다. 그런데 딕셔너리는 리스트나 튜플에 비해 메모리 사용량이 많다. 따라서 많은 수의 객체를 생성해야 하는 경우에 부담이 될 수 있다. 다음과 같이 __slots__를 추가해주면 dict가 생성이 되지 않고 변수는 n과 a밖에 설정할 수 없다는 뜻이다. 따라서 self.m 이렇게 정의가 불가능하고 self.n, self,a 와 같이 설정해야한다. 그리고 전 처럼 p.b = 10 이렇게 접근 및 생성이 불가능하다. 전에는 __dict__라는 딕셔너리가 생성이 되어 여기서 변수를 관리하고 그걸 참조하는 역할을 하였지만 지금은 아니기 때문에 변수 n,a 두개만 가지고 있는 객체라고 할 수 있다. 즉 ..
위와 같은 클래스를 만들었다고 해보자. add_age는 나이를 추가해주는 함수이다. 나이는 기본적으로 음수가 될 수 없으니 사전에 음수를 차단하는 기능을 만들어주었다. 그리고 p라는 객체를 만들고 나이를 하나 추가해주었다. 하지만 age에 직접접근하여 -20을 해주었더니 결국 음수를 더해버렸다. 이렇게 p.age처럼 직접 변수에 접근하는 것을 직접접근이라고한다. 우리는 보안을 높이기 위해 간접접근 하는 방법을 배워보려고한다. 그 방법은 변수 이름 앞에 언더바 2개를 붙이는 것이다 __ 이렇게 붙이면 외부에서 접근을 못하도록 파이썬이 막아준다. 클래스 내에서는 당연히 __변수로 접근이 가능하다. 위 처럼 __를 붙여주고 다시 실행시켜보면 아래와 같은 오류가 난다. Person에는 age라는 변수가 없다고 ..
[연산자 오버로딩 간단히 이해하기] 연산자 오버로드란 +, - 와 같은 연산자에 다른 기능을 입히는 것을 말한다. 이 Account는 계좌 클래스이고 이 클래스의 메서드로 스페셜 메소드를 주었다. __add__란 acnt + 100 이라는 구문은 '객체' + '인자' 로 인식을하여 acnt에 __add__라는 것이 있으면 +를 __add__함수로 인식하고 그 오른 쪽에 있는 것을 인자로 인식을 한다. acnt - 100도 마찬가지이다. acnt 옆에 -가있다면 먼저 acnt가 메서드에 __sub__라는 것이 있나 확인하고 있다면 그 함수를 실행시키는데 그 인자는 오른쪽에 있는 것을 넣는다. 함수호출과 같이 객체에 ()를 붙여서 호출하는 경우 acnt() < 이 객체가 __call__이라는 메서드를 있는지..
room admin을 좀 바꿔보려고한다. list_display를 사용하여 간단히 정보를 볼 수 있도록 하였고, list_filter를 사용하여 조건에 맞는 정보만 볼 수 있도록 하였다. search_fields를 사용하여 조건에 맞는 걸 검색 할 수 있는데 =city는 만약 city가 seoul이라면 seoul혹은 Seoul,SEOUL이런식으로 대소문자 구분 없이 일치해야 한다. ^city라면 startswith옵션으로 seo Seo SEO이런식으로 적으면 seoul에 해당하는 방들이 나온다. 여기서 host는 room의 field명인데 foreign key로 구성되어있다. 언더바 2개 __를 사용하면 그 fk에서 정보를 가져올 수 있다. 따라서 user_name이 taehyeki라면 tae Tae T..