I hope the following helps explain the separation for an MVC design I described earlier. It's really just off the top of my head, so please forgive any minor errors/typos. The general structure is the idea I'm trying to get across.
I have used a structure very similar to the code below, with good results. I know it's not the only way to do things, but it has served me well. --John my_servlet.py -------------- # my_servlet.py could also be a psp page, I'm sure, but since I don't really have any experience with psp... from WebKit.Page import Page from some.other.place import MyGenericAPI # a facade class that offers a static API for business logic class my_servlet(Page): # preAction and postAction are changed to ensure that actions don't write anything out to the screen (they just set state for writeHTML()) def preAction(self,name): pass def postAction(self): self.writeHTML() def actions(self): return Page.actions() + ['login'] def login(self): login_id = self.request().fields().get('login_id','').strip() passwd = self.request().fields().get('login_pw','').strip() api = MyGenericAPI() # this could be implemented in some site page as an attribute of the class good_login,err_msg = api.VerifyLogin(login_id,passwd) if good_login is True: # use sendRedirectAndEnd so that we won't call writeHTML again self.response().sendRedirectAndEnd('the_next_page_after_login.py') else: self.displayMessage = err_msg # this could be more elegant, but this is an example, right? # this action will now fall out to writeHTML def writeContent(self): # best way: #render_template_for_this_page(self.displayMessage,blah,blah,whatever) # slightly more straightforward but harder to maintain way: # (I've left out the css niceties, etc) wl = self.writeln if self.displayMessage != "": wl('Error: %s' % self.displayMessage) wl('<form action="my_servlet.py" method="post">') wl('Login ID:<input type="text" name="login_id" />') wl('Password:<input type="password" name="login_pw" />') wl('<input type="submit" name="_action_login" value="Log Me In!" />') wl('</form>') some.other.place.py -------------------- import login_mod class MyGenericAPI(object): # the implementation of these functions may change, but the functions themselves should not change much (if ever) def VerifyLogin(self,login_id,pw): return login_mod.verify(login_id,pw) login_mod.py ------------- import storage_mod class login_class(object): user_id = None passwd = None def load(which): return storage_mod.load(which) def save(which,where): storage_mod.save(which,where) def verify(some_id,some_pw): login_class_instance = storage_mod.load(some_id) if login_class_instance.passwd == some_hash(some_pw): return true else: return false storage_mod.py --------------- # whatever storage method you are using, but basically, this is a common gateway for all storage stuff (like MyGenericAPI above) import magic def load(request): return magic.sprinkles(request) def save(which,where): magic.pixie_dust(which,where) maker joe wrote: > hi john, > can i have a simple CRUD code example to see how it looks like ? > kind regards > makerjoe ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Webware-discuss mailing list Webware-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/webware-discuss