update location filter
This commit is contained in:
@ -148,6 +148,7 @@ MEDIA_ROOT = BASE_DIR / "media/"
|
|||||||
#STATICFILES_DIRS = (os.path.join(BASE_DIR, "static2"),os.path.join(BASE_DIR, "media"))
|
#STATICFILES_DIRS = (os.path.join(BASE_DIR, "static2"),os.path.join(BASE_DIR, "media"))
|
||||||
|
|
||||||
|
|
||||||
|
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend' , 'rog.backend.EmailOrUsernameModelBackend', )
|
||||||
|
|
||||||
AUTH_USER_MODEL = 'rog.CustomUser'
|
AUTH_USER_MODEL = 'rog.CustomUser'
|
||||||
|
|
||||||
|
|||||||
BIN
rog/.DS_Store
vendored
Normal file
BIN
rog/.DS_Store
vendored
Normal file
Binary file not shown.
28
rog/backend.py
Normal file
28
rog/backend.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from django.conf import settings
|
||||||
|
#from django.contrib.auth import get_user_model
|
||||||
|
from .models import CustomUser
|
||||||
|
from django.contrib.auth.backends import ModelBackend
|
||||||
|
|
||||||
|
class EmailOrUsernameModelBackend(ModelBackend):
|
||||||
|
"""
|
||||||
|
This is a ModelBacked that allows authentication
|
||||||
|
with either a username or an email address.
|
||||||
|
|
||||||
|
"""
|
||||||
|
def authenticate(self, username=None, password=None):
|
||||||
|
if '@' in username:
|
||||||
|
kwargs = {'email': username}
|
||||||
|
else:
|
||||||
|
kwargs = {'username': username}
|
||||||
|
try:
|
||||||
|
user = CustomUser.objects.get(**kwargs)
|
||||||
|
if user.check_password(password):
|
||||||
|
return user
|
||||||
|
except User.DoesNotExist:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_user(self, username):
|
||||||
|
try:
|
||||||
|
return CustomUser.objects.get(pk=username)
|
||||||
|
except get_user_model().DoesNotExist:
|
||||||
|
return None
|
||||||
18
rog/migrations/0034_alter_customuser_email.py
Normal file
18
rog/migrations/0034_alter_customuser_email.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 3.2.9 on 2022-10-06 10:51
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('rog', '0033_alter_templocation_sub_loc_id'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='customuser',
|
||||||
|
name='email',
|
||||||
|
field=models.CharField(max_length=255, verbose_name='user name'),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
rog/migrations/0035_alter_customuser_email.py
Normal file
18
rog/migrations/0035_alter_customuser_email.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 3.2.9 on 2022-10-06 10:52
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('rog', '0034_alter_customuser_email'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='customuser',
|
||||||
|
name='email',
|
||||||
|
field=models.EmailField(max_length=254, unique=True, verbose_name='user name'),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
rog/migrations/0036_alter_customuser_email.py
Normal file
18
rog/migrations/0036_alter_customuser_email.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 3.2.9 on 2022-10-06 11:01
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('rog', '0035_alter_customuser_email'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='customuser',
|
||||||
|
name='email',
|
||||||
|
field=models.CharField(max_length=255, unique=True, verbose_name='Email'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -1,5 +1,6 @@
|
|||||||
from dataclasses import field
|
from dataclasses import field
|
||||||
import email
|
import email
|
||||||
|
from enum import unique
|
||||||
from pyexpat import model
|
from pyexpat import model
|
||||||
from sre_constants import CH_LOCALE
|
from sre_constants import CH_LOCALE
|
||||||
from typing import ChainMap
|
from typing import ChainMap
|
||||||
@ -182,7 +183,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
|
|||||||
GB2 = '大垣-3時間', '大垣-3時間'
|
GB2 = '大垣-3時間', '大垣-3時間'
|
||||||
GB3 = '大垣-5時間', '大垣-5時間'
|
GB3 = '大垣-5時間', '大垣-5時間'
|
||||||
|
|
||||||
email = models.EmailField(_("email address"), unique=True)
|
email = models.CharField(_("Email"), max_length=255, unique=True)
|
||||||
is_staff = models.BooleanField(default=False)
|
is_staff = models.BooleanField(default=False)
|
||||||
is_active = models.BooleanField(default=True)
|
is_active = models.BooleanField(default=True)
|
||||||
group = models.CharField(max_length=255,
|
group = models.CharField(max_length=255,
|
||||||
|
|||||||
@ -140,3 +140,13 @@ class TestSerialiser(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = TestModel
|
model = TestModel
|
||||||
fields = ('id', 'testbane', 'wanttogo', 'like', 'checkin')
|
fields = ('id', 'testbane', 'wanttogo', 'like', 'checkin')
|
||||||
|
|
||||||
|
|
||||||
|
class ChangePasswordSerializer(serializers.Serializer):
|
||||||
|
model = CustomUser
|
||||||
|
|
||||||
|
"""
|
||||||
|
Serializer for password change endpoint.
|
||||||
|
"""
|
||||||
|
old_password = serializers.CharField(required=True)
|
||||||
|
new_password = serializers.CharField(required=True)
|
||||||
@ -1,6 +1,6 @@
|
|||||||
from rest_framework import urlpatterns
|
from rest_framework import urlpatterns
|
||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
from .views import LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, Jpn_PerfViewSet, LocationsInPerf, SubInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI, UserActionViewset, UserMakeActionViewset, UserDestinations, UpdateOrder, LocationInBound, DeleteDestination, CustomAreaLocations, GetAllGifuAreas, CustomAreaNames, userDetials, UserTracksViewSet, CatByCity
|
from .views import LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, Jpn_PerfViewSet, LocationsInPerf, SubInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI, UserActionViewset, UserMakeActionViewset, UserDestinations, UpdateOrder, LocationInBound, DeleteDestination, CustomAreaLocations, GetAllGifuAreas, CustomAreaNames, userDetials, UserTracksViewSet, CatByCity, ChangePasswordView
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from knox import views as knox_views
|
from knox import views as knox_views
|
||||||
|
|
||||||
@ -40,5 +40,6 @@ urlpatterns += [
|
|||||||
path('updateorder/', UpdateOrder, name='updateorder'),
|
path('updateorder/', UpdateOrder, name='updateorder'),
|
||||||
path('delete_destination/', DeleteDestination, name='delete_detination'),
|
path('delete_destination/', DeleteDestination, name='delete_detination'),
|
||||||
path('customareanames/', CustomAreaNames, name='custom_area_name'),
|
path('customareanames/', CustomAreaNames, name='custom_area_name'),
|
||||||
path('userdetials/', userDetials, name='user_detials')
|
path('userdetials/', userDetials, name='user_detials'),
|
||||||
|
path('change-password/', ChangePasswordView.as_view(), name='change-password'),
|
||||||
]
|
]
|
||||||
73
rog/views.py
73
rog/views.py
@ -1,15 +1,17 @@
|
|||||||
|
from curses.ascii import NUL
|
||||||
from django.core.serializers import serialize
|
from django.core.serializers import serialize
|
||||||
from .models import Location, Location_line, Location_polygon, JpnAdminMainPerf, JpnAdminPerf, JpnSubPerf, Useractions, GifuAreas, RogUser, CustomUser, UserTracks
|
from .models import Location, Location_line, Location_polygon, JpnAdminMainPerf, JpnAdminPerf, JpnSubPerf, Useractions, GifuAreas, RogUser, CustomUser, UserTracks
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, JPN_perfSerializer, JPN_sub_perSerializer, LocationCatSerializer, CreateUserSerializer, UserSerializer, LoginUserSerializer, UseractionsSerializer, UserDestinationSerializer, GifuAreaSerializer, LocationEventNameSerializer, RogUserSerializer, UserTracksSerializer
|
from .serializers import LocationSerializer, Location_lineSerializer, Location_polygonSerializer, JPN_main_perfSerializer, JPN_perfSerializer, JPN_sub_perSerializer, LocationCatSerializer, CreateUserSerializer, UserSerializer, LoginUserSerializer, UseractionsSerializer, UserDestinationSerializer, GifuAreaSerializer, LocationEventNameSerializer, RogUserSerializer, UserTracksSerializer, ChangePasswordSerializer
|
||||||
from knox.models import AuthToken
|
from knox.models import AuthToken
|
||||||
|
|
||||||
from rest_framework import viewsets, permissions, generics
|
from rest_framework import viewsets, permissions, generics, status
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.parsers import JSONParser, MultiPartParser
|
from rest_framework.parsers import JSONParser, MultiPartParser
|
||||||
from .serializers import LocationSerializer
|
from .serializers import LocationSerializer
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
|
||||||
from .serializers import TestSerialiser
|
from .serializers import TestSerialiser
|
||||||
from .models import TestModel
|
from .models import TestModel
|
||||||
@ -66,9 +68,9 @@ def LocationsInPerf(request):
|
|||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, category=cat)
|
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, category=cat)
|
||||||
else:
|
else:
|
||||||
if grp:
|
if grp:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, category=cat, cp__gt=0, group__contains=grp)
|
locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat, group__contains=grp)
|
||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, category=cat)
|
locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat)
|
||||||
else:
|
else:
|
||||||
if is_rog:
|
if is_rog:
|
||||||
if grp:
|
if grp:
|
||||||
@ -77,9 +79,9 @@ def LocationsInPerf(request):
|
|||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom)
|
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom)
|
||||||
else:
|
else:
|
||||||
if grp:
|
if grp:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, group__contains=grp)
|
locs = Location.objects.filter(geom__within=perf_geom.geom, group__contains=grp)
|
||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom)
|
locs = Location.objects.filter(geom__within=perf_geom.geom)
|
||||||
|
|
||||||
serializer = LocationSerializer(locs, many=True)
|
serializer = LocationSerializer(locs, many=True)
|
||||||
return JsonResponse(serializer.data, safe=False)
|
return JsonResponse(serializer.data, safe=False)
|
||||||
@ -99,9 +101,9 @@ def LocationsInSubPerf(request):
|
|||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, category=cat)
|
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, category=cat)
|
||||||
else:
|
else:
|
||||||
if grp:
|
if grp:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, category=cat, group__contains=grp)
|
locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat, group__contains=grp)
|
||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom, category=cat)
|
locs = Location.objects.filter(geom__within=perf_geom.geom, category=cat)
|
||||||
else:
|
else:
|
||||||
if is_rog:
|
if is_rog:
|
||||||
if grp:
|
if grp:
|
||||||
@ -109,7 +111,7 @@ def LocationsInSubPerf(request):
|
|||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom)
|
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom)
|
||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=perf_geom.geom)
|
locs = Location.objects.filter(geom__within=perf_geom.geom)
|
||||||
serializer = LocationSerializer(locs, many=True)
|
serializer = LocationSerializer(locs, many=True)
|
||||||
return JsonResponse(serializer.data, safe=False)
|
return JsonResponse(serializer.data, safe=False)
|
||||||
|
|
||||||
@ -138,9 +140,9 @@ def LocationInBound(request):
|
|||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, category=cat, event_name__isnull=True)
|
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, category=cat, event_name__isnull=True)
|
||||||
else:
|
else:
|
||||||
if grp:
|
if grp:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, category=cat, event_name__isnull=True, cp=0, group__contains=grp)
|
locs = Location.objects.filter(geom__within=pl, category=cat, event_name__isnull=True, group__contains=grp)
|
||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, category=cat, event_name__isnull=True)
|
locs = Location.objects.filter(geom__within=pl, category=cat, event_name__isnull=True)
|
||||||
else:
|
else:
|
||||||
if is_rog:
|
if is_rog:
|
||||||
if grp:
|
if grp:
|
||||||
@ -149,9 +151,9 @@ def LocationInBound(request):
|
|||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, event_name__isnull=True)
|
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, event_name__isnull=True)
|
||||||
else:
|
else:
|
||||||
if grp:
|
if grp:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, event_name__isnull=True, group__contains=grp)
|
locs = Location.objects.filter(geom__within=pl, event_name__isnull=True, group__contains=grp)
|
||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, event_name__isnull=True)
|
locs = Location.objects.filter(geom__within=pl, event_name__isnull=True)
|
||||||
if len(locs) > 50:
|
if len(locs) > 50:
|
||||||
return JsonResponse({"too_many_points": True}, safe=False, status=500)
|
return JsonResponse({"too_many_points": True}, safe=False, status=500)
|
||||||
else:
|
else:
|
||||||
@ -236,7 +238,7 @@ def CatByCity(request):
|
|||||||
serializer = LocationCatSerializer(cats, many=True)
|
serializer = LocationCatSerializer(cats, many=True)
|
||||||
return JsonResponse(serializer.data, safe=False)
|
return JsonResponse(serializer.data, safe=False)
|
||||||
else:
|
else:
|
||||||
return null
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -392,9 +394,9 @@ def CustomAreaLocations(request):
|
|||||||
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, category=cat, event_name=name)
|
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, category=cat, event_name=name)
|
||||||
else:
|
else:
|
||||||
if grp:
|
if grp:
|
||||||
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, category=cat, event_name=name, group__contains=grp)
|
locs = Location.objects.filter(event_name__isnull=False, category=cat, event_name=name, group__contains=grp)
|
||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, category=cat, event_name=name)
|
locs = Location.objects.filter(event_name__isnull=False, category=cat, event_name=name)
|
||||||
else:
|
else:
|
||||||
if is_rog:
|
if is_rog:
|
||||||
if grp:
|
if grp:
|
||||||
@ -403,9 +405,9 @@ def CustomAreaLocations(request):
|
|||||||
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, event_name=name)
|
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, event_name=name)
|
||||||
else:
|
else:
|
||||||
if grp:
|
if grp:
|
||||||
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, event_name=name, group__contains=grp)
|
locs = Location.objects.filter(event_name__isnull=False, event_name=name, group__contains=grp)
|
||||||
else:
|
else:
|
||||||
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, event_name=name)
|
locs = Location.objects.filter(event_name__isnull=False, event_name=name)
|
||||||
|
|
||||||
serializer = LocationSerializer(locs, many=True)
|
serializer = LocationSerializer(locs, many=True)
|
||||||
return JsonResponse(serializer.data, safe=False)
|
return JsonResponse(serializer.data, safe=False)
|
||||||
@ -418,6 +420,41 @@ def CustomAreaNames(request):
|
|||||||
return JsonResponse(serializer.data, safe=False)
|
return JsonResponse(serializer.data, safe=False)
|
||||||
|
|
||||||
|
|
||||||
|
class ChangePasswordView(generics.UpdateAPIView):
|
||||||
|
"""
|
||||||
|
An endpoint for changing password.
|
||||||
|
"""
|
||||||
|
serializer_class = ChangePasswordSerializer
|
||||||
|
model = CustomUser
|
||||||
|
permission_classes = (IsAuthenticated,)
|
||||||
|
|
||||||
|
def get_object(self, queryset=None):
|
||||||
|
obj = self.request.user
|
||||||
|
return obj
|
||||||
|
|
||||||
|
def update(self, request, *args, **kwargs):
|
||||||
|
self.object = self.get_object()
|
||||||
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
|
||||||
|
if serializer.is_valid():
|
||||||
|
# Check old password
|
||||||
|
if not self.object.check_password(serializer.data.get("old_password")):
|
||||||
|
return Response({"old_password": ["Wrong password."]}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
# set_password also hashes the password that the user will get
|
||||||
|
self.object.set_password(serializer.data.get("new_password"))
|
||||||
|
self.object.save()
|
||||||
|
response = {
|
||||||
|
'status': 'success',
|
||||||
|
'code': status.HTTP_200_OK,
|
||||||
|
'message': 'Password updated successfully',
|
||||||
|
'data': []
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response(response)
|
||||||
|
|
||||||
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
|
||||||
class TestActionViewSet(viewsets.ModelViewSet):
|
class TestActionViewSet(viewsets.ModelViewSet):
|
||||||
serializer_class = TestSerialiser
|
serializer_class = TestSerialiser
|
||||||
queryset = TestModel.objects.all()
|
queryset = TestModel.objects.all()
|
||||||
|
|||||||
Reference in New Issue
Block a user