add more files

This commit is contained in:
j 2009-10-09 15:58:38 +02:00
commit ac65635b69
10 changed files with 521 additions and 1 deletions

View file

23
user_management/models.py Normal file
View file

@ -0,0 +1,23 @@
# -*- 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 Profile(models.Model):
user = models.ForeignKey(User, unique=True)
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)

23
user_management/tests.py Normal file
View 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
user_management/urls.py Normal file
View 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.user_management.views",
(r'^preferences', 'preferences'),
(r'^login', 'login'),
(r'^logout', 'logout'),
(r'^register', 'register'),
(r'^recover', 'recover'),
)

91
user_management/views.py Normal file
View file

@ -0,0 +1,91 @@
# -*- 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 oxdb.utils.shortcuts import render_to_json_response
from oxdb.utils.decorators import login_required_json
import models
def login(request):
from django.contrib.auth import authenticate, login
response = {'status': 403, 'message': 'login required'}
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=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, 'message': 'Your account is disabled.'}
print "Your account has been disabled!"
else:
response = {'status': 403, 'message': 'Your username and password were incorrect.'}
return render_to_json_response(response)
def logout(request):
response = {'status': 200}
if request.user.is_authenticated():
request.user.logout()
return render_to_json_response(response)
def register(request):
response = {'status': 500, 'message': 'registration failed'}
return render_to_json_response(response)
def recover(request):
username = request.POST.get('username', None)
user = None
q = User.objects.filter(username=username)
if q.count() > 0:
user = q[0]
else:
q = User.objects.filter(email=email)
if q.count() > 0:
user = q[0]
if user:
user.sendmail(...) #FIXME: send recovery mail
response = {'status': 200, 'message': 'recovert email sent.'}
else:
response = {'status': 500, 'message': 'user or email not found.'}
return render_to_json_response(response)
'''
GET preferences/ //get all keys
GET preferences/?key= //get key
GEt preferences/?key=&value= //set key
'''
@login_required_json
def preferences(request):
response = {'status': 200}
key = request.GET.get('key', None)
value = request.GET.get('value', None)
user = request.user
if not key: # return all preferences for current user
for p in models.Preference.objects.filter(user=user):
response['preferences'][p.key] = p.value
response['preferences']['email'] = user.email
elif value == None: #return one preference
p, created = models.Preference.objects.get_or_create(user=user, key=key)
response['preferences'][key] = p.value
else: # set preference
response['message'] = '%s saved.' % key
if key == 'password':
user.set_password(value)
user.save()
elsif key == 'email':
user.email = vaule
user.save()
else:
p, created = models.Preference.objects.get_or_create(user=user, key=key)
p.value = value
p.save()
return render_to_json_response(response)