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.
80 lines
2.8 KiB
80 lines
2.8 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):
|
|
if request.method == 'POST':
|
|
username = request.POST['username']
|
|
password = request.POST['password']
|
|
user = authenticate(username=username, password=password)
|
|
if user is not None and user.is_active and user.is_authenticated:
|
|
login(request, user)
|
|
return redirect(home)
|
|
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]}
|
|
|
|
|
|
@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'})
|
|
|