temp update
This commit is contained in:
146
rog/views.py
146
rog/views.py
@ -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'):
|
||||
|
||||
Reference in New Issue
Block a user