La première chose que j'ai essayé de faire c'est de lancer le getting
started de la documentation de couchdbkit
ça permet de comprendre l'intégralité du fonctionnement, saisie, et
lecture de la base. On écrit les views en javascript.
L'arborescence est importante, selon ce que vous mettez, vous
n'accèderez pas forcément à votre view.
Démarrer un projet Django CouchDB
Pour démarrer "from scratch", il faut configurer votre projet :
COUCHDB_DATABASES = (
('djangoapp.mesh’, 'http://127.0.0.1:5984/mesh'),
)
# ...
INSTALLED_APPS = (
....
'couchdbkit.ext.django’,
'captor_mesh.mesh’,
....
)
Dans le fichier models.py on va ensuite créer notre modèle de
document :
from couchdbkit.ext.django.schema import *
class Captor(Document):
arduino_id = IntegerProperty()
pin_id = IntegerProperty()
value = IntegerProperty()
date_time = DateTimeProperty(auto_now_add=True)
def __unicode__(self):
return u'[%s] Arduino : %s - PIN : %s - Value : %d' % (
self.date_time.strftime('%H:%M:%S'),
self.arduino_id,
self.pin_id,
self.value)
Pour créer automatiquement un formulaire à partir du modèle :
from couchdbkit.ext.django.schema import *
class CaptorForm(DocumentForm):
class Meta:
document = Captor
Nous avons des vues simples qui affiche simplement les templates :
def gauge(request, arduino_id):
return render_to_response('mesh/gauge.html', {'arduino': arduino_id})
def line(request, arduino_id):
return render_to_response('mesh/line.html',
{'arduino': arduino_id})
Nous avons d'autres vues plus compliquées où nous souhaitons afficher
des informations de la base :
def index(request):
if request.method == "POST":
return HttpResponseRedirect(
reverse(request.POST['view'],
args=[request.POST['arduino']]))
arduinos = list(Captor.view('mesh/arduino'))
return render_to_response('mesh/index.html', {'arduinos': arduinos},
RequestContext(request))
<html>
<head>
<title>Mesh network</title>
</head>
<body>
<h1>Mesh network</h1>
<form action="" method="post">
<select name="arduino">
{% csrf_token %}
{% for arduino in arduinos %}
<option value="{{ arduino }}">Arduino #{{ arduino }}</option>
{% endfor %}
</select>
<select name="view">
<option value="gauge">Gauge</option>
<option value="line">Line</option>
</select>
<p><input type="submit" /></p>
</form>
</body>
</html>
Nous allons donc réaliser un fichier _design/views/arduino/map.js :
function(doc) {
if (doc.doc_type == "Captor")
emit(doc.arduino_id);
}
Et je ne suis pas allé plus loin avec CouchDB car la magic de
l'accès à mes views décrites dans un fichier js séparé ne me convenait
pas.