Feature: Add login api by reading json data

This commit is contained in:
winkidney
2019-11-29 16:13:40 +08:00
committed by Isaac Bythewood
parent d5a0260d51
commit 7956c93846
3 changed files with 41 additions and 5 deletions

View File

@@ -20,7 +20,7 @@ urlpatterns = [
# old api and views
url(r'^admin/', include(admin.site.urls)),
url(r'', include('core.urls', namespace='core')),
url(r'', include('users.urls', namespace='users')),
url(r'^api/v2/profile/', include('users.urls', namespace='users')),
]

View File

@@ -1,12 +1,11 @@
from django.conf.urls import url
from django.contrib.auth.views import login
from users.views import login_user
from . import views
urlpatterns = [
url(r'^private/$', views.private, name='private'),
url(r'^register/$', views.CreateUser.as_view(), name='register'),
url(r'^login/$', login,
{'template_name': 'users/login.html'}, name='login'),
url(r'^login/$', login_user, name='login'),
url(r'^logout/$', views.logout_user, name='logout'),
]

View File

@@ -1,14 +1,18 @@
import json
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.contrib.auth.models import Permission
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.http import HttpResponseRedirect, HttpResponseBadRequest, HttpResponse
from django.template.response import TemplateResponse
from django.utils.functional import lazy
from django.views.generic import CreateView
from rest_framework.renderers import JSONRenderer
from core.serializers import UserSerializer
from .forms import UserCreationForm
from users.models import User
@@ -39,6 +43,39 @@ class CreateUser(CreateView):
return redirect
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"
)
@login_required
def logout_user(request):
logout(request)