일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pycon
- 워킹데드
- FPS
- 중국맛집
- 블라디보스토크
- API
- 스팀
- lambda
- 몽골여행
- 프로젝트오일러
- 먹방
- 게임
- certbot
- github
- 퍼즐게임
- 인디게임
- django
- flask
- 우분투
- Project Euler
- 그래픽노블
- 파이썬
- AWS
- 컴퓨터네트워크
- https
- C#
- 알고리즘
- codility
- Python
- coursera
- Today
- 19
- Total
- 323,616
목록Python (80)
YUDA't

서론; 휴대폰 인증을 위해 거쳐야 하는 프로세스는 다음과 같다. 유저가 휴대폰 번호를 입력한다. 해당 번호와 랜덤 숫자 4자를 DB에 저장한 뒤, 인증 번호(랜덤 숫자)가 담긴 문자를 유저에게 보낸다. (인증번호 전송 API) 유저가 인증 번호를 입력한다. DB에서 유저의 휴대폰 번호와 인증 번호를 대조한 뒤 맞다면 True를, 틀리다면 False를 리턴한다. (인증번호 확인 API) 여기서 2, 4번에서 필요한 API 두 개를 만들어보려 한다. 스펙은 다음과 같음 Django 2.2 PostgreSQL 인증번호 전송 API 1) 일단 유저의 전화번호와 랜덤생성한 숫자 4자를 auth에 테이블에 저장한다. auth 테이블은 단순히 phone_number와 auth_number 만을 저장하게 하고, pho..

읽지 않아도 되는 서론; 구글 시트를 업데이트하려면 당연히 별도의 인증절차가 필요하다. 업데이트하려는 자가 그 시트에 대한 접근 권한이 있는지 알아야 하기 때문이다. 이건 시트 공유 설정을 '링크가 있는 모든 사용자가 수정할 수 있음'으로 해도 마찬가지다. 한편 구글에서 제공한 Python Quickstart를 보면 OAuth 2.0 클라이언트 인증을 사용하는데, 이렇게 하면 유저가 구글 로그인을 해서 권한을 얻어 시트를 열거나 수정할 수 있다. 다만 내 시트를 내가 수정하는 경우 이 방법을 사용하면 매우 귀찮다는 생각이 든다. 유저 정보가 필요한 게 아니고 내 애플리케이션을 가지고 작업하는 거니까. 물론 별도의 작업을 거쳐 OAuth 클라이언트로도 로그인 없이 작업을 수행할 수 있지만 약간 번거롭다. ..

