diff --git a/.gitignore b/.gitignore index 22e9eff5c71a741f4e44121457ae31fe010ea83b..3293b858901af0aaafbe7503917da5132ffbb9d8 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ static/ .mypy_cache/ #vscode .vscode/ +#intellij +.idea/ diff --git a/new_rest_api/urls.py b/new_rest_api/urls.py index ce0969864c20f786757312511eba5a5007beb7c6..54da0baff1b845861f60f4dce71932c242cb4760 100644 --- a/new_rest_api/urls.py +++ b/new_rest_api/urls.py @@ -7,10 +7,10 @@ from django.views.generic import TemplateView urlpatterns = [ - path('user-list/', new_rest_api.views.user_list,name='user-list'), - path('user-detail/<str:email>', new_rest_api.views.user_details,name='user-details'), - path('user-detail/?email=<str:email>', new_rest_api.views.user_details,name='user-details-get'), - path('register/', new_rest_api.views.register_user,name='create-user'), + path('user-list/', new_rest_api.views.user_list, name='user-list'), + path('user-detail/<str:email>', new_rest_api.views.user_details, name='user-details'), + path('user-detail/?email=<str:email>', new_rest_api.views.user_details, name='user-details-get'), + path('register/', new_rest_api.views.register_user, name='create-user'), path(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', new_rest_api.views.activate, name='activate'), ] diff --git a/new_rest_api/views.py b/new_rest_api/views.py index 00faac5913bee3dd9622008038a9aec1b012c34a..fe1cfd90547bd125009351c32d50b5e7663794f8 100644 --- a/new_rest_api/views.py +++ b/new_rest_api/views.py @@ -1,7 +1,7 @@ from http import HTTPStatus as status from django.contrib.auth.models import User -from django.http import JsonResponse +from django.http import JsonResponse, QueryDict from django.views.decorators.csrf import csrf_exempt from allauth.socialaccount.providers.oauth2.client import OAuth2Client @@ -9,12 +9,15 @@ from allauth.socialaccount.providers.oauth2.client import OAuth2Client from rest_auth.registration.serializers import SocialLoginSerializer from rest_auth.registration.views import SocialLoginView from rest_framework import viewsets +from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.decorators import api_view, permission_classes, authentication_classes +from rest_framework.utils.serializer_helpers import ReturnDict from registrasi.models import BisaGoUser +from registrasi.serializers import BisaGoUserSerializers from django.db.utils import IntegrityError from django.contrib.sites.models import Site @@ -23,6 +26,7 @@ from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode from django.template.loader import render_to_string from .tokens import account_activation_token from django.core.mail import EmailMessage +from django.core.exceptions import ObjectDoesNotExist def request_error_message(request_kind): return "get {} request instead".format(request_kind) @@ -54,10 +58,12 @@ def user_details(request, email): if request.method == 'GET': user = User.objects.get(username=email) bisa_go_user = BisaGoUser.objects.get(user=user) + serializer = BisaGoUserSerializers(bisa_go_user) json_return = {"username":user.email, "name": user.last_name, "email": user.email, "phone_number": bisa_go_user.phone_number} + json_return.update(serializer.data) return JsonResponse(json_return, safe=False, status=status.OK) @@ -68,12 +74,13 @@ def register_user(request): try: if request.method == 'POST': name = request.POST['name'] - phone_number = request.POST['phone_number'] email = request.POST['email'] password = request.POST['password'] + data = dict(list(request.POST.dict().items())[3:]) user = User.objects.create_user(username=email, email=email, password=password, last_name=name) user.is_active = False user.save() + data['user'] = user.pk mail_subject = "Activate your account" message = render_to_string('acc_active_email.html', { 'user' : user, @@ -83,8 +90,15 @@ def register_user(request): }) mail = EmailMessage(mail_subject, message, to=[email]) mail.send() - BisaGoUser.objects.create(user=user, phone_number=phone_number) - return JsonResponse({'response' : 'User created', 'email':email, 'name':name}, status = status.CREATED) + data_query_dict = QueryDict('', mutable=True) + data_query_dict.update(data) + print(data_query_dict) + serializer = BisaGoUserSerializers(data=data_query_dict) + if serializer.is_valid(): + serializer.save() + return JsonResponse({'response' : 'User created', 'email':email, 'name':name}, status = status.CREATED) + else: + return JsonResponse(serializer.errors, status=status.BAD_REQUEST) except KeyError as e: return JsonResponse({'response' : missing_key_message(str(e))}, status=status.INTERNAL_SERVER_ERROR) except IntegrityError as e: diff --git a/registrasi/migrations/0004_auto_20201020_1638.py b/registrasi/migrations/0004_auto_20201020_1638.py new file mode 100644 index 0000000000000000000000000000000000000000..77dae5591966cf3223d7198b08bcf3cf3c8310f1 --- /dev/null +++ b/registrasi/migrations/0004_auto_20201020_1638.py @@ -0,0 +1,38 @@ +# Generated by Django 2.1.5 on 2020-10-20 16:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('registrasi', '0003_merge_20201018_0607'), + ] + + operations = [ + migrations.AddField( + model_name='bisagouser', + name='alamat', + field=models.CharField(default='Undefined', max_length=255, verbose_name='Alamat'), + ), + migrations.AddField( + model_name='bisagouser', + name='disabilitas', + field=models.CharField(default='Tidak Memiliki Disabilitas', max_length=64, verbose_name='Disabilitas'), + ), + migrations.AddField( + model_name='bisagouser', + name='jenis_kelamin', + field=models.CharField(default='Undefined', max_length=20, verbose_name='Jenis Kelamin'), + ), + migrations.AddField( + model_name='bisagouser', + name='pekerjaan', + field=models.CharField(default='Undefined', max_length=64, verbose_name='Pekerjaan'), + ), + migrations.AddField( + model_name='bisagouser', + name='tanggal_lahir', + field=models.DateField(max_length=15, null=True, verbose_name='Tanggal Lahir'), + ), + ] diff --git a/registrasi/models.py b/registrasi/models.py index 23145ffdd1b3510514e6946403191b62f3472eaa..b6d5f16fdfad6da15e4f56853e90ef05ae1687b8 100644 --- a/registrasi/models.py +++ b/registrasi/models.py @@ -8,6 +8,10 @@ class BisaGoUser(models.Model): db_table = "BisaGoUser" user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="phone_number") phone_number = models.CharField('Nomor Telepon', max_length=15, unique=True) - + tanggal_lahir = models.DateField('Tanggal Lahir', max_length=15, null=True) + jenis_kelamin = models.CharField('Jenis Kelamin', max_length=20, default='Undefined') + disabilitas = models.CharField('Disabilitas', max_length=64, default='Tidak Memiliki Disabilitas') + pekerjaan = models.CharField('Pekerjaan', max_length=64, default='Undefined') + alamat = models.CharField('Alamat', max_length=255, default='Undefined') def __str__(self): return self.user.username diff --git a/registrasi/serializers.py b/registrasi/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..bfa70ccf27f047487cae41802c941289b2f6b3e8 --- /dev/null +++ b/registrasi/serializers.py @@ -0,0 +1,16 @@ +from rest_framework import serializers +from django.db import models +from .models import BisaGoUser + +class BisaGoUserSerializers(serializers.ModelSerializer): + class Meta: + model = BisaGoUser + fields = ( + 'user', + 'phone_number', + 'tanggal_lahir', + 'jenis_kelamin', + 'disabilitas', + 'pekerjaan', + 'alamat' + ) \ No newline at end of file