# 既存のインポート部分を変更 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)