Procházet zdrojové kódy

add support accessToken

MrOzOn před 5 roky
rodič
revize
2a13b8c7cb

+ 4 - 1
README.md

@@ -22,4 +22,7 @@ Current actions
 `mkdir ./apps`
 2. Add new app for projects
 `mkdir ./apps/user`
-`django-admin startapp user ./apps/user`
+`django-admin startapp user ./apps/user`
+3. Create migration
+`python manage.py makemigrations`
+`python manage.py migrate`

+ 15 - 1
apps/user/serializers.py

@@ -1,11 +1,25 @@
+from django.contrib.auth import get_user_model
 from django.contrib.auth.models import User
 from rest_framework import serializers
 
+UserModel = get_user_model()
+
 
 class UserSerializer(serializers.HyperlinkedModelSerializer):
+    password = serializers.CharField(write_only=True)
+
+    def create(self, validated_data):
+        user = UserModel.objects.create(
+            username=validated_data['username']
+        )
+        user.set_password(validated_data['password'])
+        user.save()
+
+        return user
+
     class Meta:
         model = User
-        fields = ['url', 'username', 'email', 'groups']
+        fields = ['url', 'username', 'email', 'groups', 'password']
 
 
 class CurrentUserSerializer(serializers.ModelSerializer):

+ 12 - 2
apps/user/views.py

@@ -1,5 +1,7 @@
+from django.contrib.auth import get_user_model
 from django.contrib.auth.models import User
-from rest_framework import viewsets
+from rest_framework import viewsets, permissions
+from rest_framework.generics import CreateAPIView
 from rest_framework.response import Response
 from rest_framework.views import APIView
 
@@ -14,6 +16,14 @@ class UserViewSet(viewsets.ModelViewSet):
     serializer_class = UserSerializer
 
 
+class CreateUserView(CreateAPIView):
+    model = get_user_model()
+    permission_classes = [
+        permissions.AllowAny  # Or anon users can't register
+    ]
+    serializer_class = UserSerializer
+
+
 class CurrentUserView(APIView):
     """
     """
@@ -25,4 +35,4 @@ class CurrentUserView(APIView):
         }
         serializer = CurrentUserSerializer(user, context=serializer_context)
         # return Response({"user": serializers.serialize('json', [ user, ])})
-        return Response(serializer.data)
+        return Response(serializer.data)

+ 5 - 4
healthdiarybackend/settings.py

@@ -42,6 +42,7 @@ INSTALLED_APPS = [
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'rest_framework',
+    'rest_framework.authtoken',
 ]
 
 MIDDLEWARE = [
@@ -108,7 +109,7 @@ AUTH_PASSWORD_VALIDATORS = [
 # Internationalization
 # https://docs.djangoproject.com/en/3.0/topics/i18n/
 
-LANGUAGE_CODE = 'ru'
+LANGUAGE_CODE = 'en'
 
 TIME_ZONE = 'Europe/Moscow'
 
@@ -119,9 +120,9 @@ USE_L10N = True
 USE_TZ = True
 
 # Languages we provide translations for, out of the box.
-LANGUAGES = [
-    ('ru', gettext_noop('Russian')),
-    ]
+# LANGUAGES = [
+#     ('ru', gettext_noop('Russian')),
+#     ]
 
 # Static files (CSS, JavaScript, Images)
 # https://docs.djangoproject.com/en/3.0/howto/static-files/

+ 1 - 0
healthdiarybackend/urls.py

@@ -30,5 +30,6 @@ urlpatterns = [
     path('admin/', admin.site.urls),
     url(r'^api-token-auth/', authtoken_views.obtain_auth_token),
 
+    url('^register/', user_views.CreateUserView.as_view(), name='register-user'),
     url('^who-am-i/', user_views.CurrentUserView.as_view(), name='who-am-i'),
 ]