
IT/파이썬 2021. 7. 27.
Flask RESTful API 작성시 넘어오는 변수값 확인
Flask, flask_restful 라이브러리를 쓰고 있다면 꼭 참고하세요!! 넘어오는 변수를 매번 체크하기 귀찮아서, 그냥 대충 무시하고 Exception 처리가 발생하길 기대하는데, 꼼꼼하게 체크하기 위한 코드 작성법은 알아놔야 할 듯 아래 코드는 여기 자료에서 레퍼런스 했습니다. 자세한 내용은 원본글로 들어가서 봐 주시면 감사~~ https://m.blog.naver.com/dsz08082/222016994151 reqparse 모듈에 add_argument 를 이용해서 필수 파라메터 (매개변수라고 해야 하나 한국말로 ㅎㅎㅎ) 를 미리 체크하도록 할 수 있다. from flask_restful import reqparse parser = reqparse.RequestParser() parser.a..

IT/파이썬 2021. 7. 27.
파이썬 동작 로그 파일 저장하기 - flask gunicorn logging
무슨 로그 파일 저장하는 것이 이렇게나 어렵노? Flask + Gunicorn + Nginx 이렇게 궁합을 싸 놓으니, 어데 저장되는지 누가 주체인지도 모르겠고 어렵다. 그냥 내가 원할 때 저장하고 파일 위치도 쉽게 알 수 있으면 되는데..... 일단 아래 코드 적용해서 돌려보니 작업 디렉토리에 파일이 생기긴 하네. 잘 모르지만 일단 아래 코드로 적용 원본 코드 위치 - https://gist.github.com/andrisasuke/0d5958c076fcf44e6a15c9d99d9c8c86 flask logging gunicorn and file flask logging gunicorn and file. GitHub Gist: instantly share code, notes, and snippets...

IT/파이썬 2021. 7. 27.
윈도우 flask gunicorn 에러 발생 시 대안 - No module named 'fcntl'
윈도우 환경에서 아래와 같이 Flask 과 Gunicorn 환경을 실행 시키려고 하면 아래와 같은 에러가 발생한다. gunicorn --bind 0.0.0.0:8000 wsgi:app fcntl 을 찾을 수 없다고... pip 로 설치하려 해도 윈도우 환경에서는 설치가 안된다. ModuleNotFoundError: No module named 'fcntl' 그럼, 포기~~~ 역시 인터넷에는 답이 있다. 그대로 쓸 수는 없지만 환경을 확인하는 정도는 가능하다. Gunicorn 대신에 waitress 를 사용하면 대충 비슷하게 돌릴 수 있다. 먼저 설치하고, > pip install waitress 아래와 같이 실행 시킨다. > waitress-serve --listen=*:8000 wsgi:app 답변 참..

IT/파이썬 2021. 7. 1.
Flask REST API 구현 중 파일 업로드는?
JSON 기반의 메시지가 왔다 갔다는 아무런 문제가 없는데, 파일 업로드 혹은 이미지 바이너리를 업로드 하거나 다운로드 해야 한다면 어떻게 전달해 줘야 하나? Form-data 로 파일 받기 일단 상식처럼 HTTP form-data 로 처리하는 것으로 되어 있는데 (JSON에 그냥 바이너리를 넣으면 안되나?) 파일 사이즈도 그렇고 처리하는 기본적인 방법을 알아놔야 한다. 일단 레퍼런스 페이지 부터 조사해서 남겨두자. 아래에 정리해둠. DB 필드로 파일을 저장하는 방법 그리고, 들어온 파일 바이너리를 MongoDB에 저장해야 하는데 이건 또 다른 영역이군. FileField 가 따로 있는 것인지? from mongoengine import FileField # If you are using FileFiel..

