일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 깃허브
- flask
- 추천 영상
- gpu 병렬처리
- selenium
- Django
- 알고리즘
- List
- 그리디 알고리즘
- 코딩
- DB
- 구글 드라이브
- Google Drive
- 유튜브
- venv
- 아이폰
- 리스트
- docker-compose
- python
- MongoDB
- 파이썬
- G-Suite
- 링크
- 단축어
- 바로학교
- nocookie
- 충북
- 탐욕 알고리즘
- pymongo
- 장고
- Today
- Total
목록2021/01 (23)
SSAMKO의 개발 이야기
외부에 API를 제공할때, 해당 URI로 아무나 접근하는 것을 막기 위해 간단하게 적용할 수 있는 방법으로 크게 두 가지가 있다. 첫번째로는 django settings.py에서 ALLOWED_HOST를 수정하여, white list를 구성하는 방법이 있는데, 이 방법은 소수의 제한적 접근을 허용할때는 유용하지만, 요청할 대상이 많아지면 힘들어진다. 이때는 간단히 토큰을 제공하는 방법으로 해결할 수 있다. 이 토큰을 여러 method에 손쉽게 적용할 수 있도록 데코레이터를 사용했다. # decorator.py from functools import wraps from django.core.exceptions import PermissionDenied def check_token(func): """Deco..
mongodb에서 특정 array의 길이가 2이상 되는 document들을 검색하고 싶을때, 보통 array의 길이(사이즈)는 $size를 이용해서 검색한다. 하지만, 이 경우에는 범위range를 사용할 수 없다. 정확하게 매칭되는 하나의 숫자만 검색할 수 있다. col.find({'items':{ '$size' : 2 }}) 이렇게 하면 items에 있는 array의 길이(사이즈)가 2인 document들만 뽑아준다. 여기서 2이상인 것들을 뽑기 위해선 $gte 연산자를 쓰면 될 것 같지만, col.find({'items':{'$size':{ '$gte':2 }}}) 위와 같이 작성한 쿼리는 제대로 실행되지 않는다. 원하는 값을 받기 위해서는, col.find({ '$where':this.items.l..
대용량 파일을 local DB가 아닌 GCS나 AWS S3에 저장하기 위해, 혹은 mongodb같은 써드파티 DB를 사용하는 서버에서, 파일을 단순히 업로드 받아 처리해야할 경우가 있다. 그럴경우엔 forms.py나 model.py 작성없이 바로 views.py에서 작성 가능하다. from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from django.views.decorators.http import require_POST from .. import FileManager as fm @csrf_exempt @require_POST def recommend_user_prod(request): fm..
Django를 API서버로만 이용할 때, 외부 사용자들에게 header를 통해 인증정보를 받아야 할 경우가 있다. 이때, Test코드에서도 이를 처리해야 하는데, TestCase의 client에서 요청을 보낼때, from django.urls import reverse from django.test import TestCase class AircodeAPITests(TestCase): def test_schedule(self): url = reverse("send_schedule") header = {'HTTP_TOKEN':'afaew$@m#iow23!3@29fafewm@*'} response = self.client.post(url, **header) 위와 같이 client.post() 혹은 clien..
Django를 이용해 백엔드 서버를 구성할 때, 큰 장점 중 하나인 테스트 코드 작성에 대해 알아보겠습니다. 테스트 코드를 작성하면, 사람이 손으로 직접 테스트를 하는 것보다 훨씬 빠르고, 정확하게 테스트를 진행할 수 있습니다. django에서는 이 작업을 편리하게 도와주는 Test도구들이 있습니다. 이 중에서 TestCase를 사용해 간단히 API Test를 위한 코드를 작성해보겠습니다. 먼저, django app을 만들면 자동 생성되는 tests.py를 삭제하거나 이름을 변경해줍니다. model, form, views 등을 각각 테스트할 수 있도록, test_model, test_form, test_views 처럼 각각의 파일을 만들어줍니다. 이는 각각의 테스트 코드를 별도로 작성하고, 진행할 수 있..
1. settings > Allowed Host settings.py 에서 ALLOWED_HOSTS = ['*'] ALLOWED_HOSTS = ['*'] pip freeze > requirements.txt 2. 파일 배포 git clone scp ftp 3. venv python3 -m venv source venv/bin/activate 4. pip install -r requirement 5. GCP 방화벽 2021/01/11 - [GCP, AWS] - [GCP] 방화벽 규칙 만들기 6. ubuntu firewall - ufw 아래 커맨드를 이용해 8000포트를 개방한다. sudo ufw allow 8000/tcp 개방되었는지 확인하기 위해 아래 커맨드를 사용한다. sudo ufw status ve..
1. 가상환경 실행 2. pip install gunicorn 3. manage.py가 있는 폴더로 이동 4. gunicorn 설정 gunicorn --bind 0.0.0.0:8000 myProject.wsgi:application myProject에는 본인의 project이름을 넣는다. 스크립트 생성 /etc/systemd/system/gunicorn.service [Unit] Description=gunicorn After=network.target [Service] User= Group=www-data WorkingDirectory=/path/to/yourProject ExecStart=/path/to/yourProject/venv/bin/gunicorn \ --workers 3 \ --bind u..
아이패드 LTE요금제로 LG U+를 사용하다가 아이패드를 잘 들고다니지 않아 해지를 하려고 했더니 몹시 불편하여 그 과정을 포스팅하기로 했다. 일단 총평을 먼저 말하자면, 다들 예상하시겠지만 최악의 서비스 '해지 방법'을 안내받으려면 일단, 모바일에서는 안된다. 데스크톱 웹으로 접속해야하는데, 뭐 하나 제대로 되는게 없다. 비밀번호를 변경하라그래서 변경하려고 했더니 몇 번의 연결 끝에 겨우 비밀번호 변경을 끝내고, 메뉴에서 찾아내 들어갔더니, 세상에... 다른건 다 웹에서 할 수 있게 해놓고, 해지는 1. 신청서를 다운받아서, 2. 출력을 하고, 3. 수기로 작성해서, 4. 팩스로 보내야 한다. 심지어 팩스가 잘 안 오는 경우도 있으니 1~2일이 지나도 연락이 없으면 확인 전화를 하란다. 이 글을 쓰는 ..