728x90
반응형
Django 한국어 인증 시스템 구축 프롬프트
프로젝트 개요
Django 기반의 완전한 한국어 지원 인증 시스템을 구축해주세요. 이 시스템은 사용자 관리, API 키 관리, 세션 관리, 프로필 관리 등 현대적인 웹 애플리케이션에 필요한 모든 인증 기능을 포함해야 합니다.
1. 모델 구조 (models.py)
User 모델 (AbstractUser 확장)
다음 필드를 포함하는 커스텀 User 모델을 생성해주세요:
기본 정보:
email: 고유한 이메일 (USERNAME_FIELD로 설정)username: 사용자명 (REQUIRED_FIELDS에 포함)nickname: 닉네임 (선택사항, 최대 30자)bio: 자기소개 (TextField)
연락처 정보:
phone: 전화번호 (정규식 검증 포함, +82 형식 지원)birth_date: 생년월일 (선택사항)
프로필:
profile_image: 프로필 이미지 (profile/%Y/%m/ 경로에 저장)
계정 상태:
is_verified: 이메일 인증 여부is_premium: 프리미엄 사용자 여부
API 관련:
api_key: 고유 API 키 (자동 생성, ak_로 시작하는 24자리)api_calls_limit: API 호출 제한 (기본값 1000)api_calls_count: API 호출 횟수api_calls_reset_date: API 카운트 리셋 날짜last_api_call: 마지막 API 호출 시간
시간 정보:
created_at: 계정 생성일updated_at: 마지막 수정일
메서드:
generate_api_key(): UUID 기반 API 키 생성reset_api_calls(): API 호출 횟수 초기화can_make_api_call(): API 호출 가능 여부 확인increment_api_calls(): API 호출 횟수 증가api_calls_remaining: 남은 API 호출 횟수 (property)full_name: 닉네임 또는 username 반환 (property)
APIUsageLog 모델
API 사용 내역을 추적하는 모델:
- User와 ForeignKey 관계
- endpoint, method, status_code, response_time
- request_size, response_size, ip_address, user_agent
- error_message, created_at
is_success,is_errorproperty 메서드
UserSession 모델
사용자 세션을 관리하는 모델:
- User와 ForeignKey 관계
- session_key (고유값), ip_address, user_agent
- is_active, created_at, last_activity
2. 폼 구조 (forms.py)
UserRegistrationForm
회원가입 폼 (ModelForm):
- username, email, nickname, phone 필드
- password, password_confirm 필드 (최소 8자)
- 한국어 라벨과 placeholder
- 중복 검사 (username, email)
- 전화번호 정규화 (+82 형식으로 자동 변환)
- 비밀번호 일치 검증
- 생성 시 is_active=False (이메일 인증 필요)
UserLoginForm
로그인 폼:
- email_or_username: 이메일 또는 사용자명으로 로그인
- password: 비밀번호
- remember_me: 로그인 상태 유지 (체크박스)
ProfileUpdateForm
프로필 수정 폼:
- nickname, bio, phone, birth_date, profile_image
- 전화번호 자동 정규화
- 날짜 입력은 HTML5 date picker 사용
AdminProfileUpdateForm
관리자용 프로필 수정 폼:
- 일반 ProfileUpdateForm의 모든 필드
- is_verified, is_premium, api_calls_limit 추가
- email은 readonly
비밀번호 관련 폼들
- FindUsernameForm: 이메일로 사용자명 찾기
- PasswordResetRequestForm: 비밀번호 재설정 요청
- PasswordResetForm: 새 비밀번호 설정
- APIKeyRegenerateForm: API 키 재생성 확인
UserFilterForm
관리자용 사용자 필터링:
- search: 사용자명, 이메일, 닉네임 검색
- is_verified, is_premium, is_active 필터
3. 뷰 구조 (views.py)
인증 관련 뷰
signup_view:
- JSON API와 HTML 폼 요청 모두 지원
- 회원가입 후 이메일 인증 링크 발송
- send_verification_email 헬퍼 함수 사용
login_view:
- 이메일 또는 사용자명으로 로그인
- JSON API와 HTML 폼 요청 모두 지원
- remember_me 옵션 처리 (세션 만료 설정)
- 로그인 시 UserSession 생성/업데이트
- 디버깅을 위한 상세한 로깅
logout_view:
- 현재 세션 비활성화
- 로그아웃 후 홈으로 리다이렉트
verify_email_view:
- 이메일 인증 토큰 검증
- 성공 시 계정 활성화 및 자동 로그인
계정 관리 뷰
find_id_view:
- 이메일로 사용자명 찾기
- 결과를 이메일로 발송
reset_password_request_view:
- 비밀번호 재설정 링크 요청
- 이메일 존재 여부 확인
reset_password_confirm_view:
- 토큰 검증 후 새 비밀번호 설정
프로필 관련 뷰
profile_view:
- 프로필 조회 및 수정
- API 사용 통계 표시
- 최근 세션 목록 표시
api_usage_view:
- API 사용 로그 조회
- 필터링 (endpoint, status, date)
- 페이지네이션 (20개씩)
- 통계 정보 (총 호출, 성공률)
sessions_view:
- 활성 세션 목록 표시
- 개별 세션 종료
- 모든 세션 일괄 종료 (현재 세션 제외)
regenerate_api_key_view:
- API 키 재생성
- 확인 절차 필요
관리자 전용 뷰
admin_user_list_view:
- 사용자 목록 (스태프만 접근)
- 검색 및 필터링
- 페이지네이션 (50개씩)
admin_user_detail_view:
- 사용자 상세 정보
- 프로필 수정 (AdminProfileUpdateForm 사용)
- 사용자 통계 표시
헬퍼 함수
send_verification_email(): 이메일 인증 링크 발송get_client_ip(): 클라이언트 IP 주소 추출
4. URL 구조 (urls.py)
app_name = 'account'
# 인증 관련
- signup/, register/ → signup_view
- login/, user_login/ → login_view
- logout/, user_logout/ → logout_view
# 비밀번호 관리
- find-id/ → find_id_view
- reset-password/ → reset_password_request_view
- reset-password/<uidb64>/<token>/ → reset_password_confirm_view
# 이메일 인증
- verify-email/<uidb64>/<token>/ → verify_email_view
# 프로필 관리
- profile/ → profile_view
- api-usage/ → api_usage_view
- sessions/ → sessions_view
- regenerate-api-key/, regenerate-token/ → regenerate_api_key_view
# 관리자 기능
- admin/users/ → admin_user_list_view
- admin/users/<int:user_id>/ → admin_user_detail_view
5. 템플릿 구조
기본 템플릿들
- signup.html: 회원가입 폼
- login.html: 로그인 폼 (remember_me 체크박스 포함)
- profile.html: 프로필 페이지
- find_id.html: 아이디 찾기
- reset_password_request.html: 비밀번호 재설정 요청
- reset_password_form.html: 새 비밀번호 설정
- verification_success.html: 이메일 인증 성공
- invalid_link.html: 유효하지 않은 링크
- api_usage.html: API 사용 현황
- sessions.html: 세션 관리
- admin/user_list.html: 관리자용 사용자 목록
- admin/user_detail.html: 관리자용 사용자 상세
이메일 템플릿
- email/verify_email.html: 이메일 인증 링크
- email/find_id_email.html: 사용자명 찾기 결과
- email/password_reset_email.html: 비밀번호 재설정 링크
6. 주요 기능 요구사항
보안 기능
- CSRF 보호
- 비밀번호 최소 8자 이상
- 이메일 인증 후 계정 활성화
- 세션별 IP 주소 및 User Agent 추적
- API 키 자동 생성 및 고유성 보장
UX 개선사항
- 모든 메시지와 라벨 한국어화
- JSON API와 HTML 폼 요청 모두 지원
- 적절한 HTTP 상태 코드 반환
- Django messages framework 활용
- 폼 필드에 placeholder 제공
- 전화번호 자동 정규화 (+82 형식)
API 지원
- 모든 주요 뷰에서 JSON 응답 지원
- 일관된 응답 형식
- 적절한 에러 핸들링
관리자 기능
- 사용자 검색 및 필터링
- 사용자 상태 관리 (인증, 프리미엄, 활성화)
- API 사용 제한 설정
- 사용자별 통계 확인
7. 설정 요구사항
settings.py 설정
AUTH_USER_MODEL = 'account.User'
LOGIN_URL = '/account/login/'
LOGIN_REDIRECT_URL = '/account/profile/'
마이그레이션
- 커스텀 User 모델 마이그레이션
- 인덱스 생성 (email, api_key, created_at)
미디어 파일
- 프로필 이미지 업로드 경로 설정
- MEDIA_ROOT 및 MEDIA_URL 설정
8. 추가 고려사항
- 에러 처리: 모든 뷰에서 적절한 예외 처리
- 로깅: 중요한 작업에 대한 로깅 (특히 로그인 과정)
- 성능: 데이터베이스 쿼리 최적화
- 확장성: 향후 2단계 인증 등 추가 기능 고려
- 테스트: 단위 테스트 및 통합 테스트 작성
이 시스템은 기존 Django 프로젝트와 완벽하게 호환되면서도, 현대적인 웹 애플리케이션에 필요한 모든 인증 기능을 제공해야 합니다.
728x90
반응형
'코딩' 카테고리의 다른 글
| django migration Reset (0) | 2025.08.06 |
|---|---|
| django Data Migration Guide (0) | 2025.08.03 |
| 방법이 필요한 게 아니다. 필요한 것은 '무한한 아이디어; Ideas' 이다. (0) | 2025.07.28 |
| Name of New System Development Methodology (0) | 2025.07.28 |
| The System Ideas' Methodology 11 (0) | 2025.07.28 |