temporary update
This commit is contained in:
73
rog/admin.py
73
rog/admin.py
@ -4,7 +4,7 @@ from django.shortcuts import render
|
||||
from leaflet.admin import LeafletGeoAdmin
|
||||
from leaflet.admin import LeafletGeoAdminMixin
|
||||
from leaflet_admin_list.admin import LeafletAdminListMixin
|
||||
from .models import RogUser, Location, SystemSettings, JoinedEvent, Favorite, TravelList, TravelPoint, ShapeLayers, Event, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, CustomUser, GifuAreas, UserTracks, templocation, UserUpload, EventUser, GoalImages, CheckinImages
|
||||
from .models import RogUser, Location, SystemSettings, JoinedEvent, Favorite, TravelList, TravelPoint, ShapeLayers, Event, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, CustomUser, GifuAreas, UserTracks, templocation, UserUpload, EventUser, GoalImages, CheckinImages, NewEvent, Team, Category, Entry, Member, TempUser
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
from django.urls import path
|
||||
from django.shortcuts import render
|
||||
@ -53,15 +53,18 @@ class UserAdminConfig(UserAdmin):
|
||||
print("-------Event code--------")
|
||||
for i in data:
|
||||
_exist = CustomUser.objects.filter(email=i["zekken_number"]).delete()
|
||||
other_fields.setDefaut('zekken_number',i['zekken_number'])
|
||||
other_fields.setdefault('is_staff', True)
|
||||
other_fields.setdefault('is_superuser', False)
|
||||
other_fields.setdefault('is_active', True)
|
||||
other_fields.setdefault('event_code', i['event_code'])
|
||||
other_fields.setdefault('team_name', i['team_name'])
|
||||
other_fields.setdefault('group', '大垣-初心者')
|
||||
|
||||
usr = CustomUser.objects.create_user(
|
||||
email=i["zekken_number"],
|
||||
zekken_number=i['zekken_number'],
|
||||
is_rogaining=True,
|
||||
event_code=i['event_code'],
|
||||
team_name=i['team_name'],
|
||||
group='大垣-初心者',
|
||||
password=i['password'],
|
||||
is_staff= True
|
||||
**other_fields
|
||||
)
|
||||
|
||||
form = loadUserForm()
|
||||
@ -193,7 +196,59 @@ class TempLocationAdmin(LeafletGeoAdmin):
|
||||
list_display = ('location_id','cp', 'location_name', 'category', 'event_name', 'event_active', 'auto_checkin', 'checkin_radius', 'checkin_point', 'buy_point',)
|
||||
actions = [tranfer_to_location,]
|
||||
|
||||
@admin.register(NewEvent)
|
||||
class NewEventAdmin(admin.ModelAdmin):
|
||||
list_display = ['event_name', 'start_datetime', 'end_datetime']
|
||||
search_fields = ['event_name']
|
||||
|
||||
@admin.register(Team)
|
||||
class TeamAdmin(admin.ModelAdmin):
|
||||
list_display = ['zekken_number', 'team_name', 'owner']
|
||||
search_fields = ['zekken_number', 'team_name', 'owner__email']
|
||||
|
||||
@admin.register(Category)
|
||||
class CategoryAdmin(admin.ModelAdmin):
|
||||
list_display = ['category_name', 'category_number', 'duration', 'num_of_member', 'family', 'female']
|
||||
list_filter = ['family', 'female']
|
||||
search_fields = ['category_name']
|
||||
|
||||
@admin.register(Entry)
|
||||
class EntryAdmin(admin.ModelAdmin):
|
||||
list_display = ['team', 'event', 'category', 'date']
|
||||
list_filter = ['event', 'category']
|
||||
search_fields = ['team__team_name', 'event__event_name']
|
||||
|
||||
@admin.register(Member)
|
||||
class MemberAdmin(admin.ModelAdmin):
|
||||
list_display = ['team', 'user']
|
||||
search_fields = ['team__team_name', 'user__email']
|
||||
|
||||
@admin.register(TempUser)
|
||||
class TempUserAdmin(admin.ModelAdmin):
|
||||
list_display = ['email', 'is_rogaining', 'zekken_number', 'event_code', 'team_name', 'group', 'created_at', 'expires_at']
|
||||
list_filter = ['is_rogaining', 'group']
|
||||
search_fields = ['email', 'zekken_number', 'team_name']
|
||||
|
||||
|
||||
# CustomUserAdmin の修正(既存のものを更新)
|
||||
class CustomUserAdmin(UserAdmin):
|
||||
list_display = ('email', 'is_staff', 'is_active', 'is_rogaining', 'zekken_number', 'event_code', 'team_name', 'group', 'firstname', 'lastname')
|
||||
list_filter = ('is_staff', 'is_active', 'is_rogaining', 'group')
|
||||
fieldsets = (
|
||||
(None, {'fields': ('email', 'password')}),
|
||||
('Personal info', {'fields': ('firstname', 'lastname', 'date_of_birth', 'female')}),
|
||||
('Permissions', {'fields': ('is_staff', 'is_active', 'is_rogaining','user_permissions')}),
|
||||
('Rogaining info', {'fields': ('zekken_number', 'event_code', 'team_name', 'group')}),
|
||||
)
|
||||
add_fieldsets = (
|
||||
(None, {
|
||||
'classes': ('wide',),
|
||||
#'fields': ('email', 'password1', 'password2', 'is_staff', 'is_active', 'is_rogaining')}
|
||||
'fields': ('email', 'password1', 'password2', 'lastname','firstname', 'date_of_birth', 'female','is_staff', 'is_active', 'is_rogaining')}
|
||||
),
|
||||
)
|
||||
search_fields = ('email', 'firstname', 'lastname', 'zekken_number', 'team_name')
|
||||
ordering = ('email',)
|
||||
|
||||
admin.site.register(Useractions)
|
||||
admin.site.register(RogUser, admin.ModelAdmin)
|
||||
@ -220,3 +275,7 @@ admin.site.register(CustomUser, UserAdminConfig)
|
||||
admin.site.register(templocation, TempLocationAdmin)
|
||||
admin.site.register(GoalImages, admin.ModelAdmin)
|
||||
admin.site.register(CheckinImages, admin.ModelAdmin)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
16
rog/management/commands/cleanup_temp_users.py
Normal file
16
rog/management/commands/cleanup_temp_users.py
Normal file
@ -0,0 +1,16 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.utils import timezone
|
||||
from rog.models import TempUser # アプリ名 'rog' を適切に変更してください
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Deletes expired temporary user records'
|
||||
|
||||
def handle(self, *args, **options):
|
||||
expired_users = TempUser.objects.filter(expires_at__lt=timezone.now())
|
||||
count = expired_users.count()
|
||||
expired_users.delete()
|
||||
self.stdout.write(self.style.SUCCESS(f'Successfully deleted {count} expired temporary user records'))
|
||||
|
||||
|
||||
# cron job の設定
|
||||
# 0 3 * * * /path/to/your/python /path/to/your/manage.py cleanup_temp_users
|
||||
113
rog/migrations/0042_auto_20240722_1603.py
Normal file
113
rog/migrations/0042_auto_20240722_1603.py
Normal file
@ -0,0 +1,113 @@
|
||||
# Generated by Django 3.2.9 on 2024-07-22 07:03
|
||||
|
||||
import datetime
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rog', '0041_auto_20230526_1724'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Category',
|
||||
fields=[
|
||||
('category_name', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||
('category_number', models.IntegerField(unique=True)),
|
||||
('duration', models.DurationField(default=datetime.timedelta(seconds=18000))),
|
||||
('num_of_member', models.IntegerField(default=1)),
|
||||
('family', models.BooleanField(default=False)),
|
||||
('female', models.BooleanField(default=False)),
|
||||
],
|
||||
options={
|
||||
'unique_together': {('category_name', 'category_number')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='NewEvent',
|
||||
fields=[
|
||||
('event_name', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||
('start_datetime', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('end_datetime', models.DateTimeField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TempUser',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('email', models.EmailField(max_length=254, unique=True)),
|
||||
('password', models.CharField(max_length=128)),
|
||||
('is_rogaining', models.BooleanField(default=False)),
|
||||
('zekken_number', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('event_code', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('team_name', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('group', models.CharField(max_length=255)),
|
||||
('firstname', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('lastname', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('date_of_birth', models.DateField(blank=True, null=True)),
|
||||
('female', models.BooleanField(default=False)),
|
||||
('verification_code', models.UUIDField(default=uuid.uuid4, editable=False)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('expires_at', models.DateTimeField()),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customuser',
|
||||
name='date_of_birth',
|
||||
field=models.DateField(blank=True, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customuser',
|
||||
name='female',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customuser',
|
||||
name='firstname',
|
||||
field=models.CharField(blank=True, max_length=255, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customuser',
|
||||
name='lastname',
|
||||
field=models.CharField(blank=True, max_length=255, null=True),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Team',
|
||||
fields=[
|
||||
('zekken_number', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||
('team_name', models.CharField(max_length=255)),
|
||||
('password', models.CharField(max_length=128)),
|
||||
('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Member',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.team')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'unique_together': {('team', 'user')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Entry',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date', models.DateTimeField()),
|
||||
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.category')),
|
||||
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.newevent')),
|
||||
('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.team')),
|
||||
],
|
||||
options={
|
||||
'unique_together': {('team', 'event', 'date')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@ -69,13 +69,13 @@ def remove_bom_inplace(path):
|
||||
|
||||
class CustomUserManager(BaseUserManager):
|
||||
|
||||
def create_user(self, email, password, group, event_code, team_name, **other_fields):
|
||||
def create_user(self, email, password=None, **other_fields):
|
||||
if not email:
|
||||
raise ValueError(_("You must provide an email address"))
|
||||
|
||||
user = self.model(email=email, group=group, event_code=event_code, team_name=team_name, zekken_number=email, is_rogaining=True, **other_fields)
|
||||
email = self.normalize_email(email)
|
||||
user = self.model(email=email, **other_fields)
|
||||
user.set_password(password)
|
||||
user.save()
|
||||
user.save(using=self._db)
|
||||
|
||||
return user
|
||||
|
||||
@ -95,7 +95,7 @@ class CustomUserManager(BaseUserManager):
|
||||
if other_fields.get('is_superuser') is not True:
|
||||
raise ValueError(_('Superuser must have is_superuser set to True'))
|
||||
|
||||
return self.create_user(email, password, group, event_code, team_name, **other_fields)
|
||||
return self.create_user(email, password, **other_fields)
|
||||
|
||||
|
||||
|
||||
@ -261,7 +261,7 @@ class TempUser(models.Model):
|
||||
def is_valid(self):
|
||||
return timezone.now() <= self.expires_at
|
||||
|
||||
class Event(models.Model):
|
||||
class NewEvent(models.Model):
|
||||
event_name = models.CharField(max_length=255, primary_key=True)
|
||||
start_datetime = models.DateTimeField(default=timezone.now)
|
||||
end_datetime = models.DateTimeField()
|
||||
@ -311,7 +311,7 @@ class Category(models.Model):
|
||||
|
||||
class Entry(models.Model):
|
||||
team = models.ForeignKey(Team, on_delete=models.CASCADE)
|
||||
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
||||
event = models.ForeignKey(NewEvent, on_delete=models.CASCADE)
|
||||
category = models.ForeignKey(Category, on_delete=models.CASCADE)
|
||||
date = models.DateTimeField()
|
||||
|
||||
@ -1002,7 +1002,10 @@ def updatePolygonTable(mdl, fields):
|
||||
|
||||
def createUser(fields):
|
||||
with transaction.atomic():
|
||||
user = CustomUser.objects.create_user(email=fields[0], event_code=fields[1], team_name=fields[2], group=fields[3], password=fields[4])
|
||||
other_fields.setdefault('event_code',fields[1])
|
||||
other_fields.setdefault('team_name',fields[1])
|
||||
other_fields.setdefault('group',fields[1])
|
||||
user = CustomUser.objects.create_user(email=fields[0], password=fields[4], **other_fields)
|
||||
user.is_superuser = False
|
||||
user.is_staff = False
|
||||
user.save()
|
||||
|
||||
6
rog/permissions.py
Normal file
6
rog/permissions.py
Normal file
@ -0,0 +1,6 @@
|
||||
from rest_framework import permissions
|
||||
|
||||
class IsMemberOrTeamOwner(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj):
|
||||
# obj は Member インスタンス
|
||||
return request.user == obj.user or request.user == obj.team.owner
|
||||
@ -1,7 +1,7 @@
|
||||
from rest_framework import serializers
|
||||
from rest_framework_gis.serializers import GeoFeatureModelSerializer
|
||||
from sqlalchemy.sql.functions import mode
|
||||
from .models import Location, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, GifuAreas, RogUser, UserTracks, GoalImages, CheckinImages,CustomUser
|
||||
from .models import Location, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, GifuAreas, RogUser, UserTracks, GoalImages, CheckinImages,CustomUser,NewEvent, Team, Category, Entry, Member, TempUser
|
||||
from drf_extra_fields.fields import Base64ImageField
|
||||
|
||||
#from django.contrib.auth.models import User
|
||||
@ -192,4 +192,51 @@ class RegistrationSerializer(serializers.ModelSerializer):
|
||||
raise serializers.ValidationError({'password': 'Passwords must match.'})
|
||||
user.set_password(password)
|
||||
user.save()
|
||||
return user
|
||||
return user
|
||||
|
||||
class NewEventSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = NewEvent
|
||||
fields = ['event_name', 'start_datetime', 'end_datetime']
|
||||
|
||||
class TeamSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Team
|
||||
fields = ['zekken_number', 'team_name', 'password', 'owner']
|
||||
|
||||
class CategorySerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Category
|
||||
fields = ['category_name', 'category_number', 'duration', 'num_of_member', 'family', 'female']
|
||||
|
||||
class EntrySerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Entry
|
||||
fields = ['team', 'event', 'category', 'date']
|
||||
|
||||
class MemberSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Member
|
||||
fields = ['team', 'user']
|
||||
|
||||
class TempUserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = TempUser
|
||||
fields = ['email', 'password', 'is_rogaining', 'zekken_number', 'event_code', 'team_name', 'group', 'firstname', 'lastname', 'date_of_birth', 'female', 'verification_code', 'created_at', 'expires_at']
|
||||
|
||||
class CustomUserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = CustomUser
|
||||
fields = ['email', 'is_staff', 'is_active', 'is_rogaining', 'zekken_number', 'event_code', 'team_name', 'group', 'firstname', 'lastname', 'date_of_birth', 'female']
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = CustomUser
|
||||
fields = ['email', 'firstname', 'lastname', 'date_of_birth', 'female', 'is_rogaining', 'zekken_number', 'event_code', 'team_name', 'group']
|
||||
|
||||
class MemberWithUserSerializer(serializers.ModelSerializer):
|
||||
user = UserSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Member
|
||||
fields = ['user', 'team']
|
||||
|
||||
29
rog/urls.py
29
rog/urls.py
@ -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
|
||||
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,CategoryListView, MemberUserDetailView, TeamMembersWithUserView
|
||||
from django.urls import path, include
|
||||
from knox import views as knox_views
|
||||
|
||||
@ -18,6 +18,24 @@ router.register(prefix='track', viewset=UserTracksViewSet, basename='track')
|
||||
router.register(prefix='goalimage', viewset=GoalImageViewSet, basename='goalimage')
|
||||
router.register(prefix='checkinimage', viewset=CheckinImageViewSet, basename='checkinimage')
|
||||
|
||||
#Akira 追加
|
||||
# /api/teams/ - チームの一覧取得と作成
|
||||
# /api/teams/<pk>/ - 特定のチームの取得、更新、削除
|
||||
# /api/members/ - メンバーの一覧取得と作成
|
||||
# /api/members/<pk>/ - 特定のメンバーの取得、更新、削除
|
||||
# /api/entries/ - エントリーの一覧取得と作成
|
||||
# /api/entries/<pk>/ - 特定のエントリーの取得、更新、削除
|
||||
#
|
||||
router.register(r'teams', TeamViewSet)
|
||||
router.register(r'members', MemberViewSet)
|
||||
router.register(r'entries', EntryViewSet)
|
||||
|
||||
# Akira 追加
|
||||
# GET /api/members/<member_id>/user/: 特定のメンバーのユーザー情報を取得
|
||||
# GET /api/teams/<team_id>/members-with-user/: 特定のチームの全メンバーとそのユーザー情報を取得
|
||||
|
||||
|
||||
|
||||
|
||||
urlpatterns = router.urls
|
||||
|
||||
@ -49,4 +67,11 @@ urlpatterns += [
|
||||
path('privacy/', PrivacyView, name='privacy-view'),
|
||||
path('register', RegistrationView.as_view(), name='register'),
|
||||
# path('goal-image/', GoalImageViewSet.as_view(), name='goal-image')
|
||||
]
|
||||
path('register/', RegisterView.as_view(), name='register'),
|
||||
path('verify-email/<uuid:verification_code>/', VerifyEmailView.as_view(), name='verify-email'),
|
||||
path('categories/', CategoryListView.as_view(), name='category-list'),
|
||||
path('new-events/', NewEventListView.as_view(), name='new-event-list'),
|
||||
path('members/<int:pk>/user/', MemberUserDetailView.as_view(), name='member-user-detail'),
|
||||
path('teams/<int:team_id>/members-with-user/', TeamMembersWithUserView.as_view(), name='team-members-with-user'),
|
||||
|
||||
]
|
||||
|
||||
192
rog/views.py
192
rog/views.py
@ -1,8 +1,8 @@
|
||||
from curses.ascii import NUL
|
||||
from django.core.serializers import serialize
|
||||
from .models import GoalImages, Location, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, GifuAreas, RogUser, CustomUser, UserTracks, GoalImages, CheckinImages
|
||||
from .models import GoalImages, Location, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, GifuAreas, RogUser, CustomUser, UserTracks, GoalImages, CheckinImages, NewEvent, Team, Category, Entry, Member, TempUser
|
||||
from rest_framework import viewsets
|
||||
from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, LocationCatSerializer, CreateUserSerializer, UserSerializer, LoginUserSerializer, UseractionsSerializer, UserDestinationSerializer, GifuAreaSerializer, LocationEventNameSerializer, RogUserSerializer, UserTracksSerializer, ChangePasswordSerializer, GolaImageSerializer, CheckinImageSerializer, RegistrationSerializer
|
||||
from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, LocationCatSerializer, CreateUserSerializer, UserSerializer, LoginUserSerializer, UseractionsSerializer, UserDestinationSerializer, GifuAreaSerializer, LocationEventNameSerializer, RogUserSerializer, UserTracksSerializer, ChangePasswordSerializer, GolaImageSerializer, CheckinImageSerializer, RegistrationSerializer, MemberWithUserSerializer
|
||||
from knox.models import AuthToken
|
||||
|
||||
from rest_framework import viewsets, generics, status
|
||||
@ -14,7 +14,7 @@ from django.http import JsonResponse
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from django.contrib.gis.db.models import Extent, Union
|
||||
|
||||
from .serializers import TestSerialiser
|
||||
from .serializers import TestSerialiser,NewEventSerializer, TeamSerializer, CategorySerializer, EntrySerializer, MemberSerializer, TempUserSerializer, CustomUserSerializer
|
||||
from .models import TestModel
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.db.models import F
|
||||
@ -29,8 +29,10 @@ from rest_framework.parsers import JSONParser, MultiPartParser
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
import uuid
|
||||
from django.shortcuts import render
|
||||
from .permissions import IsMemberOrTeamOwner
|
||||
|
||||
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
class LocationViewSet(viewsets.ModelViewSet):
|
||||
queryset=Location.objects.all()
|
||||
@ -556,4 +558,184 @@ class RegistrationView(APIView):
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# Akira
|
||||
|
||||
@method_decorator(csrf_exempt, name='dispatch')
|
||||
class NewEventViewSet(viewsets.ModelViewSet):
|
||||
queryset = NewEvent.objects.all()
|
||||
serializer_class = NewEventSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
@method_decorator(csrf_exempt, name='dispatch')
|
||||
class NewEventListView(generics.ListAPIView):
|
||||
queryset = NewEvent.objects.all()
|
||||
serializer_class = NewEventSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
class TeamViewSet(viewsets.ModelViewSet):
|
||||
queryset = Team.objects.all()
|
||||
serializer_class = TeamSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def perform_create(self, serializer):
|
||||
serializer.save(owner=self.request.user)
|
||||
|
||||
class CategoryViewSet(viewsets.ModelViewSet):
|
||||
queryset = Category.objects.all()
|
||||
serializer_class = CategorySerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
@method_decorator(csrf_exempt, name='dispatch')
|
||||
class CategoryListView(generics.ListAPIView):
|
||||
queryset = Category.objects.all()
|
||||
serializer_class = CategorySerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
'''
|
||||
def get(self, request):
|
||||
categories = Category.objects.all()
|
||||
data = []
|
||||
for category in categories:
|
||||
category_name = force_str(category.category_name)
|
||||
data.append({
|
||||
'category_name': category_name,
|
||||
# その他のフィールド
|
||||
})
|
||||
return Response(data)
|
||||
'''
|
||||
|
||||
class EntryViewSet(viewsets.ModelViewSet):
|
||||
queryset = Entry.objects.all()
|
||||
serializer_class = EntrySerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def perform_create(self, serializer):
|
||||
team = Team.objects.get(owner=self.request.user)
|
||||
serializer.save(team=team)
|
||||
|
||||
|
||||
class MemberViewSet(viewsets.ModelViewSet):
|
||||
queryset = Member.objects.all()
|
||||
serializer_class = MemberSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class TempUserViewSet(viewsets.ModelViewSet):
|
||||
queryset = TempUser.objects.all()
|
||||
serializer_class = TempUserSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
# CustomUserViewSetの修正
|
||||
class CustomUserViewSet(viewsets.ModelViewSet):
|
||||
queryset = CustomUser.objects.all()
|
||||
serializer_class = CustomUserSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
user = self.request.user
|
||||
if user.is_staff:
|
||||
return CustomUser.objects.all()
|
||||
return CustomUser.objects.filter(id=user.id)
|
||||
|
||||
# 追加の機能として、チームメンバーを取得するビュー
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
|
||||
class TeamMembersView(generics.ListAPIView):
|
||||
serializer_class = MemberSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
team_id = self.kwargs['team_id']
|
||||
return Member.objects.filter(team_id=team_id)
|
||||
|
||||
# ユーザーのエントリーを取得するビュー
|
||||
class UserEntriesView(generics.ListAPIView):
|
||||
serializer_class = EntrySerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
user = self.request.user
|
||||
return Entry.objects.filter(team__owner=user)
|
||||
|
||||
# イベントのカテゴリーを取得するビュー
|
||||
class EventCategoriesView(generics.ListAPIView):
|
||||
serializer_class = CategorySerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
event_id = self.kwargs['event_id']
|
||||
return Category.objects.filter(entry__event_id=event_id).distinct()
|
||||
|
||||
class RegisterView(APIView):
|
||||
def post(self, request):
|
||||
serializer = TempUserSerializer(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_mail(
|
||||
'Verify your email',
|
||||
f'Click the link to verify your email: {verification_url}',
|
||||
settings.DEFAULT_FROM_EMAIL,
|
||||
[temp_user.email],
|
||||
fail_silently=False,
|
||||
)
|
||||
return Response({'message': 'Verification email sent'}, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class VerifyEmailView(APIView):
|
||||
def get(self, request, verification_code):
|
||||
try:
|
||||
temp_user = TempUser.objects.get(verification_code=verification_code)
|
||||
if temp_user.is_valid():
|
||||
user_data = {
|
||||
'email': temp_user.email,
|
||||
'is_rogaining': temp_user.is_rogaining,
|
||||
'zekken_number': temp_user.zekken_number,
|
||||
'event_code': temp_user.event_code,
|
||||
'team_name': temp_user.team_name,
|
||||
'group': temp_user.group,
|
||||
'firstname': temp_user.firstname,
|
||||
'lastname': temp_user.lastname,
|
||||
'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'}
|
||||
)
|
||||
temp_user.delete()
|
||||
return Response({'message': 'Email verified and user created'}, status=status.HTTP_201_CREATED)
|
||||
|
||||
else:
|
||||
return Response({'message': 'Verification link expired'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
except TempUser.DoesNotExist:
|
||||
return Response({'message': 'Invalid verification code'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class MemberUserDetailView(generics.RetrieveAPIView):
|
||||
serializer_class = MemberWithUserSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
return Member.objects.select_related('user', 'team')
|
||||
|
||||
class TeamMembersWithUserView(generics.ListAPIView):
|
||||
serializer_class = MemberWithUserSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
team_id = self.kwargs['team_id']
|
||||
return Member.objects.filter(team_id=team_id).select_related('user', 'team')
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user