[Zope3-Users] Access to request in content object and object path
in doctests
David Johnson
djohnson at jsatech.com
Fri Jan 26 07:35:20 EST 2007
I do lots of database stuff, like what you're describing. I got
lost in the threads here, but my general advice is the following:
1. Do not mix content with views, this destroys the scalability
aspects of Zope and will hurt you later. When ever you find Zope
frustrating it often because you're trying to do something that is
not in your best interests.
2. Generally you will want to create content with methods that can
perform the database operations you would like. For example, I
recently created a Container/Folder that contains object from a
database. The container is persistent. The container however loads
the content from an SQL database. I can then edit and view the
objects from the SQL database like ZODB objects. I have some code
that I can share here.
In another example, which may suite your needs, I created a Zope site
in which customers can lookup orders by an order id. My content
object is effectively a class "Order", which has a method,
"getOrderById", and that takes an order id as the parameter.
getOrderById() queries the database and returns the order as a
dictionary. My view is a page that simply calls
self.context.getOrderById() with the orderid as the first parameter.
The advantage of this approach is that you can de-couple the database
from the view and content objects. You can the ability to do lots of
other cool stuff as well, like create XML-RPC views without having to
do much extra coding (because all the code is hidden in your content
object).
3. There are times when your content and views will need to mesh a
bit more tightly. In this case, you can create views on your context
object. I'm not very good with zope terminology at times, but this
view is a different zope:view than the browser:view. For example, I
have a shopping cart application and the cart of course is different
for each client. The cart also resides in an SQL database. So I
have a content type: Cart, which has a view, that accepts a request,
and can effectively remold the Cart content type into a specific cart
for a specific client. The client will after all need to manipulate
the cart to add, delete, and edit items.
On Jan 24, 2007, at 11:50 PM, Maciej Wisniowski wrote:
> Hi
>
> Two questions...
>
> Is this possible to get
> request object in content class. In Zope2 this
> was possible with simple self.REQUEST. In Zope3
> I tried self.request but I only get errors.
> Maybe this is a feature, and I'm not supposed
> to access request object from content class?
>
>
> Another question. I'm trying to write tests
> for my content object.
> Because I want some caching facilities
> I'm using getLocationForCache from
> zope.app.cache.caching.
> and because of this: zapi.getPath(obj)
>
> In short it is like:
>
> class MyClass(Persistent):
> (...)
> def myfunction(self):
> location = zapi.getPath(self)
> return location
>
> In the tests I always get location == None.
> I'm using doctests like:
>
>>>> test_content = MyClass()
>>>> test_content.myfunction()
>
> placefulsetup adds some objects like root etc.
> but I'm not sure how I should add my object to this.
> Any clues?
>
> --
> Maciej Wisniowski
> _______________________________________________
> Zope3-users mailing list
> Zope3-users at zope.org
> http://mail.zope.org/mailman/listinfo/zope3-users
>
More information about the Zope3-users
mailing list