Restoring old login views
parent
79d97cfaad
commit
e6011ae777
|
@ -1,4 +1,19 @@
|
|||
from rest_framework import renderers
|
||||
# -*- 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.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
|
||||
|
||||
from rest_framework.decorators import api_view
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.reverse import reverse
|
||||
|
@ -21,3 +36,62 @@ def api_root(request, format=None):
|
|||
'issue-types': reverse('issue-type-list', request=request, format=format),
|
||||
'points': reverse('points-list', request=request, format=format),
|
||||
})
|
||||
|
||||
|
||||
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):
|
||||
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 http.HttpResponse(to_json({'token': request.session.session_key}))
|
||||
except User.DoesNotExist:
|
||||
pass
|
||||
|
||||
return http.HttpResponseBadRequest()
|
||||
|
||||
@method_decorator(csrf_exempt)
|
||||
def dispatch(self, *args, **kwargs):
|
||||
return super(Login, self).dispatch(*args, **kwargs)
|
||||
|
||||
|
||||
class Logout(View):
|
||||
def post(self, request):
|
||||
logout(request)
|
||||
return http.HttpResponse()
|
||||
|
||||
@method_decorator(csrf_exempt)
|
||||
def dispatch(self, *args, **kwargs):
|
||||
return super(Login, self).dispatch(*args, **kwargs)
|
||||
|
|
|
@ -318,4 +318,10 @@ HAYSTACK_CONNECTIONS = {
|
|||
HAYSTACK_DEFAULT_OPERATOR = 'AND'
|
||||
|
||||
|
||||
REST_FRAMEWORK = {
|
||||
'DEFAULT_AUTHENTICATION_CLASSES': (
|
||||
'rest_framework.authentication.SessionAuthentication',
|
||||
)
|
||||
}
|
||||
|
||||
from .appdefaults import *
|
||||
|
|
|
@ -3,9 +3,11 @@ from django.conf.urls import patterns, include, url
|
|||
from django.contrib import admin
|
||||
admin.autodiscover()
|
||||
|
||||
from greenmine.base.views import Login, Logout
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^api/auth/', include('rest_framework.urls',
|
||||
namespace='rest_framework')),
|
||||
url(r'^api/auth/login/$', Login.as_view(), namespace='api-login')),
|
||||
url(r'^api/auth/logout/$', Logout.as_view(), namespace='api-logout')),
|
||||
url(r'^api/$', 'greenmine.base.views.api_root'),
|
||||
url(r'^api/scrum/', include('greenmine.scrum.urls')),
|
||||
url(r'^admin/', include(admin.site.urls)),
|
||||
|
|
Loading…
Reference in New Issue