Seite 1 von 1

Einsteigerfrage: API

Verfasst: Montag 20. Oktober 2008, 08:11
von muli
Hallo alle,
hier meine erste Frage: ich gehe gerade die Tutorials durch und finde dort beispielsweise folgende Zeile:
container.Files.manage_addProduct['OFSP'].manage_addFile(id='', title='', file=file)
da wird wohl in die zodb ein neues File eingebaut oder?
Da ich jetzt aber Dicts persistent abspeichern möchte ist das nicht so genau das was ich suche...
Wo kann ich die funktionen finden um ein Dict abzuspeichern?
Ok api habe ich gefunden bin aber immernoch völlig ratlos wie ich jetzt einfache variablen die ich in einem Skript verwende persistent abspeicher.
Die ganzen Tutorial handeln von zobd ausserhalb von zope...
ich denke in zope muss ich nicht extra eine verbindung zu einer DB aufbauen...
wenn ich aber sowas wie
context.Folder['irgendwas'] = 15 schreibe klappt das nicht.
Bin echt ratlos...und mir irgendwie auch klar darüber einer eigentlich trivialen aufgabe gegenüber zu stehen

Ich bin für jede Anregung dankbar und bin mit ein paar Stichwörtern zufrieden..

Danke muli

Verfasst: Montag 20. Oktober 2008, 13:52
von draci
Moment Starte grad mein Zope

Verfasst: Montag 20. Oktober 2008, 13:56
von draci
Willkommen im Python Forum, muli

Ich mach das so (tmp ist ein ordner)

Code: Alles auswählen

data={'irgenwas':'123'}
context.tmp.manage_changeProperties(data)

Verfasst: Montag 20. Oktober 2008, 18:32
von muli
Danke!
aber:
Warum kann ich die Funktion
manage_changeProperties
dann nicht in hier
http://localhost:8080/HelpSys in der API finden
wenn tmp ein Folder ist sollre die Funktion doch in Folder oder einem seiner Vorfahren zu finden sein.

Code: Alles auswählen

class Folder(ObjectManagerItem, ObjectManager, PropertyManager)
Wenn nicht dort wo kann ich die information denn sonnst finden?
???
Speichert man auch grosse Datenmengen als Property eines Folders.
kommt mir hier irgendwie alles komisch vor.


muli :?

Verfasst: Montag 20. Oktober 2008, 23:45
von muli
Ok ich hab da auch noch eine Verständnisfrage zu dem Tutorial:

Dieses Guestbook speichert Einträge in einer Datei.
Diese wird dann noch zusatzlich in dieser ZODB gespeichert? Häh wo liegt da der Sinn?

und überhaupt es wird an jeder stelle behauptet wie einfach es sein ein Python Object in der ZOBD zu speichern...
Ich bin vielleicht zu dumm aber ich lese jetzt schon seid einigen Tagen und nirgends zeigt man mir wie...
alles was ich finde sind anmerkungen wie die ZODB ohne zope funktioniert.

Das ist ja alles schön und gut aber wenn ich jetzt eine Persistente Klasse in zope2 in einem Skript habe und die einfach nur in diese Datenbank hauen will und danach vielleicht wieder löschen steht das nirgends. diese hübsche append() funktion die die da immer mit dem root objekt verwenden funktioniert bei mir nicht wenn ich die auf ein Folder anwende...

Es wäre echt toll wenn mir das mal jemand in ein paar worten erklären könnte..

muli

Verfasst: Dienstag 21. Oktober 2008, 07:26
von draci
Was genau meinst du mit
diese hübsche append() funktion
Übrigens:
Ich musste mich schon oft mit dieser Dokumentation rumärgern,
die ist nämlich nicht sinderlich toll.
Ich nutze die API Referenz aus dem Buch
Zope : [Grundlagen, Praxis, Referenz ; Entwicklung von dynamischen Webanwendungen ; aktuell zu Zope 2.6/2.7 und 3.0 ; mit kompletter API-Referenz] / Peter Walerowski. - 1. Aufl.. - Galileo Press

Verfasst: Dienstag 21. Oktober 2008, 10:17
von muli
Von dem Buch habe ich schon gehört, vielleicht lege ich mir das auch mal zu.

Das mit dieser append() funktion finde ich gerade auch nicht wieder.. keine Ahnung ... war ziemlich übermüdet als ich das gestern geschrieben habe.

Aber mal allgemein: Wenn ich jetzt mal so eine Persistente klasse in zope speichern möchte wie mach ich das? Soll ich die wirklich als ein attribut eines Folders schreiben?

