문서의 이전 판입니다!
views/blog_api.py: 블로그 API 로직
`blog_api.py`는 블로그 기능과 관련된 모든 서버 로직을 처리하는 Flask 블루프린트 모듈입니다. 게시물/댓글 관리, 사용자 인증, 파일 업로드 등 다양한 기능을 API 엔드포인트로 제공합니다.
`url_prefix='/api/blog'` 설정에 따라, 이 파일의 모든 API 주소는 `/api/blog`로 시작합니다.
주요 기능 및 엔드포인트
1. 인증 (`/auth`)
* Method: `POST` * 설명: 환경변수에 저장된 비밀번호와 사용자가 입력한 비밀번호를 비교하여 관리자 권한을 인증합니다.
2. 게시물(Post) 관리
* `GET /posts`: 모든 게시물 목록을 최신순으로 조회합니다. * `GET /posts/<id>`: 특정 ID의 게시물을 조회하고, 조회수를 1 증가시킵니다. * `POST /posts`: 새 게시물을 등록합니다. (관리자 인증 필요) * `PUT /posts/<id>`: 기존 게시물을 수정합니다. (관리자 인증 필요) * `DELETE /posts/<id>`: 게시물을 삭제합니다. (관리자 인증 필요)
3. 댓글(Comment) 관리
* `POST /posts/<id>/comments`: 특정 게시물에 새 댓글을 추가합니다. 댓글 비밀번호는 해시하여 저장됩니다. * `PUT /posts/<id>/comments/<comment_id>`: 댓글을 수정합니다. 비밀번호를 확인해야 수정 가능합니다. * `DELETE /posts/<id>/comments/<comment_id>`: 댓글을 삭제합니다. 비밀번호를 확인해야 삭제 가능합니다.
4. 기타
* `GET /site-info`: 사이트의 총 방문자 수를 반환하고, 카운트를 1 증가시킵니다. * `POST /images`: 게시물에 포함될 이미지를 서버에 업로드하고, 접근 가능한 URL을 반환합니다. (관리자 인증 필요)
보안 처리
* 관리자 인증: 게시물 작성/수정/삭제, 이미지 업로드 시 비밀번호를 확인하여 인가된 사용자만 작업을 수행할 수 있도록 합니다. * XSS (Cross-Site Scripting) 방어: `bleach` 라이브러리를 사용하여 게시물과 댓글의 HTML 내용에서 허용되지 않은 위험한 태그와 속성을 제거(Sanitize)합니다. 이를 통해 악의적인 스크립트가 삽입되는 것을 방지합니다. * 비밀번호 해싱: `werkzeug.security`를 사용하여 댓글 비밀번호를 직접 저장하지 않고, 암호화된 해시값으로 변환하여 저장합니다.
이처럼 `blog_api.py`는 블로그 기능의 핵심 로직을 체계적으로 구현하고, 보안적인 측면까지 고려하여 설계되었습니다.