Christopher Lozinski wrote:
I need a very simple app. Just 1 ZClass, an invoice object. Not even subitems on the invoice. I want to create these ZClasses, I want a table of these ZClasses, I want to be able to say which role gets to create these objects, which role gets to see which fields, and which role gets to edit which fields. I would also like a search form with a ZCatalog, and I would like an edit/create form. All I want is to define the fields of the Zclass, and have the rest magically appear. I want the application to be built really quickly. Can you deliver by Monday?

Let me deliver by Thursday::

import grok
from zope import schema

class InvoiceTracker(grok.Application, grok.Container):
    """Folderish object (we say 'container' in Zope 3) that contains
    Invoice objects."""

class Invoice(grok.Model):
    """A persistent Invoice class, below is a definition of the data
   fields that an invoice can carry."""

    class fields:
        date = schema.Date(title=u'Date')
        from = schema.TextLine(title=u'From')
        about = schema.TextLine(title=u'About')
        amount = schema.Float(title=u'Amount')
        status = schema.Choice(title=u'Status',
                               values=['Incoming', 'Paid', 'Rejected'])

class AddInvoice(grok.AddForm):
    """Form that lets us enter invoice data and as a result creates an
    Invoice object and puts it into the InvoiceTracker container"""

    form_fields = grok.AutoFields(Invoice)

    @grok.action("Add invoice")
    def add(self, **data):
        invoice = Invoice()
        self.applyData(invoice, **data)
        self.context[str(data['date']) + '-' + data['from'])] = invoice

class EditInvoice(grok.EditForm):
    """This lets us edit the data contained in an invoice. It is
    accessible via http://url/to/an/invoice/edit.""";

    form_fields = grok.AutoFields(Invoice)

class DeleteInvoice(grok.View):
    """View that lets us delete an invoice from the container. You can
    invoke it via


    def update(self, name):
        del self.context[name]

class ListInvoices(grok.View):
    """View that lists all the invoices within an invoice tracker."""


    # Rendering happens in Page Template app_templates/
    # This needs to be written (the only template in this app, btw).

What you got here is a simple CRUD (create read update delete) application. Most web-frameworks have examples on how to create such an application because it's such a common pattern.

ZClasses surely was an easy way to create CRUD applications in Zope 2. However, apart from many technical difficulties that are ZClasses, I personally find that through-the-web (TTW) development is actually hurting Zope and the people who use it, rather than help. I've put my thoughts regarding that issue into a blog article recently [1]. One of the main points of that article is that while TTW development is bad, we do need an altenative to lower the bar for newcomers, quick'n'dirty developers, and for ourselves who can't remember every single detail of Zope's big API.

Grok [1] is this alternative. The above 60-line application is written in Grok and it should be functional except for one PageTemplate which yet needs to be written. Note I haven't tested the above code at all, there might be typos lurking.

Is this so much harder than ZClasses? I believe no (though as one of the original Grok developers, I'm naturally biased). Like other people have pointed out already, there's a Grok tutorial [3] where you can learn this stuff. And a while back, I made a screencast [4] that shows how to develop a simple CRUD application like the above (in the screencasts it's a TodoList) in 15 minutes. It also took me about 15 minutes to write the above. And it's commented.

Chris, if you want to keep ZClasses alive on your own, we can't stop you. If you want to rip out Zope's security in the process and simplify everything and what not, well that's crazy, but we can't stop you. But it seems that the community at this point is not interested in any of this. That may seem sad, but given many people's frustration with TTW in general and ZClasses in particular, it's not so surprising.

Give Grok a chance. Let us know how it went. I already gave you a head start on that invoice tracking app. :)


-- -- Professional Zope documentation and training
Zope-Dev maillist  -
**  No cross posts or HTML encoding!  **
(Related lists - )

Reply via email to