You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
tea/choose/views.py

76 lines
2.5 KiB

import json
from collections import OrderedDict
from django.contrib.auth import authenticate, login
from django.http import JsonResponse, HttpResponse
from django.shortcuts import render, redirect
from django.template import loader
from .models import Tea, TeaType, TeaCategory, Pic, Choice
# Create your views here.
from .utils import get_extension
def login_view(request):
return render(request, 'login.html')
def login_requiered(func):
def wrapper(*args, **kwargs):
request = args[0]
if request.user.is_authenticated:
return func(*args, **kwargs)
else:
return redirect('login_view')
return wrapper
def list_of_teas():
dic = OrderedDict()
for cat in TeaCategory.objects.all():
dic[cat.name] = OrderedDict()
for tt in TeaType.objects.all():
if tt.preferred is not None:
dic[tt.category.name][tt.name] = OrderedDict()
dic[tt.category.name][tt.name]['preferred'] = tt.preferred.name
dic[tt.category.name][tt.name]['price'] = int(tt.preferred.price / 100)
dic[tt.category.name][tt.name]['pic'] = '/media/' + str(tt.preferred.pic.id) + '.' + get_extension(
tt.preferred.pic.href)
return {'categories': dic, 'ms': [0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500]}
def list_of_choices():
pass
@login_requiered
def home(request):
context = list_of_teas()
template = loader.get_template('choose.html')
return HttpResponse(template.render(context, request))
def confirm_choose(request):
if request.user.is_authenticated:
choice = json.loads(request.body.decode(encoding='UTF-8'))
d ={}
for key in choice:
tea = Tea.objects.get(name=key)
d[tea.id] = choice[key]
choice_string = json.dumps(d, sort_keys=True)
previous = Choice.objects.filter(users__in=[request.user]).first()
if previous is not None:
if previous.choice == choice_string:
return JsonResponse({'response': 'unchanged'})
previous.users.remove(request.user)
if not previous.users.exists():
previous.delete()
my_choice, _ = Choice.objects.get_or_create(choice=choice_string)
if request.user not in list(my_choice.users.all()):
my_choice.users.add(request.user)
if request.user in list(my_choice.votes.all()):
my_choice.votes.remove(request.user)
return JsonResponse({'response': 'ok'})
else:
return JsonResponse({'response': 'unauthenticated'})