Make login view accept json instead of form encoded data.

remotes/origin/enhancement/email-actions
Andrey Antukh 2013-03-26 00:17:55 +01:00
parent 67ac0dd001
commit 2c67e002ff
2 changed files with 48 additions and 17 deletions

View File

@ -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.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.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):
def post(self, request):
username = request.POST.get('username', None)
password = request.POST.get('password', None)
print username
print password
data = request_json_to_dict(request)
username = data.get('username', None)
password = data.get('password', None)
try:
user = User.objects.get(username=username)
if user.check_password(password):
user = authenticate(username=username, password=password)
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:
pass
return HttpResponse(json.dumps({'error': True}))
return http.HttpResponseBadRequest()
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):

View File

@ -3,15 +3,14 @@ from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
from base.api_actions import Login, Logout
from tastypie.api import Api
from scrum.api import *
from questions.api import *
from documents.api import *
from profile.api import *
from wiki.api import *
from .base.api_actions import Login, Logout
from .scrum.api import *
from .questions.api import *
from .documents.api import *
from .profile.api import *
from .wiki.api import *
v1_api = Api(api_name='gm')
v1_api.register(ProjectResource())