shaping out functionality

This commit is contained in:
Konstantin Martini 2015-01-03 02:49:29 +01:00
parent e0c901d456
commit d2f3f3029c
9 changed files with 182 additions and 26 deletions

View File

@ -3,8 +3,8 @@ from django.db import models
class Drinker(models.Model): class Drinker(models.Model):
def __unicode__(self): def __str__(self):
return unicode(self.name) return '<%r %s>' % (self.name, self.code)
name = models.CharField(max_length=123) name = models.CharField(max_length=123)
@ -15,8 +15,8 @@ class Drinker(models.Model):
class Drink(models.Model): class Drink(models.Model):
def __unicode__(self): def __str__(self):
return unicode(self.name) return '<%r %s>' % (self.name, self.code)
name = models.CharField(max_length=123) name = models.CharField(max_length=123)

View File

@ -6,6 +6,9 @@ urlpatterns = patterns('',
# url(r'^blog/', include('blog.urls')), # url(r'^blog/', include('blog.urls')),
#(r'.*$', 'matecnt.views.overview'), #(r'.*$', 'matecnt.views.overview'),
(r'users/.*$', 'matecnt.views.users'), (r'index$', 'matecnt.views.index'),
(r'user/(?P<code>\d+)$', 'matecnt.views.user'),
(r'drinks/.*$', 'matecnt.views.drinks'), (r'drinks/.*$', 'matecnt.views.drinks'),
(r'drink/(?P<code>\d+)$', 'matecnt.views.drink'),
(r'checkout', 'matecnt.views.checkout')
) )

View File

@ -1,27 +1,100 @@
#from django.shortcuts import render from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.template import RequestContext, loader from django.template import RequestContext, loader
from matecnt.models import Drinker, Drink from matecnt.models import Drinker, Drink
def users(request): # Helpers
#drinkers = Drinker.objects.all()
drinkers = Drinker.objects.order_by('credit')[:5] def get_users():
template = loader.get_template('users.html') return Drinker.objects.order_by('credit')
def get_user(code):
return get_object_or_404(Drinker, code=code)
def get_drink(code):
return get_object_or_404(Drink, code=code)
def get_drinks():
return Drink.objects.order_by('prize')
# Views
def index(request):
ctx = {
'heading': 'Welcome to YAMatemat',
'drinkers': get_users(),
}
return render(request, 'index.html', ctx)
def user(request, code=None):
if not code:
if 'user' in request.REQUEST:
code = request.REQUEST['user']
else:
return redirect('/mate/users/')
user = get_user(code)
ctx = {
'heading': 'User %s' % (user.name),
'drinker': user,
'drinks': get_drinks,
}
return render(request, 'user.html', ctx)
def drink(request, code=None):
if not code:
if 'drink' in request.REQUEST:
code = request.REQUEST['drink']
else:
return redirect('/mate/drinks/')
drink = get_drink(code)
ctx = {
'heading': 'Drink %s' % (drink.name),
'drink': drink,
'drinkers': get_users(),
}
return render(request, 'drink.html', ctx)
context = RequestContext(request, {
'heading': 'User list',
'drinkers': drinkers,
})
return HttpResponse(template.render(context))
def drinks(request): def drinks(request):
drinks = Drink.objects.order_by('prize') drinks = get_drinks()
template = loader.get_template('drinks.html')
context = RequestContext(request, { ctx = {
'heading': 'Drink list', 'heading': 'Drink list',
'drinks': drinks, 'drinks': drinks,
}) }
return HttpResponse(template.render(context)) return render(request, 'drinks.html', ctx)
def checkout(request):
#if not request.method == 'POST':
#raise RuntimeError('only POST allowed')
try:
user = request.REQUEST['drinker']
drink = request.REQUEST['drink']
except KeyError as ex:
return HttpResponse(status=400)
count = request.REQUEST.get('count', 1)
ctx = {
'heading': 'Codes scanned: user=%r drink=%r amount=%s' % (user, drink, count),
'drinker': get_user(user),
'drink': get_drink(drink),
}
return render(request, 'checkout.html', ctx)

View File

@ -1,9 +1,12 @@
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
from django.contrib import admin from django.contrib import admin
from django.views.generic import RedirectView
from matecnt import urls as matecnt_urls from matecnt import urls as matecnt_urls
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^mate/', include(matecnt_urls)), url(r'^mate/', include(matecnt_urls)),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),
(r'^.*$', RedirectView.as_view(url='/mate/index')),
) )

View File

@ -3,11 +3,7 @@
{% block content %} {% block content %}
<h1>{{ heading }}</h1> <h1>{{ heading }}</h1>
{% for drink in drinks %}
<h2> <h2>
<a href="/drink/{{ drink.code }}"> {{drinker.name}} spends {{drink.prize}} units on {{drink.name}}.
{{ drink.name }}
</a>
</h2> </h2>
{% endfor %}
{% endblock %} {% endblock %}

27
templates/drink.html Normal file
View File

@ -0,0 +1,27 @@
{% extends "base.html" %}
{% block content %}
<h1>{{ heading }}</h1>
<h2>
Name: {{drink.name}}<br />
Code: {{drink.code}}<br />
Prize: {{drink.prize}}<br />
</h2>
<h2>
Have one of these for {{drink.prize}} credits:
</h2>
{% for drinker in drinkers %}
<h2>
<form action="/mate/checkout" method="POST">
{% csrf_token %}
<input type="text" name="count" value="1" size="3" />
<input type="submit" name="submit" value="{{ drinker.name }}" />
<input type="hidden" name="drinker" value="{{ drinker.code }}"/>
<input type="hidden" name="drink" value="{{ drink.code }}" />
</form>
</h2>
{% endfor %}
{% endblock %}

View File

@ -5,7 +5,7 @@
{% for drink in drinks %} {% for drink in drinks %}
<h2> <h2>
<a href="/drink/{{ drink.code }}"> <a href="/mate/drink/{{ drink.code }}">
{{ drink.name }} {{ drink.name }}
</a> </a>
</h2> </h2>

27
templates/index.html Normal file
View File

@ -0,0 +1,27 @@
{% extends "base.html" %}
{% block content %}
<h1>{{ heading }}</h1>
<hr />
<h2>
User List:<br />
</h2>
{% for drinker in drinkers %}
<h2>
<a href="/mate/user/{{ drinker.code }}">
{{ drinker.name }}
</a>
</h2>
{% endfor %}
<hr />
<h2>
<a href="/mate/drinks/">
Drink list
</a>
</h2>
<hr />
{% endblock %}

27
templates/user.html Normal file
View File

@ -0,0 +1,27 @@
{% extends "base.html" %}
{% block content %}
<h1>{{ heading }}</h1>
<h2>
Name: {{drinker.name}}<br />
Code: {{drinker.code}}<br />
Credit: {{drinker.credit}}<br />
</h2>
<h2>
have a drink:
</h2>
{% for drink in drinks %}
<h2>
<form action="/mate/checkout" method="POST">
{% csrf_token %}
<input type="text" name="count" value="1" size="3" />
<input type="submit" name="submit" value="{{ drink.name }} ({{drink.prize}} credits)" />
<input type="hidden" name="drinker" value="{{ drinker.code }}"/>
<input type="hidden" name="drink" value="{{ drink.code }}" />
</form>
</h2>
{% endfor %}
{% endblock %}