프로젝트 - 글쓰기 CRUD

Python

목록 보기
10/10

오늘은 내가맡은 역할인 글쓰기 CRUD 에 대해 작성해본다. 완성 코드만 넣었음.

작성한 순서는, 다른 팀원이 작성한 C 제외 R- D- U

  1. Read
# 토큰 없이 성공한 api
@bp.route('/<post_id>', methods=['GET'])
def get_post(post_id):
    post = current_app.db.posts.find_one({'_id': ObjectId(post_id)}, {'_id': False})
    return jsonify({
        'status': STATUS_MESSAGE['SUCCESS'],
        'data': post
    }), STATUS_CODE['SUCCESS']



# 토큰 있는 코드
@bp.route('/<post_id>', methods=['GET'])
def get_post(post_id):
    token = request.cookies.get('token')
    payload = decode_token(token, current_app.jwt_secret_key, 'HS256')

    if payload == None:
        return jsonify({
            'status': STATUS_MESSAGE['INVALID_TOKEN']
        }), STATUS_CODE['INVALID_TOKEN']

    if current_app.db.users.find_one({'id': payload['id']}) == None:
        return jsonify({
            'status': STATUS_MESSAGE['INVALID_TOKEN']
        }), STATUS_CODE['INVALID_TOKEN']

    post = current_app.db.posts.find_one({'_id': ObjectId(post_id)}, {'_id': False})

    return jsonify(**json.loads(json.htmlsafe_dumps({
        'status': STATUS_MESSAGE['SUCCESS'],
        'data': post
    }))), STATUS_CODE['SUCCESS']

  1. Delete
# 토큰 없는 코드
@bp.route('/<post_id>', methods=['DELETE'])
def delete_post(post_id):
    current_app.db.posts.delete_one({'_id': ObjectId(post_id)})

    return jsonify({
        'status': STATUS_MESSAGE['SUCCESS'],
    }), STATUS_CODE['SUCCESS']

# 토큰 있는 코드
@bp.route('/<post_id>', methods=['DELETE'])
def delete_post(post_id):
    token = request.cookies.get('token')
    payload = decode_token(token, current_app.jwt_secret_key, 'HS256')

    if payload == None:
        return jsonify({
            'status': STATUS_MESSAGE['INVALID_TOKEN']
        }), STATUS_CODE['INVALID_TOKEN']

    if current_app.db.users.find_one({'id': payload['id']}) == None:
        return jsonify({
            'status': STATUS_MESSAGE['INVALID_TOKEN']
        }), STATUS_CODE['INVALID_TOKEN']

    post = current_app.db.posts.find_one({'_id': ObjectId(post_id)}, {'_id': False})

    if post['user_id'] != payload['id']:
        return jsonify({
            'status': STATUS_MESSAGE['FORBIDDEN_USER']
        }), STATUS_CODE['FORBIDDEN_USER']

    current_app.db.posts.delete_one({'_id': ObjectId(post_id)})

    return jsonify({
        'status': STATUS_MESSAGE['SUCCESS']
    }), STATUS_CODE['SUCCESS']
  1. Update
# 완성코드
@bp.route('/<post_id>', methods=['PUT'])
def update_post(post_id):
    title = request.form.get('title')
    current_group = request.form.getlist('current_group[]')
    recruitment_fields = request.form.getlist('recruitment_fields[]')
    region = request.form.get('region')
    period = request.form.get('period')
    contact = request.form.get('contact')
    content = request.form.get('content')

    current_app.db.posts.update_one({'_id': ObjectId(post_id)},
                                    {'$set': {'title': title,
                                              'current_group': current_group,
                                              'recruitment_fields': recruitment_fields,
                                              'region': region, 'period': period,
                                              'contact': contact,
                                              'content': content}})

    return jsonify({
        'status': STATUS_MESSAGE['SUCCESS'],
    }), STATUS_CODE['SUCCESS']

코드짜다가 우여곡절 겪은 걸 보시려면 아래 링크

profile
백엔드를 공부하고 있습니다.

0개의 댓글