IT/파이썬 2021. 7. 1.
Flask JWT 로그인 기능을 위한 자료 조사 - flask-jwt-extended
JWT 를 이용한 보안/인증 절차가 필요한 듯 한데, 이를 위해 자료 조사를 몇개 하는데 대충 아래로 정리가 된듯 맘에 걸리는 문제 1. 토큰을 강제로 만료시킬 수 없는 문제를 가지고 있다. 별도의 블랙리스트를 사용해 로그아웃 요청으로 전달된 토큰을 등록하여 해당 토큰을 통한 요청을 거부하도록 처리해 줘야 한다. 음...이게 먼가... 그냥 flask-jwt-extended 라이브러리를 활용해야 할 것 같다. 잘 정리된 자료는 아래와 같다. 잘 따라 가면 될 것 같다. 공식 문서 홈페이지는 아래와 같다. https://flask-jwt-extended.readthedocs.io/en/stable/ 여기에도 예제가 잘 되어 있다. 참고로, 이번에 바뀐 내용중에 많이 쓰는 함수들 관련 내용이 있어 내용 저장..

IT/파이썬 2021. 6. 30.
작업중 - 서버 구조 구성 Flask API + ReactJS Frontend + GUnicorn
잊지않기 위해서 일단 저장. https://yasoob.me/posts/how-to-setup-and-deploy-jwt-auth-using-react-and-flask/ Setting up & Deploying JWT based auth using Flask & React - Yasoob Khalid Hi everyone! 👋 I was working on a React project these last couple of weeks and I had to implement login functionality. I searched around and most of the solutions I found relied on Redux or some other huge dependency that I wasn..

IT/DB 2021. 6. 21.
Flask MongoEngine 쿼리 filter() 함수 문자열 - Query Operators
Flask MongoEngine 쿼리 filter() 함수 문자열에 대해서 정리해 둬보자. (사실 해본거 하나만 더 적어두자, 해본거니깐) 맨날 = 만 쓰려니 MongoEngine 홈페이지에 가면 다양한 operator 가 있다 쿼리로 사용할 수 있는, 가장 기본적인 예제로 아래와 같이 18세 이하 사용자를 찾아라 같은 예제가 있다. # Only find users whose age is 18 or less young_users = Users.objects(age__lte=18) 즉, 필드명에다가 언더스코어 2개를 넣고 원하는 기능어를 넣으면 쿼리 스트링이 완성된다. 필드명__operator 오퍼레이터의 종류는 아래와 같다. https://docs.mongoengine.org/guide/querying...

IT/파이썬 2021. 6. 15.
Flask 와 React 를 결합한 서비스 - 자료 조사
JS 만큼 강력한 파이썬을 활용하기 위해 Flask 백엔드에 대세라고 할 수 있는 React 프론트엔드 서비스 개발. 이리저리 검색중. 나중에 읽을 필요가 있을 글들을 여기에 모아둬 본다. 정리할 글은 계속 나오겠지. 읽어봐야할 글들 https://kimsehwan96.tistory.com/entry/React-%EB%B9%8C%EB%93%9C%EB%90%9C-%EC%95%B1-Flask-%EC%97%90-%EC%98%AC%EB%A6%AC%EB%8A%94-%EB%B0%A9%EB%B2%95 React 빌드된 앱 Flask 에 올리는 방법 React APP을 플라스크 서버 위에 호스팅하기. yarn build 한 index.html 파일을 그대로 flask 에서 리턴하게 했더니 안되어서 시작한 테스트. ya..

IT/파이썬 2021. 6. 15.
Flask redirect 할 때 POST 데이터도 같이 넘기기
그냥 쉽게 url 을 불러 줄 때는 그냥 redirect(url) 하면 되는데, POST (form) 데이터를 같이 넘겨주려니 또 찾아보게 되네. 머 어렵지 않게 할 수 있는 예제를 찾아서 남겨둠 https://pythonbasics.org/flask-http-methods/ user = "username" return redirect(url_for('success',name = user)) url_for 함수에 함수 endpoint 와 함께 그냥 넘겨주면 되네. BJ. Polina Zimmerman 님의 사진, 출처: Pexels

IT/DB 2021. 6. 11.
mongodb - Flask mongoengine을 이용하여 필드 추가, 삭제
이미 설계 이후에, 스키마가 변경되어서 다큐먼트 필드가 추가되거나 삭제되는 경우가 있다. 이때 새로운 레코드는 해당 필드가 있는데, 기존 레코드에 없다면 좀 이상하기도 합니다. 혹은 필드를 삭제하는 경우도 있어 이경우도 기존 DB 에 반영해야 한다. Mongoengine 을 이용하는 경우 해당 클래스에 필드를 추가, 삭제하고 난 뒤에, 추가된 필드의 경우 아래처럼 모든 objects 에 해당 필드값을 채워주기만 하면 된다. 해당클래스.objects.update(추가필드1=0,추가필드2="") 삭제되는 필드의 경우 아래처럼 명령을 내리면 해결된다. 해당클래스.objects.update(unset__code=True) # Note: code 라는 필드를 없애라 BJ. Markus Winkler 님의 사진, ..

IT/DB 2021. 6. 9.
Flask mongoengine Objects() 와 Objects.get() 차이점
문제 정의는 flask mongoengine 에서 하고 있지만, mongoengine 이라는 것이 Django ORM 특성을 가져온 것으로 알고 있어 비스무리 한 곳을 찾아보았다. 원하는 답은 찾은 듯 하여 여기에 남겨두다. 머 쉽게는 리스트를 리턴해야 하는데 Objects.get()을 쓰면 제일 첫번째 놈 object 만 리턴한다는 것! https://code4human.tistory.com/81 [Django] Django의 ORM : get() 과 filter() 비교 Django ORM을 작성하면서 SQL문을 확인하곤 한다. 오류를 발견하면서 헷갈리는 get() 과 filter()을 간단히 정리한다. fetchone # ORM User.objects.get(id=1) #Return : Object..

IT/파이썬 2021. 5. 7.
jinja2 에서 문자열 변환 함수 - 파이썬 str() 함수 같은 것
요거요거 신경 쓰이게 많이 했다. 쉽다. 정답은 아주 쉽다. jinja2 에서 문자열로 바꾸려면 str() 이렇게 쓰는 게 아니라 {{ 변수 | str }} 혹은 {{ 변수 | string }} 으로 쓰면 된다. 이것 찾느라 고생이었다. 난 ObjectId 값을 바로 문자열과 비교하니깐 같은 값인데 같다고 안나오니 환장할 노릇. 알고 보니 ObjectId를 먼저 string 으로 바꾸고 비교해야 하네.. {% if pre_orderitem == (orderitem_from["id"] | string) %} 참조한 사이트는 바로 아래~~ webisfree.com/2019-02-06/jinja2%EC%97%90%EC%84%9C-%EC%88%AB%EC%9E%90-%EB%98%90%EB%8A%94-%EB%AC%..

IT/DB 2021. 3. 18.
MongoDB 복원하기 - mongorestore
백업 했으니 복원도 테스트 해봐야지 말이 필요없다. 성공한 내용은 아래와 같다. mongorestore --host 127.0.0.1 --port 27017 -u 사용자명 -p 비밀번호 --db 복원할DB ~/mongo_backup/복원할DB --authenticationDatabase admin --drop 물론 복원할 DB가 저장되어 있는 위치는 잘 맞춰서 넣어 주어야 한다. 문제가 없으면 아래와 같은 진행과정을 볼 수 있다. 이제 필요시 백업 복원은 자유롭게 해 보자. 물론 RAID 처럼 자동으로 되면 좋은데, 이것도 알아볼까나~~ 아~ --drop 이 문제가 많이 되었다. 여기저기 찾아보면 --drop 옵션에 db 명을 적어 주는 것으로 되어 있는데 난 해보니 그냥 옵션만 주는 게 맞는 것 같다...