temp update

This commit is contained in:
2024-08-02 07:01:32 +00:00
parent 37a253e63a
commit 9d0d3ea102
5 changed files with 307 additions and 65 deletions

View File

@ -1,3 +1,8 @@
from .models import JpnSubPerf # このインポート文をファイルの先頭に追加
from django.contrib.auth import get_user_model
User = get_user_model()
import traceback
import requests
from rest_framework import serializers
from django.db import IntegrityError
@ -398,13 +403,28 @@ def ExtentForLocations(request):
return JsonResponse(locs['geom__extent'], safe=False)
def ExtentForSubPerf(request):
def ExtentForSubPerf_old(request):
sub_perf_id = request.GET.get('sub_perf')
sub_perf = JpnSubPerf.objects.get(id=sub_perf_id)
ext = sub_perf.geom.extent
# iata = serializers.serialize("json",ext)
return JsonResponse(ext, safe=False)
def ExtentForSubPerf(request):
sub_perf_id = request.GET.get('sub_perf')
if not sub_perf_id:
return JsonResponse({"error": "sub_perf parameter is required"}, status=400)
try:
sub_perf = JpnSubPerf.objects.get(id=sub_perf_id)
ext = sub_perf.geom.extent
return JsonResponse(ext, safe=False)
except ObjectDoesNotExist:
return JsonResponse({"error": "Specified sub_perf does not exist"}, status=404)
except Exception as e:
return JsonResponse({"error": "Error on ExtentForSubPerf : {e}"}, status=404)
def CatView(request):
lat1 = float(request.GET.get('la1'))
@ -457,17 +477,94 @@ class RegistrationAPI(generics.GenericAPIView):
})
class LoginView(APIView):
def post(self, request):
email = request.data.get('email')
password = request.data.get('password')
# デバッグコード
from django.contrib.auth.hashers import make_password, check_password
user = CustomUser.objects.filter(email=email).first()
if user:
stored_hash = user.password
print(f"Stored hashed password: {stored_hash}")
is_valid = check_password(raw_password, stored_hash)
print(f"Password is valid during login: {is_valid}")
user = authenticate(request, username=email, password=raw_password)
if user:
token, _ = Token.objects.get_or_create(user=user)
return Response({'token': token.key}, status=status.HTTP_200_OK)
else:
return Response({'error': 'Invalid credentials'}, status=status.HTTP_400_BAD_REQUEST)
#user = authenticate(request, username=email, password=password)
#if user:
# token, _ = Token.objects.get_or_create(user=user)
# return Response({'token': token.key}, status=status.HTTP_200_OK)
#else:
# return Response({'error': 'Invalid credentials'}, status=status.HTTP_400_BAD_REQUEST)
class PasswordResetView(APIView):
def post(self, request):
email = request.data.get('email')
user = CustomUser.objects.filter(email=email).first()
if user:
token = default_token_generator.make_token(user)
uid = urlsafe_base64_encode(force_bytes(user.pk))
reset_link = f"https://yourwebsite.com/reset-password/{uid}/{token}/"
send_mail(
'Password Reset',
f'Click here to reset your password: {reset_link}',
'noreply@yourwebsite.com',
[email],
fail_silently=False,
)
return Response({'message': 'Password reset email sent'}, status=status.HTTP_200_OK)
else:
return Response({'error': 'User not found'}, status=status.HTTP_400_BAD_REQUEST)
class LoginAPI(generics.GenericAPIView):
serializer_class = LoginUserSerializer
def post(self, request, *args, **kwargs):
logger.info(f"Login attempt for user: {request.data.get('email', 'email not provided')}")
logger.debug(f"Request data: {request.data}")
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)[1]
})
try:
serializer.is_valid(raise_exception=True)
user = serializer.validated_data
logger.info(f"User {user.email} logged in successfully")
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)[1]
})
except serializers.ValidationError as e:
logger.error(f"Login failed for user {request.data.get('email', 'email not provided')}: {str(e)}")
logger.error(f"Serializer errors: {serializer.errors}")
error_msg = serializer.errors.get('non_field_errors', ['ログインに失敗しました。'])[0]
return Response({
"error": error_msg,
"details": serializer.errors
}, status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
logger.error(f"Unexpected error during login for user {request.data.get('email', 'email not provided')}: {str(e)}")
logger.error(f"Traceback: {traceback.format_exc()}")
return Response({
"error": "予期せぬエラーが発生しました。",
"details": str(e)
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
class UserUpdateAPI(generics.UpdateAPIView):
permission_classes = [permissions.IsAuthenticated]
@ -807,7 +904,20 @@ class RegistrationView(APIView):
try:
user = serializer.save()
logger.info(f"New user registered: {user.email}")
# パスワードを取得
password = serializer.validated_data.pop('password')
# ユーザーを作成するが、まだ保存しない
user = serializer.save(commit=False)
# パスワードを明示的に設定
user.set_password(password)
# ユーザーを保存
user.save()
logger.info(f"New user registered: {user.email}")
return Response({"message": "ユーザー登録が完了しました。"}, status=status.HTTP_201_CREATED)
except Exception as e:
logger.error(f"Error during user registration: {str(e)}")
return Response({"error": "ユーザー登録中にエラーが発生しました。"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@ -1592,6 +1702,8 @@ class TempUserRegistrationView(APIView):
temp_user = serializer.save()
verification_code = uuid.uuid4()
temp_user.verification_code = verification_code
#password = serializer.validated_data.pop('password')
#temp_user.set_password(password)
temp_user.save()
verification_url = request.build_absolute_uri(
reverse('verify-email', kwargs={'verification_code': verification_code})
@ -1634,12 +1746,20 @@ class VerifyEmailView(APIView):
'date_of_birth': temp_user.date_of_birth,
'female': temp_user.female,
}
# CustomUserを作成
user = CustomUser.objects.create_user(
email=user_data['email'],
password=temp_user.password,
**{k: v for k, v in user_data.items() if k != 'email'}
)
# パスワードを安全にハッシュ化
#hashed_password = make_password(temp_user.password)
try:
# CustomUserを作成
user = CustomUser.objects.create_user(
email=user_data['email'],
password=temp_user.password,
**{k: v for k, v in user_data.items() if k != 'email'}
)
except ValidationError as e:
# パスワードのバリデーションエラーなどの処理
return render(request, 'verification_error.html', {'message': str(e), 'title': 'エラー'})
# チームへの追加処理(もし必要なら)
if hasattr(temp_user, 'team_id'):