2019-11-29 16:13:40 +08:00
|
|
|
import json
|
|
|
|
|
|
2013-03-03 04:47:34 -08:00
|
|
|
from django.conf import settings
|
|
|
|
|
from django.contrib import messages
|
|
|
|
|
from django.contrib.auth import authenticate, login, logout
|
|
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
|
from django.core.urlresolvers import reverse
|
2019-11-29 16:13:40 +08:00
|
|
|
from django.http import HttpResponseRedirect, HttpResponseBadRequest, HttpResponse
|
2013-03-03 04:47:34 -08:00
|
|
|
from django.utils.functional import lazy
|
2019-12-03 13:22:18 +08:00
|
|
|
from rest_framework import mixins, routers
|
|
|
|
|
from rest_framework.permissions import BasePermission
|
2019-11-29 16:13:40 +08:00
|
|
|
from rest_framework.renderers import JSONRenderer
|
2019-12-03 13:22:18 +08:00
|
|
|
from rest_framework.viewsets import GenericViewSet
|
2013-03-03 04:47:34 -08:00
|
|
|
|
2019-11-29 16:13:40 +08:00
|
|
|
from core.serializers import UserSerializer
|
2018-02-08 21:57:49 -05:00
|
|
|
from users.models import User
|
2013-03-03 04:47:34 -08:00
|
|
|
|
|
|
|
|
|
2019-02-22 17:40:02 +08:00
|
|
|
def reverse_lazy(name=None, *args):
|
|
|
|
|
return lazy(reverse, str)(name, args=args)
|
2013-03-03 04:47:34 -08:00
|
|
|
|
|
|
|
|
|
2019-12-03 13:22:18 +08:00
|
|
|
class UserViewSet(
|
|
|
|
|
mixins.RetrieveModelMixin,
|
|
|
|
|
mixins.ListModelMixin,
|
|
|
|
|
mixins.CreateModelMixin,
|
|
|
|
|
GenericViewSet,
|
|
|
|
|
):
|
|
|
|
|
class Permission(BasePermission):
|
|
|
|
|
def has_permission(self, request, view):
|
|
|
|
|
if not request.method == "POST":
|
|
|
|
|
return True
|
|
|
|
|
return settings.ALLOW_NEW_REGISTRATIONS
|
2013-03-03 04:47:34 -08:00
|
|
|
|
2019-12-03 13:22:18 +08:00
|
|
|
def has_object_permission(self, request, view, obj):
|
|
|
|
|
return request.user == obj
|
2013-03-03 04:47:34 -08:00
|
|
|
|
2019-12-03 13:22:18 +08:00
|
|
|
permission_classes = [Permission, ]
|
|
|
|
|
serializer_class = UserSerializer
|
|
|
|
|
pagination_class = None
|
|
|
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
|
if self.request.user.is_anonymous:
|
|
|
|
|
return User.objects.none()
|
|
|
|
|
return User.objects.filter(id=self.request.user.id)
|
2013-03-03 04:47:34 -08:00
|
|
|
|
|
|
|
|
|
2019-11-29 16:13:40 +08:00
|
|
|
def login_user(request):
|
|
|
|
|
try:
|
|
|
|
|
data = json.loads(request.body)
|
|
|
|
|
except json.JSONDecodeError:
|
|
|
|
|
return HttpResponseBadRequest()
|
|
|
|
|
if 'username' not in data:
|
|
|
|
|
return HttpResponseBadRequest(
|
|
|
|
|
json.dumps({"username": "this field is required"})
|
|
|
|
|
)
|
|
|
|
|
if 'password' not in data:
|
|
|
|
|
return HttpResponseBadRequest(
|
|
|
|
|
json.dumps({"password": "this field is required"})
|
|
|
|
|
)
|
|
|
|
|
user = authenticate(
|
|
|
|
|
request,
|
|
|
|
|
username=data['username'],
|
|
|
|
|
password=data['password']
|
|
|
|
|
)
|
|
|
|
|
if not user:
|
|
|
|
|
return HttpResponseBadRequest(
|
|
|
|
|
json.dumps({"password": "username and password doesn't match"})
|
|
|
|
|
)
|
|
|
|
|
login(request, user)
|
|
|
|
|
data = UserSerializer(
|
|
|
|
|
user,
|
|
|
|
|
context={'request': request},
|
|
|
|
|
).data
|
|
|
|
|
return HttpResponse(
|
|
|
|
|
JSONRenderer().render(data),
|
|
|
|
|
content_type="application/json"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2013-03-03 04:47:34 -08:00
|
|
|
@login_required
|
|
|
|
|
def logout_user(request):
|
|
|
|
|
logout(request)
|
|
|
|
|
messages.success(request, 'You have successfully logged out.')
|
2019-12-08 00:58:02 +08:00
|
|
|
return HttpResponseRedirect('/')
|
2013-03-03 22:47:25 +00:00
|
|
|
|
|
|
|
|
|
2019-12-03 13:22:18 +08:00
|
|
|
drf_router = routers.DefaultRouter()
|
2020-05-17 12:43:13 +08:00
|
|
|
drf_router.register(r'users', UserViewSet, basename="user")
|