관리자 페이지 추가 및 버그 수정

- 관리자 대시보드 추가 (/admin/)
  - 통계: 총 포스트, 공개/비공개, 삭제된 포스트, 회원 수
- 포스트 관리 추가 (/admin/posts)
  - 목록, 검색, 필터링, 페이지네이션
  - 포스트 수정, 삭제, 복구 기능
- 회원 관리 추가 (/admin/members)
  - 회원 목록, 추가, 수정, 삭제
  - 비밀번호 재설정
- 버그 수정
  - g.is_login, g.user_info 기본값 설정
  - index 페이지 빈 포스트 처리
- 관리자 권한: admin, wixon, javamon
- README.md 프로젝트 문서 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
javamon117
2026-01-05 15:30:49 +09:00
parent 73a13852bf
commit d49a33cc6c
10 changed files with 1407 additions and 4 deletions

View File

@@ -0,0 +1,74 @@
<!DOCTYPE html>
<html>
<head>
<title>WIXON Blog - Admin</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.6.16/css/uikit.min.css"/>
<link rel="stylesheet" href="/static/css/style.css"/>
<link rel="stylesheet" href="/static/css/admin.css"/>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.6.16/js/uikit.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.6.16/js/uikit-icons.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-lite.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-lite.min.js"></script>
{% block staticfiles %}{% endblock %}
</head>
<body>
<div class="admin__wrap">
<!-- Sidebar -->
<nav class="admin__sidebar">
<div class="admin__logo">
<a href="/admin/">
<img src="/static/images/logo.png" alt="WIXON Admin" />
</a>
<span>Admin Panel</span>
</div>
<ul class="admin__menu">
<li>
<a href="/admin/" class="{% if request.path == '/admin/' %}active{% endif %}">
<span uk-icon="icon: home"></span>
<span>대시보드</span>
</a>
</li>
<li>
<a href="/admin/posts" class="{% if '/admin/posts' in request.path %}active{% endif %}">
<span uk-icon="icon: file-text"></span>
<span>포스트 관리</span>
</a>
</li>
<li>
<a href="/admin/members" class="{% if '/admin/members' in request.path %}active{% endif %}">
<span uk-icon="icon: users"></span>
<span>회원 관리</span>
</a>
</li>
</ul>
<div class="admin__user">
<span class="user__name">{{ g.user_info.mb_name }}</span>
<a href="/">사이트로 이동</a>
<a href="/logout">로그아웃</a>
</div>
</nav>
<!-- Main Content -->
<main class="admin__content">
{% with messages = get_flashed_messages() %}
{% if messages %}
<div class="uk-alert-primary" uk-alert>
<a class="uk-alert-close" uk-close></a>
{{ messages[0] }}
</div>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</main>
</div>
{% block scripts %}{% endblock %}
</body>
</html>