The _q_resolve() method
Note that the ExtraDirectory class inherits from Resolving (in addition to Directory). The Resolving mixin modifies the _q_traverse() so that, when a component has an attribute name designated by _q_translate(), but the Directory instance does not actually have that attribute, the _q_resolve() method is called to "resolve" the trouble. Typically, the _q_resolve() imports or constructs what should be the value of the designated attribute. The modified _q_translate() sets the attribute value so that the _q_resolve() won't be called again for the same attribute. The _q_resolve() pattern is useful when you want to delay the work of constructing the values for exported attributes.
Forms
You can't get very far writing web applications without writing forms. The root demo includes, at http://localhost:8080/extras/form, a page that demonstrates basic usage of the Form class and widgets defined in the quixote.form package.
$Id: demo.txt 25695 2004-11-30 20:53:44Z dbinger $
这两段没看懂。:(
extras.ptl:
def
_q_resolve(self, component):
#
_q_resolve() is a hook that can be used to import only
#
when it's actually accessed. This can be used to make
#
start-up of your application faster, because it doesn't have
#
to import every single module when it starts running.
if
component
==
'
form
'
:
from
quixote.demo.forms
import
form_demo
return
form_demo
directory.py:
class
Resolving(object):
"""
A mix-in class that provides the _q_resolve() method. _q_resolve()
is called if a component name appears in the _q_exports list but is
not an instance attribute. _q_resolve is expected to return the
component object.
"""
def
_q_resolve(self, name):
return
None
def
_q_translate(self, component):
name
=
super(Resolving, self)._q_translate(component)
if
name
is
not
None
and
not
hasattr(self, name):
obj
=
self._q_resolve(name)
setattr(self, name, obj)
return
name
class Directory的_q_translate:
def
_q_translate(self, component):
"""
(component : string) -> string | None
Translate a path component into a Python identifier. Returning
None signifies that the component does not exist.
"""
if
component
in
self._q_exports:
if
component
==
''
:
return
'
_q_index
'
#
implicit mapping
else
:
return
component
else
:
#
check for an explicit external to internal mapping
for
value
in
self._q_exports:
if
isinstance(value, tuple):
if
value[0]
==
component:
return
value[
1
]
else
:
return
None
本文介绍了Quixote框架中_resolving方法的作用及其实现细节,包括如何通过_q_resolve方法延迟加载组件以加快应用启动速度,并展示了如何使用Form类创建基本网页表单。
188

被折叠的 条评论
为什么被折叠?



