- Author:
- limodou
- Posted:
- February 25, 2007
- Language:
- Python
- Version:
- Pre .96
- Score:
- 2 (after 2 ratings)
Can be used for create a json format response data. Just like:
{response:'ok', next:'nexturl', message:'response message', data:'returned data'}
for success.
{response:'fail', next:'nexturl', message:'response message', error:'error messages'}
for failure.
And there are some dump function:
json - dump a python variable into json format string
json_response - dump a python variable into json format string, and then use it create a HttpResponse object.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | from django.http import HttpResponse
from django.utils import simplejson
from django.conf import settings
class SimpleAjaxException(Exception):pass
def ajax_ok_data(data='', next=None, message=None):
return ajax_data('ok', data=data, next=next, message=message)
def ajax_fail_data(error='', next=None, message=None):
return ajax_data('fail', error=error, next=next, message=message)
def ajax_ok(data='', next=None, message=None):
"""
return a success response
"""
return json_response(ajax_ok_data(data, next, message))
def ajax_fail(error='', next=None, message=None):
"""
return an error response
"""
return json_response(ajax_fail_data(error, next, message))
def json(data, check=False):
encode = settings.DEFAULT_CHARSET
if check:
if not is_ajax_data(data):
raise SimpleAjaxException, 'Return data should be follow the Simple Ajax Data Format'
return simplejson.dumps(uni_str(data, encode))
def json_response(data, check=False):
encode = settings.DEFAULT_CHARSET
if check:
if not is_ajax_data(data):
raise SimpleAjaxException, 'Return data should be follow the Simple Ajax Data Format'
return HttpResponse(simplejson.dumps(uni_str(data, encode)))
def ajax_data(response_code, data=None, error=None, next=None, message=None):
"""if the response_code is true, then the data is set in 'data',
if the response_code is false, then the data is set in 'error'
"""
r = dict(response='ok', data='', error='', next='', message='')
if response_code is True or response_code.lower() in ('ok', 'yes', 'true'):
r['response'] = 'ok'
else:
r['response'] = 'fail'
if data:
r['data'] = data
if error:
r['error'] = error
if next:
r['next'] = next
if message:
r['message'] = message
return r
def is_ajax_data(data):
"""Judge if a data is an Ajax data"""
if not isinstance(data, dict): return False
for k in data.keys():
if not k in ('response', 'data', 'error', 'next', 'message'): return False
if not data.has_key('response'): return False
if not data['response'] in ('ok', 'fail'): return False
return True
def uni_str(a, encoding=None):
if not encoding:
encoding = settings.DEFAULT_CHARSET
if isinstance(a, (list, tuple)):
s = []
for i, k in enumerate(a):
s.append(uni_str(k, encoding))
return s
elif isinstance(a, dict):
s = {}
for i, k in enumerate(a.items()):
key, value = k
s[uni_str(key, encoding)] = uni_str(value, encoding)
return s
elif isinstance(a, unicode):
return a
elif isinstance(a, (int, float)):
return a
elif isinstance(a, str) or (hasattr(a, '__str__') and callable(getattr(a, '__str__'))):
if getattr(a, '__str__'):
a = str(a)
return unicode(a, encoding)
else:
return a
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 7 months ago
Comments
title typo:<br/> < ajax protocal for data<br/>
#
thanks
#
Please login first before commenting.