1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import random
- import sys
- from operator import attrgetter
- from functools import partial
- from ujson import dumps as uj_dumps
- from django.http import HttpResponse
- from django.shortcuts import render
- from world.models import World, Fortune
- if sys.version_info[0] == 3:
- xrange = range
- def _get_queries(request):
- try:
- queries = int(request.GET.get('queries', 1))
- except Exception:
- queries = 1
- if queries < 1:
- queries = 1
- if queries > 500:
- queries = 500
- return queries
- def plaintext(request):
- return HttpResponse("Hello, World!", content_type="text/plain")
- def json(request):
- response = {
- "message": "Hello, World!"
- }
- return HttpResponse(uj_dumps(response), content_type="application/json")
- def db(request):
- r = random.randint(1, 10000)
- world = uj_dumps({'id' : r, 'randomNumber' : World.objects.get(id=r).randomnumber})
- return HttpResponse(world, content_type="application/json")
- def dbs(request):
- queries = _get_queries(request)
- # fun fact: every dot-notation lookup calls some python magic under the hood. Like every other code,
- # one can eliminate dereferences by storing the end dereferenced thing in an identifier
- g = World.objects.get
- # but wait! there's more! if we're calling a function over and over with the same parameters,
- # we can use even more function magic.
- #r = random.randint
- rp = partial(random.randint, 1, 10000)
- # now we're ready to write our awesome query iterator thingy
- # first of all, we know the id's correspond to the random number we're picking, so we can create
- # dictionaries on the fly instead of serializing later
- # by creating dicts, we don't need to user the model serializer, which is probably slow and only appropriate
- # for complicated serializations of joins and crazy query sets etc
- # test xrange vs range if the query number is gigantic
- worlds = uj_dumps([{'id' : r, 'randomNumber' : g(id=r).randomnumber} for r in [rp() for q in xrange(queries)]])
- return HttpResponse(worlds, content_type="application/json")
- def fortunes(request):
- fortunes = list(Fortune.objects.all())
- fortunes.append(Fortune(id=0, message="Additional fortune added at request time."))
- fortunes = sorted(fortunes, key=attrgetter('message'))
- context = {'fortunes': fortunes}
- return render(request, 'fortunes.html', context)
- def update(request):
- queries = _get_queries(request)
- g = World.objects.get
- rp = partial(random.randint, 1, 10000)
- worlds = []
- for r in [rp() for q in xrange(queries)]:
- w = g(id=r)
- w.randomnumber=rp()
- w.save()
- worlds.append({'id' : r, 'randomNumber' : w.randomnumber})
- return HttpResponse(uj_dumps(worlds), content_type="application/json")
|