flask
flask clone coding [4] (댓글 API)
이번에는 인스타 클론코딩을 진행 하면서 아래와 같이 구현 했습니다. ✔️ 무한스크롤 - 스크롤이 바닥에 닿을 때마다 게시물 로드 ✔️ 댓글 API 댓글API를 구현하면서, 데이터를 검증하는 부분에서 아래와 같이 기능을 추가해봤습니다. ✔️ 댓글 달기 + ✔️ 댓글 수정 ✔️ 댓글 삭제 구현할 엔드포인트는 아래와 같습니다. 댓글을 작성한 유저만 댓글을 수정 / 삭제 할 수 있어야 합니다. 요청할 URL을 살펴보면, post_id 와 comment_id로 게시물에 대한 댓글을 수정할 수 있을 것 같습니다. 구현 class CommentDetail(Resource): @classmethod @jwt_required() def put(cls, post_id, comment_id): ''' 댓글 수정 ''' pa..
werkzeug 의 정규표현식
Converter 유형 Converter 설명 정규표현식 표현 (regex) PathConverter 같은 string 뿐만 아니라 슬래시( / ) 를 허용 '[^/].*?' UnicodeConverter 슬래쉬( / )문자는 포함하지 않은 문자열 '[^/]' + length IntegerConverter 양의 정수를 허용 r'\d+' FloatConverter 양의 부동 소수점 값을 허용 r'\d+\.\d+' UUIDConverter UUID 문자열 허용 r'[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-' \ r'[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}' Flask는 URL에 변수를 할당하여 동적으로 만들 수 있습니다. 그 방법은 원하는 변수이름에 ""..
WSGI와 Werkzeug
Web Server 클라이언트(웹 브라우저)로부터 Requset를 받아 정적인 컨텐츠(html , css 등등)을 Response 하는, 클라이언트(웹 브라우저)와 직접적인 통신을 하는 프로그램을 말합니다. 대표적인 웹 서버의 종류로는 아파치(Apache), 엔진엑스(NGINX) 가 있습니다. 웹 서버가 필요한 이유 클라이언트가 서버로부터 Response를 받을때 HTML문서와 이미지 파일등의 정적 컨텐츠를 한꺼번에 받는것이 아닌, 웹 문서를 모두 받고 나면 그에 맞는 이미지 파일을 재요청하여 받아오는 식입니다. 이때 웹서버 프로그램이 이미지 파일 요청까지 한번에 처리해서 Response 해주면 WAS에 요청을 다시 보낼 필요가 없이 서버의 부담을 줄일 수 있습니다. WAS 웹 애플리케이션 서버(Web ..
flask clone coding [3] (JWT 구현)
이번에는 인스타 클론코딩을 진행 하면서 아래와 같이 구현 했습니다. ✔️ JWT 구현 access token 발급하기 refresh token 발급하기 서버 내부 정책으로 refresh token 다루기 ✔️ 토큰을 사용한 인증 게시물 작성 시 작성자가 자동으로 추가되도록 구현하기 게시물 작성 시 로그인 된 유저만 작성할 수 있도록 구현하기 게시물 수정 시 작성자만 게시물을 수정할 수 있도록 구현하기 + ✔️ 게시물 삭제 시 작성자만 게시물을 삭제할 수 있도록 구현하기 JWT ? JSON Web Token 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 자체 포함된 방법을 정의하는 개방형 표준( RFC 7519 )을 말합니다. 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는..
flask clone coding [2] (데이터 검증)
이번에는 인스타 클론코딩을 진행 하면서 아래와 같이 구현 했습니다. ✔️ 프론트엔드에서 API를 호출하여 게시물 목록 페이지 불러오기 ✔️ 회원가입 구현 회원가입을 구현하면서, 데이터를 검증하는 부분에서 아래와 같이 기능을 추가해봤습니다. ✔️ 비밀번호 해싱 + ✔️ 비밀번호 자릿수 검증 ✔️ 이메일 형식 검증 ✔️ 부적절한 닉네임 검증 View 단에서 검증된 데이터를 처리하고, Schema 에서 어떤 데이터가 들어와야 하는지, 어떤 데이터가 들어오면 안 되는지를 판단하고 resource/user.py 에 아래와 같은 코드를 작성하였습니다. 간단하게 보면, 25줄 - 중복 닉네임 체크 27줄 - 중복 이메일 체크 30줄 - 비밀번호 자릿수 체크 34줄 - 닉네임 체크 37줄 - 이메일 체크 32줄 - 비..
flask clone coding [1] (Flask-SQLAlchemy 3.0 변경사항)
이번에는 인스타 클론코딩을 진행 하면서 아래와 같이 초점을 둘 것 입니다. ✔️ 프론트엔드와 백엔드의 역할 구분이 어떻게 이루어지는지 공부 ✔️ 유저 인증을 위해 JWT 를 이용한 로그인 구현 구현하면서, 문제가 되었던 점 그리고 그 문제를 해결하면서 알게 된 점을 작성해볼까 합니다. 여기서 구현한 리스트는 아래와 같습니다. ✔️ 사용자 모델을 개선 ✔️ 게시물과 댓글 모델을 작성 ✔️ 게시물 목록, 상세, 생성, 수정, 삭제 API 를 구현 그리고 실제로 잘 작동하는지 테스트 코드를 작성 한 후 테스트를 수행했습니다. 결과는 아래와 같습니다. 에러 1 TypeError: Query.paginate() takes 1 positional argument but 2 positional arguments (a..
CORS란? 그리고 해결방법은? / CSR vs SSR
CORS란? Cross Origin Resource Sharing 의 약자로 교차가 되는 출처 리소스들의 공유를 말합니 다. 쉽게, 다른 출처에서 데이터를 주고 받는 것을 허용하는 정책이라고 생각하면 될 것 같습니다. 출처(Origin)란? 예를 들어 우리가 주로 쓰는 유튜브, 이 서버의 위치를 의미하는 https://www.youtube.com 와 같은 URL은 사실 아래와 같이 이루어져 있습니다. 여기서 출처는 Protocol + Host + Port 까지 합친 것(https://AhnDongSup.github.io:433) 을 의미합니다. 여기서 프로토콜, 포트, 호스트 모두 일치할 경우를 Same Origin 이 세가지 중 한가지라도 일치하지 않다면 Cross Origin이 됩니다. SOP정책 S..
Flask - 테스트 코드 / 관리자 페이지 / 카테고리, 게시물
TDD 테스트 주도 개발(Test Driven Development) 소프트웨어를 개발하는 여러 방법론 중 하나를 말합니다. TDD에서는 제품의 기능 구현을 위한 코드와 별개로, 해당 기능이 정상적으로 움직이는지 검증하기 위한 테스트 코드를 작성하여 테스트가 전체 개발을 주도해 나가는 것입니다. 오늘은 코드를 수정하는 단계마다 테스트 코드를 이용해서 검증해보겠습니다. Python에서 기본적으로 존재하는 테스트 프레임워크인 unittest 라이브러리를 알아보려 합니다. 우선 내장 모듈인 unittest를 불러와서 import 한 뒤, 클래스 이름을 지어주고, TestCase 클래스를 상속받아 테스트를 진행합니다. import unittest class TestSomething(unittest.TestCas..