initial setting at 20-Aug-2025

This commit is contained in:
2025-08-20 19:15:19 +09:00
parent eab529bd3b
commit 1ba305641e
149 changed files with 170449 additions and 1802 deletions

72
rog/views_apis/api_auth.py Executable file
View File

@ -0,0 +1,72 @@
# 既存のインポート部分を変更
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from rog.models import NewEvent2, Entry # Eventから変更
import logging
from django.db.models import F, Q
from django.conf import settings
import os
from urllib.parse import urljoin
logger = logging.getLogger(__name__)
"""
これで/check_event_codeエンドポイントがDjangoに実装されました。
このエンドポイントは元のRubyコードと同様に、ゼッケン番号とパスワードの認証を行い、
正しい場合はイベントコードを返します。
※注意: パスワード検証部分は、Djangoのcheck_passwordメソッドを使用していますが、
元のRubyコードでの検証方法と異なる可能性があります。
データベースの実際の構造や認証方法に合わせて調整が必要かもしれません。
"""
@api_view(['GET'])
def check_event_code(request):
"""
ゼッケン番号とパスワードの組み合わせが正しいか確認し、イベントコードを返す
パラメータ:
- zekken_number: ゼッケン番号
- pw: パスワード
"""
logger.info("check_event_code called")
zekken_number = request.query_params.get('zekken_number')
password = request.query_params.get('pw')
logger.debug(f"Parameters: zekken_number={zekken_number}, password={'*' * len(password) if password else None}")
if not zekken_number or not password:
logger.warning("Missing required parameters")
return Response({"status": "ERROR", "message": "ゼッケン番号とパスワードが必要です"}, status=status.HTTP_400_BAD_REQUEST)
try:
# ゼッケン番号とパスワードでユーザーを検索
entry = Entry.objects.filter(zekken_number=zekken_number).first()
if not entry:
logger.warning(f"No entry found for zekken_number: {zekken_number}")
return Response({"status": "ERROR", "message": "ゼッケン番号が見つかりません"}, status=status.HTTP_404_NOT_FOUND)
user = entry.owner
# パスワード検証
if not user.check_password(password):
logger.warning(f"Invalid password for zekken_number: {zekken_number}")
return Response({"status": "ERROR", "message": "パスワードが正しくありません"}, status=status.HTTP_401_UNAUTHORIZED)
# NewEvent2のイベント参照に対応
# Entryモデルがnew_event2などの別フィールド名でNewEvent2を参照している場合は変更が必要
new_event = NewEvent2.objects.filter(id=entry.event.id).first()
event_code = new_event.event_name if new_event else None
if not event_code:
logger.warning(f"No event associated with zekken_number: {zekken_number}")
return Response({"status": "ERROR", "message": "イベントが見つかりません"}, status=status.HTTP_404_NOT_FOUND)
logger.info(f"Authentication successful for zekken_number: {zekken_number}, event_code: {event_code}")
return Response({"status": "OK", "event_code": event_code})
except Exception as e:
logger.error(f"Error in check_event_code: {str(e)}")
return Response({"status": "ERROR", "message": "サーバーエラーが発生しました"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)