random checking of new api stuff
This commit is contained in:
parent
d77acd43cd
commit
f2944b1b75
12 changed files with 312 additions and 207 deletions
0
oxdb/oxuser/__init__.py
Normal file
0
oxdb/oxuser/__init__.py
Normal file
35
oxdb/oxuser/models.py
Normal file
35
oxdb/oxuser/models.py
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
class Group(models.Model):
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
modified = models.DateTimeField(auto_now=True)
|
||||
name = models.CharField(blank=True, max_length=255, unique=True)
|
||||
users = models.ManyToManyField(User, related_name='groups')
|
||||
|
||||
class Preference(models.Model):
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
modified = models.DateTimeField(auto_now=True)
|
||||
user = models.ForeignKey(User, related_name='preferences')
|
||||
key = models.CharField(blank=True, max_length=255)
|
||||
value = models.TextField(blank=True)
|
||||
|
||||
def getPreference(user, key, value=None):
|
||||
q = Preference.objects.filter(user=user, key=key)
|
||||
if q.count() > 0:
|
||||
value = json.loads(q[0].value)
|
||||
return value
|
||||
|
||||
def setPreference(user, key, value):
|
||||
value = json.dumps(value)
|
||||
q = Preference.objects.filter(user=user, key=key)
|
||||
if q.count() > 0:
|
||||
q[0].value = value
|
||||
else:
|
||||
p = Preference(user=user, key=key, value=value)
|
||||
p.save()
|
||||
|
||||
23
oxdb/oxuser/tests.py
Normal file
23
oxdb/oxuser/tests.py
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
"""
|
||||
This file demonstrates two different styles of tests (one doctest and one
|
||||
unittest). These will both pass when you run "manage.py test".
|
||||
|
||||
Replace these with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.failUnlessEqual(1 + 1, 2)
|
||||
|
||||
__test__ = {"doctest": """
|
||||
Another way to test that 1 + 1 is equal to 2.
|
||||
|
||||
>>> 1 + 1 == 2
|
||||
True
|
||||
"""}
|
||||
|
||||
14
oxdb/oxuser/urls.py
Normal file
14
oxdb/oxuser/urls.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
|
||||
from django.conf.urls.defaults import *
|
||||
|
||||
|
||||
urlpatterns = patterns("oxdb.oxuser.views",
|
||||
(r'^preferences', 'api_preferences'),
|
||||
(r'^login', 'api_login'),
|
||||
(r'^logout', 'api_logout'),
|
||||
(r'^register', 'api_register'),
|
||||
(r'^recover', 'api_recover'),
|
||||
)
|
||||
|
||||
112
oxdb/oxuser/views.py
Normal file
112
oxdb/oxuser/views.py
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
|
||||
from django.template import RequestContext
|
||||
from django.utils import simplejson as json
|
||||
|
||||
from oxdjango.shortcuts import render_to_json_response
|
||||
from oxdjango.decorators import login_required_json
|
||||
|
||||
import models
|
||||
|
||||
|
||||
def api_login(request):
|
||||
'''
|
||||
function: login
|
||||
data: {'username': username, 'password': password}
|
||||
|
||||
username/password to login
|
||||
'''
|
||||
response = {'status': 403, 'statusText': 'login failed'}
|
||||
data = json.loads(request.POST['data'])
|
||||
|
||||
from django.contrib.auth import authenticate, login
|
||||
user = authenticate(username=data['username'], password=data['password'])
|
||||
if user is not None:
|
||||
if user.is_active:
|
||||
user_json = {} #FIXME: preferences etc should be in here
|
||||
login(request, user)
|
||||
response = {'status': 200, 'message': 'You are logged in.', 'user': user_json}
|
||||
else:
|
||||
response = {'status': 403, 'statusText': 'Your account is disabled.'}
|
||||
print "Your account has been disabled!"
|
||||
else:
|
||||
response = {'status': 403, 'statusText': 'Your username and password were incorrect.'}
|
||||
return render_to_json_response(response)
|
||||
|
||||
def api_logout(request):
|
||||
'''
|
||||
function: logout
|
||||
'''
|
||||
response = {'status': 200, 'statusText': 'logged out'}
|
||||
if request.user.is_authenticated():
|
||||
request.user.logout()
|
||||
return render_to_json_response(response)
|
||||
|
||||
def api_register(request):
|
||||
'''
|
||||
function: register
|
||||
data: {'username': username, 'password': password, 'email': email}
|
||||
|
||||
username
|
||||
password
|
||||
email
|
||||
'''
|
||||
data = json.loads(request.POST['data'])
|
||||
response = {'status': 422, 'statusText': 'username exists'}
|
||||
return render_to_json_response(response)
|
||||
|
||||
def api_recover(request):
|
||||
data = json.loads(request.POST['data'])
|
||||
|
||||
username = data['username']
|
||||
user = None
|
||||
q = models.User.objects.filter(username=username)
|
||||
if q.count() > 0:
|
||||
user = q[0]
|
||||
else:
|
||||
q = models.User.objects.filter(email=username)
|
||||
if q.count() > 0:
|
||||
user = q[0]
|
||||
if user:
|
||||
#user.sendmail(...) #FIXME: send recovery mail
|
||||
response = {'status': 200, 'statusText': 'recover email sent.'}
|
||||
else:
|
||||
response = {'status': 404, 'statusText': 'user or email not found.'}
|
||||
return render_to_json_response(response)
|
||||
|
||||
@login_required_json
|
||||
def api_preferences(request):
|
||||
'''
|
||||
function: preferences
|
||||
|
||||
api('preferences')
|
||||
return all preferences
|
||||
api('preferences', 'key1')
|
||||
return preference key1
|
||||
api('preferences', [key1, key2])
|
||||
return preference key1, key2
|
||||
api('preferences', {key: value})
|
||||
set preference key to value
|
||||
'''
|
||||
response = {'status': 200, 'statusText': 'ok'}
|
||||
if 'data' not in request.POST:
|
||||
response['preferences'] = request.user.preferences
|
||||
else:
|
||||
data = json.loads(request.POST['data'])
|
||||
if isinstance(data, basestring):
|
||||
response = {'status': 500, 'statusText': 'fixme: get preferences not implemented'}
|
||||
response['preferences'][data] = models.getPreference(user, data)
|
||||
elif isinstance(data, list):
|
||||
response = {'status': 500, 'statusText': 'fixme: get preferences not implemented'}
|
||||
response['preferences'] = {}
|
||||
for preference in data:
|
||||
response['preferences'][preference] = models.getPreference(user, preference)
|
||||
elif isinstance(data, dict):
|
||||
response = {'status': 500, 'statusText': 'fixme: set preferences not implemented'}
|
||||
for key in data:
|
||||
models.setPreference(user, key, data[key])
|
||||
return render_to_json_response(response)
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue