● 모듈 활성화와 변수, 핑 퐁 엔드포인트
from flask import Flask, jsonify, request
from flask.json import JSONEncoder
class CustomJSONEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, set):
return list(obj)
return JSONEncoder.default(self, obj)
app = Flask(__name__)
app.id_count = 1
app.users = {}
app.tweets = []
app.json_encoder = CustomJSONEncoder
@app.route("/ping", methods=['GET'])
def ping():
return "pong"
● 회원 가입 엔드포인트와 HTTP 요청
@app.route("/sign-up", methods=['POST'])
def sign_up():
new_user = request.json
new_user["id"] = app.id_count
app.users[app.id_count] = new_user
app.id_count = app.id_count +1
return jsonify(new_user)
● 트윗 엔트포인트와 HTTP 요청
@app.route("/tweet", methods=['POST'])
def tweet():
payload = request.json
user_id = int(payload['id'])
tweet = payload['tweet']
if user_id not in app.users:
return '사용자가 존재하지 않습니다.', 400
if len(tweet) > 300:
return '300자를 초과했습니다.', 400
user_id = int(payload['id'])
app.tweets.append({'user_id': user_id, 'tweet': tweet})
return '', 200
● 팔로우와 언팔로우 엔드포인트와 HTTP 요청
@app.route("/follow", methods=['POST'])
def follow():
payload = request.json
user_id = int(payload['id'])
user_id_to_follow = int(payload['follow'])
if user_id not in app.users or user_id_to_follow not in app.users:
return '사용자가 존재하지 않습니다.', 400
user = app.users[user_id]
user.setdefault('follow', set()).add(user_id_to_follow)
return jsonify(user)
@app.route("/unfollow", methods=['POST'])
def unfollow():
payload = request.json
user_id = int(payload['id'])
user_id_to_follow = int(payload['unfollow'])
if user_id not in app.users or user_id_to_follow not in app.users:
return '사용자가 존재하지 않습니다.', 400
user = app.users[user_id]
user.setdefault('follow', set()).discard(user_id_to_follow)
return jsonify(user)
● 타임라인 엔트포인트와 HTTP 요청
@app.route("/timeline/<int:user_id>", methods=['GET'])
def timeline(user_id):
if user_id not in app.users:
return '사용자가 존재하지 않습니다.', 400
follow_list = app.users[user_id].get('follow', set())
follow_list.add(user_id)
timeline = [tweet for tweet in app.tweets if tweet['user_id'] in follow_list]
return jsonify({'user_id' : user_id, 'timeline' : timeline})
'Backend > Flask 개발일지' 카테고리의 다른 글
12. vscode 에 MySQL 연동하기 (0) | 2022.01.17 |
---|---|
11. SQLAlchemy 라이브러리 설치와 config.py(연결정보 저장 파일) (0) | 2022.01.17 |
8. 미니터(Miniter) API 개발 (타임라인) (0) | 2022.01.10 |
6. 미니터(Miniter) API 개발 (300자 제한 트윗 글 올리기) (0) | 2022.01.05 |
5. 미니터(Miniter) API 개발 (회원가입) (0) | 2022.01.03 |