TL;DR 2016년 BeautifulSoup로 YouTube에서 영상 정보를 크롤링 해보자 라는 글을 올린 적 있는데 이게 의외로 스테디셀러(?)라 2019년 버전으로 업데이트하고자 한다. 초심자들을 위한 글이기 때문에 난이도는 굉장히 낮다. 다만 그동안 유튜브의 HTML 구조가 바뀌어서 초심자가 크롤링하기에는 좀 번거롭고 향후 또 변경될 여지가 많아 대상을 프로젝트 오일러 한국 사이트로 변경했다. 이곳을 선택한 이유는 관리자들이 사이트를 절대 업데이트하지 않아서(ㅋㅋㅋ). 근데 그전에 이 사이트가 크롤링을 허용하는지부터 알아보자. 대부분의 사이트는 그들의 루트 경로 아래에 robots.txt라는 파일을 두어 크롤링에 대한 규약을 써놓는데, 보통 크롤링을 허용하거나 허용하지 않는 페이지들이 적혀있다. ..
'Hidden features of Python' 언젠가 스택오버플로에서 찾았는데, 파이썬에서 잘 알려져 있지 않은 기능을 공유하는 글이다. (다만 스택오버플로의 취지에는 맞지 않는 질문이라 지금은 close 됨)한 번에 읽기에는 좀 길어서 북마크해뒀었는데 가끔 보면서 흥미로운 게 있으면 적어놨다. Function argument unpacking 별표(*;asterisk) 연산자를 사용하여 리스트나 딕셔너리를 언패킹할 수 있다.>>> a = [1, 2, 3, 4, 5] >>> print(*a) 1 2 3 4 5 >>> b = {'a': 1, 'b': 2, 'c': 3, 'd': 4} >>> print(*b) a b c d오와!했지만 손이 안 가서 쓰지 않는다.아웃! C 스타일 코딩을 가능케 하는 모듈 ..
# generator란?파이썬의 generator란 yield라는 키워드를 사용하는 iterator 생성 함수이다. * iterator란 countable한 값들을 가지고 있는 객체이다. 이 iterator가 iterate 된다는 것은 모든 값을 가로지를 수 있음을 뜻한다. 파이썬에서 iterator는 iterator 프로토콜을 시행하는 객체이며, __iter__()와 __next__() 메소드를 가지고 있다. # generator 함수 생성generator를 만드는 방법은 간단하다. 평범한 함수에서 return 대신 yield 키워드를 사용하면 된다. 함수가 하나 이상의 yield를 가지고 있다면 generator 함수가 된다. 한편 yield와 return은 모두 같은 값을 리턴하지만, return은..
(스택오버플로 질문 Are dictionaries ordered in Python 3.6+?의 답변을 참고했다.) '''# 읽지 않아도 되는 서론회사에서 random 함수가 사용된 함수를 테스트하다가 신기한 점을 발견했다. 내 컴퓨터(Python3.6)에서는 마냥 잘 되던 테스트가 다른 컴퓨터(Python3.5)에서는 계속 실패했던 것이다. 하지만 가끔 통과되는 경우도 있어서 영문을 몰랐는데 알고보니 딕셔너리의 정렬 여부 때문이었다.import random random.seed(1) dict_a = {'a': 1, 'b': 2, 'c':3, 'd':4, 'e':5} key = random.choice(list(dict_a.keys())) # 딕셔너리 키 값중 하나를 랜덤으로 선택 할당 assert key..
사이트에서 Get 방식으로 가져오는 API 하나가 1.5초 정도로 너무 오래 걸린다 싶었는데 django-debug-toolbar(공식문서)의 SQL탭을 보니 쿼리를 150번 정도 돌리고 있었다.그렇게 복잡한 API도 아니었는데 이렇게 쿼리를 많이 돌리는 이유를 보니, - serializer에서 다른 테이블을 참조- for loop로 QuerySet을 돌림 이 중 두 번째, for loop로 QuerySet을 돌리는 실수가 가장 치명적이었다.심지어 for loop 아래의 for loop에서까지 돌리고 있었다.쿼리 1-10개 정도야 반짝하고 가져오지만 100개가 넘어가면... 그래서 for loop 아래에서 Model.objects.filter(..) 등으로 QuerySet을 가져오는 부분을 모두 바깥으로..
api.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'User.groups'.HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups'.api.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'User.user_permissions'.HINT: Add or change a related_name argument..
Django ORM(Object Relational Mapping) # 개요Object-Relational Mapping(ORM)은 관계형 데이터베이스와 Django 모델 객체 간의 매핑을 제공하는 매우 유용한 기술이다.Django를 처음 써보는, 혹 아직 써보지 않은 사람들에게는 이 개념이 잘 와닿지 않을 수 있는데, 한 마디로 SQL문을 사용하지 않고도 데이터베이스를 관리할 수 있게 해준다는 거다. 예를 들어, 데이터베이스에 'person'이라는 테이블을 생성하기 위해 다음 SQL문을 짰었다면,CREATE TABLE person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NO..
drf-trackinghttps://github.com/aschn/drf-tracking # 설치drf-tracking 설치$ pip install drf-trackingsettings.py의 INSTALLED_APPS에 'rest_framework_tracking' 추가그리고 APIRequestLog 모델 생성 위해 마이그레이션 실행$ python manage.py migrate # 사용view가 실행될 때마다 APIRequestLog 인스턴스를 생성하기 위해, views.py에 rest_framework_tracking.mixins.LoggingMixin 추가한다.request를 로깅하고 싶은 클래스에 LoggingMixin를 넣어주면 된다.# views.py from rest_framework im..
이 문서는 How to Reset Migrations를 번역한 것입니다. Django 마이그레이션 시스템은 많은 수의 마이그레이션들을 작업하는 데에 최적화되어 있습니다. 따라서 일반적인 경우, 당신은 코드상에서 많은 양의 모델 마이그레이션을 신경쓸 필요가 없습니다.물론 이는 때때로, 테스트를 돌리는 데에 많은 시간을 소요하는 등 원하지 않는 결과를 초래하긴 하죠. 하지만 이 경우 당신은 마이그레이션을 간단하게 비활성화시킬 수 있습니다.(비록 지금은 내장 옵션이 없지만요.) 아무튼, 당신이 마이그레이션을 초기화하길 바란다면 이 튜토리얼에 제시된 몇 가지 옵션들을 참고하길 바랍니다. 시나리오 1- 프로젝트가 아직 개발 환경에 남아있고, 이것을 전부 초기화하길 바랄 경우- 데이터베이스를 전부 날려도 되는 경우..
Python으로 SMS를 보내는 방법을 3가지로 추려보았다. - AWS SMS - Twilio - 국내 서비스(쿨SMS) AWS SMS 기본 개념 주제: 주제는 메시지 전송 및 알림 구독을 위한 커뮤니케이션 채널 구독: 구독 대상자는 HTTP/HTTPS, Email, SMS, Amazon SQS, Lambda 등이 될 수 있다. 이 구독 시스템을 통해 한 주제를 전체 구독자에게 배포할 수 있다. key-value 형식으로 메시지 커스터마이징이 가능함 주의 서울 리전은 SMS 메시징이 지원되지 않음. 지원되는 리전 참고. 설정 SNS에서 문자 메시지(SMS) 카테고리 선택 후 문자 메시지 기본 설정 업데이트 - 유형에 따라 요금이 다를수도 있음(프로모션-중요도가 덜한 메시지 / 트랜잭션-중요한 메시지) -..