Ich dachte mir ich verwende das Folderobjekt als Container in dem ich dann wie beispielsweise ein File auch ein Objekt meiner Wahl ablegen kann.

Muss ich das Objekt dann erst zu einem Product machen?
Darunter versteh ich aber nicht einfach.

Auf der Zope
Seite finde ich folgendes:
The root object is the dictionary that holds all of your persistent objects. For example, you can store a simple list of strings in the root object:
>>> root['employees'] = ['Mary', 'Jo', 'Bob']
>>> get_transaction().commit()

hier zeigen die aber nur wie ich diese zodb ausserhalb von zope verwende (und das auf der zope seite???)
Ich habe das alles so verstanden dass ich in zope auch ein root verzeichnis habe das mit dem in dem Tutorial vergleichbar ist.
Also sollte ich doch mit sowas hier in einem skript auch etwas speichern können:

Code: Alles auswählen

context.irgendeinFolder['employees'] = ['Mary', 'Jo', 'Bob']
muss ich dann in zope auch commiten?
oder muss ich vorher noch extra eine verbindug zu der Data.fs aufbauen?
Dann sagt er mir das er die nicht 'locken' kann.
Naja wie ihr seht bin ich immer noch so schlau wie zuvor?

Ich denke ich brauche nur ein paar zeilen Code um zu sehen wie man denn nun diese verdammte zobd in zope2 bedient und aus einem Skript heraus etwas speichert.

Ich bitte weiterhin untertänigst um Hilfe
muli

Verfasst: Donnerstag 23. Oktober 2008, 15:41
von draci
Die ZDB ist im gegensatz zu MYSQL eine Objektorientierte Datenbank.
Du must dich nicht mit ihr Verbinden!

Sieh es mal so:
Du möchtest z.B. eine Datenbank mit Büchern haben.
Also erstellst du wie du schon gesagt hast einen Ordner als Container.
In diesem Ordner wird dann für jedes Buch sprich Objekt ein neuer Ordner erstellt. (Bei mir mit fortlaufender Nummer als Id)
Er representiert ein einzelnes Buch und bekommt dann Eigenschaften zugewiesen z.B.:

Autor: draci
Titel: ZOPE Programming
...

Dass kanst du dem Ordner wie ich oben beschrieben habe so zu weisen:

Code: Alles auswählen

data={'autor':'draci',
          'title':'ZOPE Programming'}
context.container_ordner[id_des_buches_als_string].manage_changeProperties(data)

Ach ja, du kannst URLs übrigens ganz einfach mit dem URL Button zu einem echten Hyperlink machen,auf den man dann auch klicken kann.

Toll gell :mrgreen:

Verfasst: Samstag 25. Oktober 2008, 19:35
von muli
Danke Du hast mir sehr geholfen...
Aber ich würde da trotzdem gerne noch etwas nachhaken:

Speichere ich also z.B: irgendein persistentes Objekt, MeineKlasse, in der Regel in einem Folder Objekt?
Ist da nicht ein objekt überflüssig?
Wenn ich also verschiedenen Bücher (in deinem Beispiel) habe und man persistent python klassen Speichern kann, kann ich dann nicht auch in einem Folder Bücher alle Instanzen meiner Bücherklasse ablegen?

Wenn ich in einer external Method folgendes schreibe:

Code: Alles auswählen

self.info = {'hallo':300}
Dann wird dies persistent gespeichert.
Ich kann das mit here/info in einem pageTemplate ausgeben
Wenn ich aber here/objectItems abfrage dann taucht das nicht auf!

Was ist das? ein Objekt im nirgendwo?
Ist das überhaupt ein ZopeObjekt? sollte es doch eigentlich wenn es in der ZODB gespeichert wird.
Wie kann ich solch ein Objekt wieder loeschen? oder ändern?

vielen Dank
muli

Verfasst: Sonntag 26. Oktober 2008, 12:54
von draci
Tut mir leid, hab mich noch nie damit befasst.
Es gibt glaube ich ein Modul für Perpesistente Objecte.
vielleicht kennt sich jemand anderes damit aus.



:?

Verfasst: Montag 27. Oktober 2008, 01:11
von muli
Tja ich warte mal.
Trotzdem danke ich dir sehr!
Hab jetzt aufjedenfall einen Ansatz mit dem ich erstmal arbeiten kann!
Vielleicht kann ich mich ja irgendwann mal revanchieren!

muli :wink: