Make login view accept json instead of form encoded data.
parent
67ac0dd001
commit
2c67e002ff
|
@ -1,31 +1,63 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
|
||||||
|
from django.core.serializers.json import DjangoJSONEncoder
|
||||||
from django.views.generic.base import View
|
from django.views.generic.base import View
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.utils.decorators import method_decorator
|
|
||||||
from django.http import HttpResponse
|
|
||||||
|
|
||||||
from django.contrib.auth import logout, login, authenticate
|
from django.contrib.auth import logout, login, authenticate
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from django.utils.functional import Promise
|
||||||
|
from django.utils.encoding import force_text
|
||||||
|
from django.utils.decorators import method_decorator
|
||||||
|
from django.utils import timezone
|
||||||
|
from django import http
|
||||||
|
|
||||||
import json
|
|
||||||
|
class LazyEncoder(DjangoJSONEncoder):
|
||||||
|
"""
|
||||||
|
JSON encoder class for encode correctly traduction strings.
|
||||||
|
Is for ajax response encode.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def default(self, obj):
|
||||||
|
if isinstance(obj, Promise):
|
||||||
|
return force_text(obj)
|
||||||
|
elif isinstance(obj, datetime.datetime):
|
||||||
|
obj = timezone.localtime(obj)
|
||||||
|
return super(LazyEncoder, self).default(obj)
|
||||||
|
|
||||||
|
|
||||||
|
def request_json_to_dict(request):
|
||||||
|
try:
|
||||||
|
body = request.body.decode('utf-8')
|
||||||
|
return json.loads(body)
|
||||||
|
except Exception:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
def to_json(data):
|
||||||
|
return json.dumps(data)
|
||||||
|
|
||||||
|
|
||||||
class Login(View):
|
class Login(View):
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
username = request.POST.get('username', None)
|
data = request_json_to_dict(request)
|
||||||
password = request.POST.get('password', None)
|
|
||||||
print username
|
username = data.get('username', None)
|
||||||
print password
|
password = data.get('password', None)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(username=username)
|
user = User.objects.get(username=username)
|
||||||
if user.check_password(password):
|
if user.check_password(password):
|
||||||
user = authenticate(username=username, password=password)
|
user = authenticate(username=username, password=password)
|
||||||
login(request, user)
|
login(request, user)
|
||||||
return HttpResponse(json.dumps({'token': request.session.session_key, 'error': False}))
|
return http.HttpResponse(to_json({'token': request.session.session_key}))
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return HttpResponse(json.dumps({'error': True}))
|
return http.HttpResponseBadRequest()
|
||||||
|
|
||||||
@method_decorator(csrf_exempt)
|
@method_decorator(csrf_exempt)
|
||||||
def dispatch(self, *args, **kwargs):
|
def dispatch(self, *args, **kwargs):
|
||||||
|
|
|
@ -3,15 +3,14 @@ from django.conf.urls import patterns, include, url
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
||||||
from base.api_actions import Login, Logout
|
|
||||||
|
|
||||||
from tastypie.api import Api
|
from tastypie.api import Api
|
||||||
|
|
||||||
from scrum.api import *
|
from .base.api_actions import Login, Logout
|
||||||
from questions.api import *
|
from .scrum.api import *
|
||||||
from documents.api import *
|
from .questions.api import *
|
||||||
from profile.api import *
|
from .documents.api import *
|
||||||
from wiki.api import *
|
from .profile.api import *
|
||||||
|
from .wiki.api import *
|
||||||
|
|
||||||
v1_api = Api(api_name='gm')
|
v1_api = Api(api_name='gm')
|
||||||
v1_api.register(ProjectResource())
|
v1_api.register(ProjectResource())
|
||||||
|
|
Loading…
Reference in New Issue