API 95%完成。メール未テスト、早野API未テスト、ユーザー情報・削除は動いてない。
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
from sys import prefix
|
||||
from rest_framework import urlpatterns
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from .views import LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, LocationsInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI, UserActionViewset, UserMakeActionViewset, UserDestinations, UpdateOrder, LocationInBound, DeleteDestination, CustomAreaLocations, GetAllGifuAreas, CustomAreaNames, userDetials, UserTracksViewSet, CatByCity, ChangePasswordView, GoalImageViewSet, CheckinImageViewSet, ExtentForLocations, DeleteAccount, PrivacyView, RegistrationView, TeamViewSet,MemberViewSet,EntryViewSet,RegisterView, VerifyEmailView, NewEventListView,NewEvent2ListView,NewCategoryListView,CategoryListView, MemberUserDetailView, TeamMembersWithUserView,MemberAddView,UserActivationView,RegistrationView,TempUserRegistrationView
|
||||
from .views import LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, LocationsInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI, UserActionViewset, UserMakeActionViewset, UserDestinations, UpdateOrder, LocationInBound, DeleteDestination, CustomAreaLocations, GetAllGifuAreas, CustomAreaNames, userDetials, UserTracksViewSet, CatByCity, ChangePasswordView, GoalImageViewSet, CheckinImageViewSet, ExtentForLocations, DeleteAccount, PrivacyView, RegistrationView, TeamViewSet,MemberViewSet,EntryViewSet,RegisterView, VerifyEmailView, NewEventListView,NewEvent2ListView,NewCategoryListView,CategoryListView, MemberUserDetailView, TeamMembersWithUserView,MemberAddView,UserActivationView,RegistrationView,TempUserRegistrationView,ResendInvitationEmailView
|
||||
from django.urls import path, include
|
||||
from knox import views as knox_views
|
||||
|
||||
@ -84,5 +84,6 @@ urlpatterns += [
|
||||
#path('register/', RegistrationView.as_view(), name='register'), #直接の登録はしない。
|
||||
path('register/', TempUserRegistrationView.as_view(), name='temp-register'), # 仮登録
|
||||
#path('register/temp/', RegisterView.as_view(), name='register'), # 古い仮登録
|
||||
path('reactivate/<str:activation_token>/',ResendInvitationEmailView.as_view(),name='reactivate'),
|
||||
|
||||
]
|
||||
|
||||
54
rog/utils.py
54
rog/utils.py
@ -14,8 +14,21 @@ def load_email_template(template_name, context):
|
||||
subject, _, body = email_content.partition('\n\n')
|
||||
subject = subject.replace('件名: ', '').strip()
|
||||
|
||||
# 件名と本文を分離し、件名から改行を削除
|
||||
subject, _, body = email_content.partition('\n\n')
|
||||
subject = subject.replace('件名: ', '').strip().replace('\n', ' ')
|
||||
|
||||
return subject, body
|
||||
|
||||
def share_send_email(subject, body, recipient_email):
|
||||
try:
|
||||
send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [recipient_email], fail_silently=False)
|
||||
logger.info(f"メールを送信しました。 受信者: {recipient_email}")
|
||||
except Exception as e:
|
||||
logger.error(f"メールの送信に失敗しました。 受信者: {recipient_email}, エラー: {str(e)}")
|
||||
raise # エラーを再度発生させて、呼び出し元で処理できるようにします
|
||||
|
||||
|
||||
# 既にユーザーになっている人にチームへの参加要請メールを出す。
|
||||
#
|
||||
def send_team_join_email(sender,user,team,entry,activation_link):
|
||||
@ -26,14 +39,9 @@ def send_team_join_email(sender,user,team,entry,activation_link):
|
||||
'service_name': settings.SERVICE_NAME,
|
||||
}
|
||||
|
||||
subject, body = load_email_template('activation_email.txt', context)
|
||||
|
||||
try:
|
||||
send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [user.email], fail_silently=False)
|
||||
logger.info(f"チームへの参加承認メールを送信しました。 受信者: {user.email}")
|
||||
except Exception as e:
|
||||
logger.error(f"チームへの参加承認メールの送信に失敗しました。 受信者: {user.email}, エラー: {str(e)}")
|
||||
raise # エラーを再度発生させて、呼び出し元で処理できるようにします
|
||||
subject, body = load_email_template('team_invitation_email.txt', context)
|
||||
share_send_email(subject,body,user.email)
|
||||
|
||||
|
||||
# 自らユーザー登録した際に、メールの確認メールを送る。
|
||||
#
|
||||
@ -46,16 +54,7 @@ def send_verification_email(user, activation_link):
|
||||
}
|
||||
|
||||
subject, body = load_email_template('verification_email.txt', context)
|
||||
|
||||
logger.info(f"subject: {subject}")
|
||||
logger.info(f"body: {body}")
|
||||
|
||||
try:
|
||||
send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [user.email], fail_silently=False)
|
||||
logger.info(f"アクティベーションメールを送信しました。 受信者: {user.email}")
|
||||
except Exception as e:
|
||||
logger.error(f"アクティベーションメールの送信に失敗しました。 受信者: {user.email}, エラー: {str(e)}")
|
||||
raise # エラーを再度発生させて、呼び出し元で処理できるようにします
|
||||
share_send_email(subject,body,user.email)
|
||||
|
||||
|
||||
# まだユーザーでない人にチームメンバー招待メールを送る
|
||||
@ -70,14 +69,10 @@ def send_invitation_email(sender,user,team,entry,activation_link):
|
||||
'service_name': settings.SERVICE_NAME,
|
||||
}
|
||||
|
||||
subject, body = load_email_template('invitaion_email.txt', context)
|
||||
subject, body = load_email_template('rogaining_invitaion_email.txt', context)
|
||||
share_send_email(subject,body,user.email)
|
||||
|
||||
|
||||
try:
|
||||
send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [user.email], fail_silently=False)
|
||||
logger.info(f"招待メールを送信しました。 受信者: {user.email}")
|
||||
except Exception as e:
|
||||
logger.error(f"招待メールの送信に失敗しました。 受信者: {user.email}, エラー: {str(e)}")
|
||||
raise # エラーを再度発生させて、呼び出し元で処理できるようにします
|
||||
|
||||
# エントリーしたら、その内容をメンバーに送信する。
|
||||
#
|
||||
@ -89,12 +84,7 @@ def send_entry_email(sender,user,team,entry,activation_link):
|
||||
'service_name': settings.SERVICE_NAME,
|
||||
}
|
||||
|
||||
subject, body = load_email_template('invitaion_email.txt', context)
|
||||
subject, body = load_email_template('entry_notification_email.txt', context)
|
||||
share_send_email(subject,body,user.email)
|
||||
|
||||
try:
|
||||
send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [user.email], fail_silently=False)
|
||||
logger.info(f"エントリーメールを送信しました。 受信者: {user.email}")
|
||||
except Exception as e:
|
||||
logger.error(f"エントリーメールの送信に失敗しました。 受信者: {user.email}, エラー: {str(e)}")
|
||||
raise # エラーを再度発生させて、呼び出し元で処理できるようにします
|
||||
|
||||
|
||||
98
rog/views.py
98
rog/views.py
@ -332,6 +332,7 @@ class UserUpdateAPI(generics.UpdateAPIView):
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
# User 情報取得
|
||||
class UserAPI(generics.RetrieveAPIView):
|
||||
permission_classes = [permissions.IsAuthenticated,]
|
||||
serializer_class = UserSerializer
|
||||
@ -810,6 +811,28 @@ class EntryViewSet(viewsets.ModelViewSet):
|
||||
def perform_create(self, serializer):
|
||||
serializer.save(owner=self.request.user)
|
||||
|
||||
def register_team(self, entry):
|
||||
api_url = f"{settings.FRONTEND_URL}/gifuroge/register_team"
|
||||
user = self.request.user
|
||||
|
||||
data = {
|
||||
"zekken_number": entry.team.zekken_number,
|
||||
"event_code": entry.event.event_code,
|
||||
"team_name": entry.team.team_name,
|
||||
"class_name": entry.category.category_name,
|
||||
"password": user.password # パスワードの扱いに注意が必要です
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(api_url, data=data)
|
||||
response.raise_for_status()
|
||||
logger.info(f"Team registered successfully for entry {entry.id}")
|
||||
except requests.RequestException as e:
|
||||
logger.error(f"Failed to register team for entry {entry.id}. Error: {str(e)}")
|
||||
# エラーが発生しても、エントリー自体は作成されています
|
||||
# 必要に応じて、ここでエラーハンドリングを追加できます
|
||||
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
partial = kwargs.pop('partial', False)
|
||||
instance = self.get_object()
|
||||
@ -1133,20 +1156,75 @@ class RegisterView(APIView):
|
||||
return Response({'message': 'Verification email sent'}, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class ResendInvitationEmailView(APIView):
|
||||
def post(self, request):
|
||||
email = request.data.get('email')
|
||||
if not email:
|
||||
return Response({"error": "メールアドレスを指定してください。"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
try:
|
||||
temp_user = TempUser.objects.get(email=email)
|
||||
verification_url = request.build_absolute_uri(
|
||||
reverse('verify-email', kwargs={'verification_code': temp_user.verification_code})
|
||||
)
|
||||
send_verification_email(temp_user, verification_url)
|
||||
logger.info(f"招待メールを再送信しました。Email: {email}")
|
||||
return Response({"message": "招待メールを再送信しました。"}, status=status.HTTP_200_OK)
|
||||
except ObjectDoesNotExist:
|
||||
logger.warning(f"仮登録されていないメールアドレスに対して招待メールの再送信が試みられました。Email: {email}")
|
||||
return Response({"error": "指定されたメールアドレスは仮登録されていません。"}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
|
||||
|
||||
class TempUserRegistrationView(APIView):
|
||||
def post(self, request):
|
||||
serializer = TempUserRegistrationSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
temp_user = serializer.save()
|
||||
verification_code = uuid.uuid4()
|
||||
temp_user.verification_code = verification_code
|
||||
temp_user.save()
|
||||
email = request.data.get('email')
|
||||
|
||||
# 本登録済みのユーザーチェック
|
||||
if CustomUser.objects.filter(email=email).exists():
|
||||
logger.warning(f"既に本登録されているメールアドレスでの仮登録が試みられました。Email: {email}")
|
||||
return Response({"error": "このメールアドレスは既に本登録されています。"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# 仮登録済みのユーザーチェック
|
||||
try:
|
||||
temp_user = TempUser.objects.get(email=email)
|
||||
verification_url = request.build_absolute_uri(
|
||||
reverse('verify-email', kwargs={'verification_code': verification_code})
|
||||
reverse('verify-email', kwargs={'verification_code': temp_user.verification_code})
|
||||
)
|
||||
send_verification_email(temp_user,verification_url) #招待メールを送る。
|
||||
return Response({"message": "仮登録が完了しました。招待メールを送信しました。"}, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
send_verification_email(temp_user, verification_url)
|
||||
logger.info(f"既に仮登録されているユーザーに招待メールを再送信しました。Email: {email}")
|
||||
return Response({"message": "既に仮登録は行われていますが、招待メールを再送信しました。"}, status=status.HTTP_200_OK)
|
||||
except TempUser.DoesNotExist:
|
||||
# 新規仮登録
|
||||
serializer = TempUserRegistrationSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
temp_user = serializer.save()
|
||||
verification_code = uuid.uuid4()
|
||||
temp_user.verification_code = verification_code
|
||||
temp_user.save()
|
||||
verification_url = request.build_absolute_uri(
|
||||
reverse('verify-email', kwargs={'verification_code': verification_code})
|
||||
)
|
||||
send_verification_email(temp_user, verification_url)
|
||||
logger.info(f"新規ユーザーを仮登録し、招待メールを送信しました。Email: {email}")
|
||||
return Response({"message": "仮登録が完了しました。招待メールを送信しました。"}, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
|
||||
#serializer = TempUserRegistrationSerializer(data=request.data)
|
||||
#if serializer.is_valid():
|
||||
# temp_user = serializer.save()
|
||||
# verification_code = uuid.uuid4()
|
||||
# temp_user.verification_code = verification_code
|
||||
# temp_user.save()
|
||||
# verification_url = request.build_absolute_uri(
|
||||
# reverse('verify-email', kwargs={'verification_code': verification_code})
|
||||
# )
|
||||
# send_verification_email(temp_user,verification_url) #招待メールを送る。
|
||||
# return Response({"message": "仮登録が完了しました。招待メールを送信しました。"}, status=status.HTTP_201_CREATED)
|
||||
#return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# アクティベーション
|
||||
class VerifyEmailView(APIView):
|
||||
|
||||
Reference in New Issue
Block a user