본문 바로가기

개발 관련/python

(12)
[django] REST API 구축하기 http://www.yes24.com/Product/Goods/69758579 배프의 오지랖 파이썬 웹프로그래밍 - YES24 기초부터 실전 웹 서비스까지 다 담았다!현직 개발자이자 IT강사인 배프의 강의와 실무를 통해 쌓은 노하우를 한 단계식 알려드립니다. 현 웹 프로그래밍 시장은 다양한 기술을 활용하여 얼마나 www.yes24.com 위 책을 참고하여 쓴 내용이다. 1. django 설치 및 프로젝트 생성하기 pip install django# conda install django django-admin startproject config . python manage.py migrate python manage.py createsuperuser 2. 앱 만들고 INSTALLED_APPS에 등록 pyt..
[crawling] HTTP error 403 웹 크롤링이 필요해서 다음과 같은 코드를 실행했다. from bs4 import BeautifulSoup from urllib.request import urlopen url = '크롤링하고자 하는 URL' html = urlopen(url) soup = BeautifulSoup(html, 'html.parser') soup 하지만 다음과 같은 오류가 발생했다. 403 에러는 서버가 클라이언트의 접근을 거부할 때 생기는 응답 코드이다. 크롤링 코드는 제대로 작동되지 않았으나, 웹 사이트는 잘 들어가지는 것을 보면 서버에서 크롤링을 막고 있는 것이라고 생각했다. 때문에 다음과 같이 headers를 추가했다. 또한 urllib.request의 Request도 추가해주었다. from bs4 import Bea..
[flask] 블루프린트(blueprint) 블루프린트는 대규모 애플리케이션 구현에 필요한 중요한 클래스이다. 이는 공통 URL에 대해 조직적으로 묶어 관리해주는 클래스이다. 별도의 정적 파일과 템플릿을 정의할 수 있으며, 공통 URL에 대해서 url_prefix 인자로 관리한다. API를 작성한다고 가정해보자. # main.py from flask import Flask app = Flask(__name__) @app.route('/v1/users') def v1_users(): return 'v1' @app.route('/v2/users') def v2_users(): return 'v2' 매번 API 버전이 늘어날 때마다 위의 코드처럼 v1_users(), v2_users() 등 버전을 추가해주는 방식은 매우 비효율적이다. 이 때 블루프린트를..
[flask] 플러거블 뷰(pluggable view) View 플라스크는 기본적으로 데코레이터와 함수 기반으로 API를 작성하며, 이를 함수 기반 뷰(functional-based view)라 한다. 플러거블 뷰(pluggable view)는 장고의 클래스 기반 뷰에서 영향을 받아 만들어졌으며 플라스크 0.7 버전에 추가되었다. from flask import Flask, render_template app = Flask(__name__) @app.route('/users') def user_list(): users = [] return render_template('users.html', users=users) 위의 코드를 플러거블 뷰로 바꿔보겠다. 일단 View 클래스를 상속받고, dispatch_request를 통해 API를 구현할 수 있다. app...
[flask] 리다이렉션과 에러 다른 엔드포인트로 이동하려면 redirect() 함수를 사용한다. 에러를 발생시키고 싶으면 abort() 함수를 사용한다. from flask import Flask, redirect, url_for, abort app = Flask(__name__) @app.errorhandler(403) def permission_denied(error): return '403', 403 @app.route('/') def index(): return redirect(url_for('user_list')) @app.route('/users') def user_list(): abort(403) 위 코드에서 url_for() 는 함수 이름을 넣으면 해당 라우팅 URL을 반환한다. user_list를 요청했기 때문에 /u..
[difflib] 두 문자열 비교하기 파이썬의 기본 라이브러리 중 difflib는 SequenceMatcher라는 메서드를 제공한다. 이 메서드를 통해 두 개의 문자열의 유사성을 확인할 수 있다. 앞서 말했다시피, difflib는 파이썬의 기본 라이브러리로, 설치가 불필요하다. difflib 사용하기 from difflib import SequenceMatcher result = SequenceMatcher(None, a, b).ratio() print(result) 위 코드를 실행했을 때, 동일한 문자열에 대해서는 1.0을, 어느정도 유사한 문자열은 0.6에서 0.8 사이의 숫자를 반환했고, 아예 다른 문자열은 0.0을 반환했다. 테스트를 많이 해보고, 그 상황에 적절히 사용하면 될 것 같다.
[haversine] 위경도 거리 구하기 haversine 이란? 위 경도(Latitude, Longitude) 간 거리를 구해주는 패키지이다. haversine을 사용하기 위해 다음과 같은 과정을 거쳤다. 일단, haversine을 설치했다. pip3 install haversine # conda 사용 시 # conda install haversine 설치가 다 끝났다면, import 후 다음과 같이 코드를 작성한다. 내가 사용한 코드를 첨부하겠다. from haversine import haversine a = (a_latutude, a_longitude) b = (b_latitude, b_longitude) # 거리 계산하기 haversine(a, b, unit='km') 나같은 경우에는, a와 b의 두 거리 계산을 통해, a와 b가 같은..
strftime() 포매팅 문자 정리 포매팅 설명 예 %Y 연도 2020 %m 월 01~12 %d 날짜 01~31 %B 월 January %b 월(축약) Jan %A 요일 Monday %a 요일(축약) Mon %H 24시간제 출력 형태 00~23 %l 12시간제 출력 형태 01~12 %p AM 또는 PM AM, PM %M 분 00~59 %S 초 00~59