return form errors, use site.json user.ui for logged in users for now

This commit is contained in:
j 2010-12-24 14:53:34 +05:30
commit 31cf62c752
4 changed files with 196 additions and 75 deletions

View file

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
import os
from datetime import datetime
from django.contrib.auth.models import User
@ -15,6 +16,7 @@ class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
files_updated = models.DateTimeField(default=datetime.now)
newsletter = models.BooleanField(default=True)
def user_post_save(sender, instance, **kwargs):
profile, new = UserProfile.objects.get_or_create(user=instance)
@ -42,6 +44,10 @@ def get_user_json(user):
return json
def get_ui(user):
with open(os.path.join(settings.PROJECT_ROOT, 'templates', 'site.json')) as f:
site = json.load(f)
return site['user']['ui']
'''
return {
"columns": ["id", "title", "director", "country", "year", "language", "genre"],
"findQuery": {"conditions": [], "operator": ""},
@ -59,6 +65,7 @@ def get_ui(user):
"sort": settings.DEFAULT_SORT,
"theme": settings.DEFAULT_THEME
}
'''
def get_preferences(user):
prefs = {}

View file

@ -19,8 +19,6 @@ import models
from api.actions import actions
def json_errors(form):
return {'status': {'code': 402, 'text': 'form error', 'data': form.errors}}
class LoginForm(forms.Form):
username = forms.TextInput()
@ -28,41 +26,67 @@ class LoginForm(forms.Form):
def api_login(request):
'''
param data
{'username': username, 'password': password}
param data {
username: 'username',
password: 'password'
}
return {'status': {'code': int, 'text': string}}
return {
status: {'code': int, 'text': string}
data: {
errors: {
username: 'Unknown User',
password: 'Incorrect Password'
}
user: {
...
}
}
}
'''
response = json_response(status=403, text='login failed')
data = json.loads(request.POST['data'])
form = LoginForm(data, request.FILES)
if form.is_valid():
user = authenticate(username=data['username'], password=data['password'])
if user is not None:
if user.is_active:
login(request, user)
user_json = models.get_user_json(user)
response = json_response({'user': user_json},
text='You are logged in.')
else:
response = json_response(status=401,
text='Your account is disabled.')
if models.User.objects.filter(username=form.data['username']).count() == 0:
response = json_response({
'errors': {
'username': 'Unknown User'
}
})
else:
errors = json_errors(form)
response = json_response(errors,
status=401, text='Your username and password were incorrect.')
user = authenticate(username=data['username'], password=data['password'])
if user is not None:
if user.is_active:
login(request, user)
user_json = models.get_user_json(user)
response = json_response({
'user': user_json
})
else:
response = json_response({
'errors': {
'username': 'User Disabled'
}
})
else:
response = json_response({
'errors': {
'password': 'Incorrect Password'
}
})
else:
response = json_response(status=400, text='invalid data')
return render_to_json_response(response)
actions.register(api_login, 'login')
def api_logout(request):
'''
param data
{}
param data {
}
return {'status': {'code': int, 'text': string}}
return {
status: {'code': int, 'text': string}
}
'''
response = json_response(text='logged out')
if request.user.is_authenticated():
@ -77,18 +101,40 @@ class RegisterForm(forms.Form):
def register(request):
'''
param data
{'username': username, 'password': password, 'email': email}
param data {
username: 'username',
password: 'password',
email: 'emailaddress'
}
return {'status': {'code': int, 'text': string}}
return {
status: {'code': int, 'text': string}
data: {
errors: {
username: 'Unknown User',
password: 'Incorrect Password'
}
user: {
...
}
}
}
'''
data = json.loads(request.POST['data'])
form = RegisterForm(data, request.FILES)
if form.is_valid():
if models.User.objects.filter(username=form.data['username']).count() > 0:
response = json_response(status=400, text='username or email exists')
response = json_response({
'errors': {
'username': 'Username taken'
}
})
elif models.User.objects.filter(email=form.data['email']).count() > 0:
response = json_response(status=400, text='username or email exists')
response = json_response({
'errors': {
'email': 'Email is used by another account'
}
})
else:
first_user = models.User.objects.count() == 0
user = models.User(username=form.data['username'], email=form.data['email'])
@ -100,9 +146,12 @@ def register(request):
user = authenticate(username=form.data['username'],
password=form.data['password'])
login(request, user)
response = json_response(text='account created')
user_json = models.get_user_json(user)
response = json_response({
'user': user_json
}, text='account created')
else:
response = json_response(status=400, text='username exists')
response = json_response(status=400, text='invalid data')
return render_to_json_response(response)
actions.register(register)
@ -111,10 +160,18 @@ class RecoverForm(forms.Form):
def api_recover(request):
'''
param data
{'username_or_email': username}
param data {
username_or_email: username
}
return {'status': {'code': int, 'text': string}}
return {
status: {'code': int, 'text': string}
data: {
errors: {
username_or_email: 'Username or email not found'
}
}
}
'''
data = json.loads(request.POST['data'])
form = RegisterForm(data, request.FILES)
@ -144,7 +201,11 @@ def api_recover(request):
user.email_user(subject, message)
response = json_response(text='recover email sent')
else:
response = json_response(status=404, text='username or email not found')
response = json_response({
'errors': {
'username_or_email': 'Username or email not found'
}
})
else:
response = json_response(status=400, text='invalid data')
return render_to_json_response(response)
@ -152,8 +213,10 @@ actions.register(api_recover, 'recover')
def findUser(request):
'''
param data
{key: "username", value: "foo", operator: "="}
param data {
key: "username",
value: "foo", operator: "="
}
return {
'status': {'code': int, 'text': string}
@ -195,10 +258,14 @@ class ContactForm(forms.Form):
def contact(request):
'''
param data
{'email': string, 'message': string}
param data {
'email': string,
'message': string
}
return {'status': {'code': int, 'text': string}}
return {
'status': {'code': int, 'text': string}
}
'''
data = json.loads(request.POST['data'])
form = ContactForm(data, request.FILES)