api2 beginning, minor changes
This commit is contained in:
parent
ad792b6747
commit
c7ad4be6e4
|
@ -17,3 +17,6 @@ Nice-to-haf:
|
|||
|
||||
Konrad:
|
||||
Abmeldenutton rechts oder rot?
|
||||
- die liste der zu einkaufenden items ist doof :(
|
||||
- /store/history/ ist noch kaputt + zeit unformatiert
|
||||
- /transaction/ sehen die gemachten transactions noch nicht so cool aus
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
API
|
||||
kaufen
|
||||
produkte
|
||||
auflisten
|
||||
alle, nach gruppe
|
||||
produktgruppen auflisten
|
||||
suchen nach namen
|
||||
hasDeposit falls kein attribut
|
||||
beliebteste produkte (allgemein, nur vom user)
|
||||
kaufen eines items (mit oder ohne deposit)
|
||||
pfand zurückgeben
|
||||
letzte einkäufe
|
||||
|
||||
|
||||
transaction
|
||||
auflisten zahlarten (bar, ueberweisung, ...)
|
||||
einzahlen
|
||||
auszahlen
|
||||
letzte einzahlungen
|
||||
|
||||
api auth stuff
|
||||
if plugin identifies by authblob
|
||||
getUsersByAuthBlob (oderso)
|
||||
else
|
||||
authenticateUser(user, authblob)
|
||||
listAuthBlobs (fuer alle user, die das plugin erlaubt haben)
|
||||
canSuAsUser (noch ordentlich zu benennen)
|
||||
|
||||
|
||||
|
||||
cool wäre:
|
||||
irgendwann letzte Änderung der produktliste speichern
|
||||
|
||||
=== REST LIKE API STARTS HERE ===
|
||||
|
||||
buyable/
|
||||
item/
|
||||
GET (=list)
|
||||
""" get a specific item or a full (group) item list """
|
||||
group item belonging to group
|
||||
id item with id
|
||||
POST (=buy)
|
||||
""" buy an item"
|
||||
id [REQ] buy item with id
|
||||
deposit
|
||||
types/
|
||||
GET (=list)
|
||||
""" list all types (groups) which an item can belong to """
|
||||
|
||||
transaction/
|
||||
transact/
|
||||
GET (=list)
|
||||
""" list your transactions """
|
||||
num list $num entries
|
||||
POST (=pay)
|
||||
""" actually transact money """
|
||||
amount [REQ] amount to add to your account
|
||||
type [REQ] type of transaction (id)
|
||||
types/
|
||||
GET (=list)
|
||||
""" list all available transaction types"
|
||||
auth/
|
||||
blob/
|
||||
GET (=get)
|
||||
""" return authblob if allowed or auth if str given """
|
||||
blob blob to get user from / auth user with, returns User or NULL
|
||||
POST
|
||||
""" set authblob if allowed """
|
||||
|
||||
|
||||
|
||||
wget -q -O- --auth-no-challenge --http-user=seba -http-password=foobar23 http://devcat.someserver.de:13805/api2/buyable/item/foo
|
|
@ -0,0 +1,27 @@
|
|||
from piston.handler import BaseHandler
|
||||
from k4ever.buyable.models import *
|
||||
from k4ever.transaction.models import *
|
||||
|
||||
class BuyableItemHandler(BaseHandler):
|
||||
allowed_methods = ('GET', 'POST')
|
||||
#fields = ('id', 'description')
|
||||
model = Buyable
|
||||
exclude = ('_state',)
|
||||
|
||||
#def read(self, request):
|
||||
# return Buyable.objects.get(id=1)
|
||||
|
||||
class BuyableTypeHandler(BaseHandler):
|
||||
allowed_methods = ('GET',)
|
||||
model = BuyableType
|
||||
|
||||
class TransactionTransactHandler(BaseHandler):
|
||||
allowed_methods = ('GET', 'POST')
|
||||
model = Transaction
|
||||
|
||||
class TransactionTypeHandler(BaseHandler):
|
||||
allowed_methods = ('GET',)
|
||||
model = TransactionType
|
||||
|
||||
class AuthBlobHandler(BaseHandler):
|
||||
pass
|
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
|
@ -0,0 +1,23 @@
|
|||
"""
|
||||
This file demonstrates two different styles of tests (one doctest and one
|
||||
unittest). These will both pass when you run "manage.py test".
|
||||
|
||||
Replace these with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.failUnlessEqual(1 + 1, 2)
|
||||
|
||||
__test__ = {"doctest": """
|
||||
Another way to test that 1 + 1 is equal to 2.
|
||||
|
||||
>>> 1 + 1 == 2
|
||||
True
|
||||
"""}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
from django.conf.urls.defaults import *
|
||||
from piston.resource import Resource
|
||||
from piston.authentication import HttpBasicAuthentication
|
||||
from api2.handlers import *
|
||||
|
||||
auth = HttpBasicAuthentication(realm="Freitagsrundenkassensystemapi")
|
||||
ad = {'authentication': auth}
|
||||
|
||||
buyableItemRes = Resource(handler=BuyableItemHandler, **ad)
|
||||
buyableTypeRes = Resource(handler=BuyableTypeHandler, **ad)
|
||||
|
||||
transactionTransactRes = Resource(handler=TransactionTransactHandler, **ad)
|
||||
transactionTypeRes = Resource(handler=TransactionTypeHandler, **ad)
|
||||
|
||||
authBlobRes = Resource(handler=AuthBlobHandler, **ad)
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'buyable/item/', buyableItemRes),
|
||||
url(r'buyable/types/', buyableTypeRes),
|
||||
|
||||
url(r'transaction/transact/', transactionTransactRes),
|
||||
url(r'transaction/types/', transactionTypeRes),
|
||||
|
||||
url(r'auth/blob/', authBlobRes),
|
||||
)
|
||||
|
|
@ -0,0 +1 @@
|
|||
# Create your views here.
|
|
@ -18,6 +18,9 @@ class Buyable(models.Model):
|
|||
deposit = models.FloatField()
|
||||
description = models.TextField()
|
||||
buyableType = models.ManyToManyField(BuyableType)
|
||||
|
||||
def hasDeposit(self):
|
||||
return self.deposit > 0
|
||||
|
||||
def createPurchase(self, isDeposit=False):
|
||||
p = Purchase()
|
||||
|
@ -31,7 +34,11 @@ class Buyable(models.Model):
|
|||
return p
|
||||
|
||||
def __unicode__(self):
|
||||
return "%s (%s EUR/%s Pfand)" % (self.name, self.price, self.deposit)
|
||||
item = "%s (%.2f EUR" % (self.name, self.price)
|
||||
if self.hasDeposit():
|
||||
item += "/%.2f Pfand" % self.deposit
|
||||
item += ")"
|
||||
return item
|
||||
|
||||
class Order(models.Model):
|
||||
user = models.ForeignKey(User)
|
||||
|
|
|
@ -2,7 +2,12 @@
|
|||
|
||||
{% block "content" %}
|
||||
{% if item %}
|
||||
You got the item {{ item }}.Buy <a href="/store/buy/{{ item.id }}/">it!</a> <a href="/store/buy/{{ item.id }}/with/deposit/">it+deposit!</a> <a href="/store/buy/{{ item.id }}/only/deposit/"> only deposit!</a>
|
||||
You got the item {{ item }}.
|
||||
Buy <a href="/store/buy/{{ item.id }}/">it!</a>
|
||||
{% if item.hasDeposit %}
|
||||
<a href="/store/buy/{{ item.id }}/with/deposit/">it+deposit!</a>
|
||||
<a href="/store/buy/{{ item.id }}/only/deposit/"> only deposit!</a>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
No item found :(
|
||||
{% endif %}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
{% block "content" %}
|
||||
{% for item in items %}
|
||||
<img src="{{ MEDIA_URL }}{{ item.image }}">{{ item }} <a href="/store/show/{{ item.id }}">{{ item.name }}</a>
|
||||
<img src="{{ MEDIA_URL }}{{ item.image }}">{{ item }}
|
||||
<a href="/store/show/{{ item.id }}">{{ item.name }}</a>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -25,6 +25,12 @@ table, caption, tbody, tfoot, thead, tr, th, td {
|
|||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/* added by seba because nobody else did this. */
|
||||
.content {
|
||||
margin: 5px;
|
||||
}
|
||||
/* end of addition */
|
||||
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
|
@ -331,4 +337,4 @@ html body div#header div.search ul.ui-autocomplete li.ui-menu-item.focus {
|
|||
|
||||
.meta:first-line {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ urlpatterns = patterns('',
|
|||
# user stuff? go to main
|
||||
(r'^$', 'main.views.startpage'),
|
||||
(r'^api/', include('api.urls')),
|
||||
(r'^api2/', include('api2.urls')),
|
||||
(r'^user/', include('main.urls')),
|
||||
(r'^transaction/', include('transaction.urls')),
|
||||
(r'^store/', include('buyable.urls')),
|
||||
|
|
Loading…
Reference in New Issue