Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
ce3ccb91
Commit
ce3ccb91
authored
Nov 12, 2012
by
Rob Romano
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updates to login view for TokenAuthentication from feedback from Tom
parent
bd92db3c
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
19 additions
and
43 deletions
+19
-43
rest_framework/authtoken/serializers.py
+1
-14
rest_framework/authtoken/urls.py
+2
-3
rest_framework/authtoken/views.py
+14
-11
rest_framework/tests/authentication.py
+2
-15
No files found.
rest_framework/authtoken/serializers.py
View file @
ce3ccb91
from
django.contrib.auth
import
authenticate
from
rest_framework
import
serializers
from
rest_framework.authtoken.models
import
Token
class
AuthTokenSerializer
(
serializers
.
Serializer
):
token
=
serializers
.
Field
(
source
=
"key"
)
username
=
serializers
.
CharField
(
max_length
=
30
)
username
=
serializers
.
CharField
()
password
=
serializers
.
CharField
()
def
validate
(
self
,
attrs
):
...
...
@@ -26,12 +22,3 @@ class AuthTokenSerializer(serializers.Serializer):
else
:
raise
serializers
.
ValidationError
(
'Must include "username" and "password"'
)
def
convert_object
(
self
,
obj
):
ret
=
self
.
_dict_class
()
ret
[
'token'
]
=
obj
.
key
ret
[
'user'
]
=
obj
.
user
.
id
return
ret
def
restore_object
(
self
,
attrs
,
instance
=
None
):
token
,
created
=
Token
.
objects
.
get_or_create
(
user
=
attrs
[
'user'
])
return
token
rest_framework/authtoken/urls.py
View file @
ce3ccb91
...
...
@@ -13,9 +13,8 @@ your authentication settings include `TokenAuthentication`.
)
"""
from
django.conf.urls.defaults
import
patterns
,
url
from
rest_framework.authtoken.views
import
AuthToken
LoginView
,
AuthTokenLogout
View
from
rest_framework.authtoken.views
import
AuthTokenView
urlpatterns
=
patterns
(
'rest_framework.authtoken.views'
,
url
(
r'^login/$'
,
AuthTokenLoginView
.
as_view
(),
name
=
'token_login'
),
url
(
r'^logout/$'
,
AuthTokenLogoutView
.
as_view
(),
name
=
'token_logout'
),
url
(
r'^login/$'
,
AuthTokenView
.
as_view
(),
name
=
'token_login'
),
)
rest_framework/authtoken/views.py
View file @
ce3ccb91
from
rest_framework.views
import
APIView
from
rest_framework.generics
import
CreateAPIView
from
rest_framework
import
status
from
rest_framework
import
parsers
from
rest_framework
import
renderers
from
rest_framework.response
import
Response
from
rest_framework.authtoken.models
import
Token
from
rest_framework.authtoken.serializers
import
AuthTokenSerializer
from
django.http
import
HttpResponse
class
AuthTokenLoginView
(
CreateAPIView
):
class
AuthTokenView
(
APIView
):
throttle_classes
=
()
permission_classes
=
()
parser_classes
=
(
parsers
.
FormParser
,
parsers
.
MultiPartParser
,
parsers
.
JSONParser
,)
renderer_classes
=
(
renderers
.
JSONRenderer
,)
model
=
Token
serializer_class
=
AuthTokenSerializer
class
AuthTokenLogoutView
(
APIView
):
def
post
(
self
,
request
):
if
request
.
user
.
is_authenticated
()
and
request
.
auth
:
request
.
auth
.
delete
()
return
HttpResponse
(
"logged out"
)
else
:
return
HttpResponse
(
"not logged in"
)
serializer
=
AuthTokenSerializer
(
data
=
request
.
DATA
)
if
serializer
.
is_valid
():
token
,
created
=
Token
.
objects
.
get_or_create
(
user
=
serializer
.
object
[
'user'
]
)
return
Response
({
'token'
:
token
.
key
})
return
Response
(
serializer
.
errors
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
rest_framework/tests/authentication.py
View file @
ce3ccb91
...
...
@@ -159,7 +159,7 @@ class TokenAuthTests(TestCase):
client
=
Client
(
enforce_csrf_checks
=
True
)
response
=
client
.
post
(
'/auth-token/login/'
,
json
.
dumps
({
'username'
:
self
.
username
,
'password'
:
self
.
password
}),
'application/json'
)
self
.
assertEqual
(
response
.
status_code
,
20
1
)
self
.
assertEqual
(
response
.
status_code
,
20
0
)
self
.
assertEqual
(
json
.
loads
(
response
.
content
)[
'token'
],
self
.
key
)
def
test_token_login_json_bad_creds
(
self
):
...
...
@@ -181,18 +181,5 @@ class TokenAuthTests(TestCase):
client
=
Client
(
enforce_csrf_checks
=
True
)
response
=
client
.
post
(
'/auth-token/login/'
,
{
'username'
:
self
.
username
,
'password'
:
self
.
password
})
self
.
assertEqual
(
response
.
status_code
,
201
)
self
.
assertEqual
(
json
.
loads
(
response
.
content
)[
'token'
],
self
.
key
)
def
test_token_logout
(
self
):
"""Ensure token logout view using JSON POST works."""
# Use different User and Token as to isolate this test's effects on other unittests in class
username
=
"ringo"
user
=
User
.
objects
.
create_user
(
username
,
"starr@thebeatles.com"
,
"pass"
)
token
=
Token
.
objects
.
create
(
user
=
user
)
auth
=
"Token "
+
token
.
key
client
=
Client
(
enforce_csrf_checks
=
True
)
response
=
client
.
post
(
'/auth-token/logout/'
,
HTTP_AUTHORIZATION
=
auth
)
self
.
assertEqual
(
response
.
status_code
,
200
)
# Ensure token no longer exists
self
.
assertRaises
(
Token
.
DoesNotExist
,
lambda
token
:
Token
.
objects
.
get
(
key
=
token
.
key
),
token
)
self
.
assertEqual
(
json
.
loads
(
response
.
content
)[
'token'
],
self
.
key
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment