You might consider sessions in
memcache<http://web2py.com/books/default/chapter/29/13/deployment-recipes#Sessions-in-memcache>or
redis<http://web2py.com/books/default/chapter/29/13/deployment-recipes#Sessions-in-Redis>
.
If using the standard session, I suppose you could store items with a
timestamp and expire/clean-up as needed. Note, items are not automatically
expunged from the cache when they "expire". Rather, the expire_time value
is used at retrieval time to determine whether to retrieve the item in the
cache or re-calculate and replace it. You have to explicitly clear items.
Anthony
On Friday, August 2, 2013 3:30:27 PM UTC-4, David Marko wrote:
>
> I tried to avoid serialize these data structures from different forms to
> disk (default session storage). But you are probably right, that is can be
> a good solution ... however cache for individual objects would have
> separate expire date. Using session, when user work all the day and session
> will not expire, all viewScope objects would be part of session and will
> expire during night ... But it would make session grow during a day ...
>
> Dne pátek, 2. srpna 2013 21:19:26 UTC+2 Anthony napsal(a):
>>
>> Is there a reason this can't be done using the session?
>>
>> Anthony
>>
>> On Friday, August 2, 2013 3:10:55 PM UTC-4, David Marko wrote:
>>>
>>> I'm trying to implement the viewScope variables for web2py controller
>>> methods. Idea behind is to mimic a behaviour of JAVA frameworks like JSF or
>>> Spring that use the concept of viewScope variables. Such variables live
>>> during the all posts to same controller action / to the same form. This is
>>> very handy when one is doing some heavy form actions or wizard actions etc.
>>> that we do all the time in corporate development. Using the viewScope
>>> variable one can avoid using a hidden fields (which using is rather a
>>> security issue as user can easily change the value in browser using dev
>>> tools.)
>>>
>>> Now my idea expressed in code snippet below is to generate UUID value
>>> during the get request (the first request to controller action) and store
>>> it into hidden form field. This hidden UUID is used as a key for cache.ram
>>> value that expresses the viewScope variable. I use Storage() object as a
>>> viewScope object as it is very easy to use. Now everything is working as
>>> expected and during the all posts to same action (all posts of SQLFORM)
>>> the hidden key is available and I can access the the same cach.ram
>>> Storage() object, read and update values and everything is working fine.
>>> What is not fine is fact that cache expire_time is timeout counted from the
>>> first cache object creation time and expires in defined time. What I need
>>> here is to have the expire time but prolonged each time I access the cache
>>> so the expire time reflects users inactivity. Is there a way how to
>>> accomplish this idea using the cache.ram? Also is there anyone who tried
>>> to solve this already? I would appreciate your ideas / comments.
>>>
>>> BTW: Despite the fact that HTTP is not statefull .. the statefull
>>> framework features are very important during corporate development (during
>>> forking with large form that requires many post submits until saved
>>> finaly). I would really appreciate having some statefull ideas implemented
>>> in web2py core. But its completely separate topic.
>>>
>>> (Code below is just a proof of concept more than some final nice code.
>>> :-) )
>>>
>>> class ViewState:
>>>
>>> @staticmethod
>>> def getStateObject(state_id=None):
>>> if state_id==None:
>>> state_id=ViewState.getStateId()
>>> from gluon.storage import Storage
>>> return cache.ram('form_'+state_id, lambda:Storage(), time_expire
>>> =10)
>>>
>>> @staticmethod
>>> def getStateId(state_field='state_id'):
>>> import uuid
>>> return (request.post_vars.state_id or str(uuid.uuid4()))
>>>
>>> def index():
>>> state_id=ViewState.getStateId()
>>> sc=ViewState.getStateObject(state_id)
>>>
>>> form=SQLFORM.factory(
>>> Field('jmeno','string',requires=IS_NOT_EMPTY()),
>>> Field('prijmeni','string'),
>>> hidden=dict(state_id=state_id)
>>> )
>>> ....
>>>
>>>
>>>
>>>
>>>
>>>
--
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.