thank you Yarko for your always informative answers and for your
natural attitude to understand there are different point of views (I
wish I had someone like you in my company :-).

Just to come close to something I will show an example (though not
particularly smart):

my controller:

form=FORM(INPUT(_name='contact_email',requires=IS_EMAIL(error_message='Wrong
Address')),\
 
INPUT(_name='contact_company',requires=IS_NOT_EMPTY(error_message='Can
not be empty!')))
errors=form.errors
if form.accepts(request.vars,session=None,formname='contacts'):
          redirect(URL(r=request, f='index'))
elif form.errors:
          return dict(errors=form.errors)
return dict(errors=errors)

my view:

<form action='#' id='contacts' method='post'>
<ul><li>
<label for="contact_company" class="fixedwidth">Company</label>
<input type="text" name="contact_company" id="contact_company"/>
{{if errors.contact_company:}}
<span id="error">{{=errors['contact_company']}}</span> {{pass}}
</li>
<li>
<label for="contact_email" class="fixedwidth">E-mail</label>
<input type="text" name="contact_email" id="contact_email"/>
{{if errors.contact_email:}}
<span id="error">{{=errors['contact_email']}}</span> {{pass}}
</li>
<input type="hidden" name="_formname" value="contacts"/>
<li id="submit"><input type="submit" value="Send"/></li>
<li>...other inputs you do not need to validate..</li>
</ul>
 </form>

Well this uses FORM and leaves me free to have HTML the way I like:
but if you want to use FORM and for whatever reason you do not want
SQLFORM you have to go through something like that. My purpose: a
contact form without persistence because I do not need it and because
contacts requests are sent to me by email (or I am on a public hosting
with no db or whatever); I want to use web2py embedded validation; I
want to use HTML because my designer has already coded my web
pages..Though I put down some reasons with no particular care I think
this is, in general, not such a remote choice.

As you said:

>>But ultimately, you need to know "I want to do this - how?  what are my 
>>choices?"
>>Web2py offers you FORM, SQLFORM, and SQLFORM.factory.

My example is poor and maybe it is irrealistic there is not a model
but it works with FORM,

rgds
carlo



On 2 Apr, 16:09, Yarko Tymciurak <resultsinsoftw...@gmail.com> wrote:
> Hello Carlo -
>
> Know, there is no right or wrong - but I am trying to understand...
>
> On Apr 2, 3:38 am, carlo <syseng...@gmail.com> wrote:
>
> > Thank you Yarko for accepting my "challenge" and I am looking forward
> > to get your answer.
>
> > > When I need to do this, I do it with making a memory-based table, and
> > > SQLFORM or SQLFORM.factory, and do whatevervalidationI need.
>
> > I do not want to discuss your solution though personally I do not like
> > any solution based on SQLFORM:
> > - I do not like to have to create a table just to validate my html
> > form server side: so the manual solution "SQLFORM in HTML" is not for
> > me;
>
> Then you can use the FORM pattern, as shown 
> onhttp://www.web2py.com/book/default/section/7/1
>
> I have not used this, so I do not think of it often, but there it is.
>
> > - I do not like the SQLFORM.factory either because this simply shifts
> > the problem and create a "fake" table in the controller;
>
> Of course, you are free to have your preferences.     But in this case
> you state it "shifts the problem" - but I am not sure what "the
> problem" is...
>
> That web2py is push-style mvc, and that the first thing that happens
> on a request is that data context is setup in preparation for a
> response (i.e. models are run, then controller)  it is (by it's
> nature) table centric.   IT is not so structured that it is object
> (e.g. business+engineering logic) centric, but if DAL were replaced by
> an ORM, then you would have your first focus on attention on the
> business-objects (and the persistence would be part of the mechanism
> the ORM would manage).
>
> ...and so on...
>
> My point is that there is always of view of the problem inherent, and
> you pick how you like to look at the problem (i.e. how you are
> comfortable at working)...
>
> > - I do not like Custom Forms particularly because, apart from the fact
> > I find the widgets a little tricky and "magic", they are based on a
> > table as well.
>
> Custom forms are no more than a way to do in forms the equivalent of a
> "join" on data (you can literally do this) and non-persisted items.
> You can almost think of them as SQLFORM.join(FORM)[.join(SQLFORM)]  -
> where the brackets mean optional (in the "man page" sense - nothing
> about python lists).
>
>
>
> > As I said, maybe I am totally wrong with my above thinking and I do
> > not want to criticize anyone but I prefer the "there is only one way
> > to make things" philosophy, which is very pythonic btw, over what I
> > read sometimes in this forum (and the book) "You can do that in
> > thousands of ways" or "It is easy to validate pure html forms" etc etc
> > ( which reminds me of the "Turbogears way" to make things).
>
> Well ... yes, it is nice to have one way to do things; and, of course,
> even in the python language there are several ways to do things
> (oftern as a reaction to some performance issue, or other design
> need / trait).
>
> The real "terrible" thing is when there are multiple ways to do the
> same thing with no discernable reason;
> The good thing is when you have a design goal you are trying to
> accomplish, there is a way to do it (and hopefully it is "natural" to
> how you think of what you are doing - that part really is hard, unless
> you write everything yourself).
>
>
>
> > So I will take that your answer to "What is the best way to keep
> > validation and pure html forms?" is "doing a memory-based table and
> > SQLFORM/SQLFORM.factory"
>
> For complex situations, I find this less "verbose" than writing my own
> FORMs... but you can certainly use FORM()
>
>
>
> > > There is a fundamental "fuzziness" around this:   If you have manual
> > > forms without data persistence, what are you validating?  (and what
> > > can you not do by building up a simpel memory-db model, and validating
> > > transient data against that?)
>
> > your the first question is retoric of course, I can validate
> > everything I want even how many capital letters a user chose for his
> > password.
>
> Well - yes, of course - but my point is that (in your example) the
> password is of little use if it is not in persistent storage somehow.
>
> But perhaps a clear example for what I think you are arguing for might
> be a game action, say a word game, or a student quiz where you really
> are only storing results (perhaps a count of correct, validated
> responses).
>
> > The second is a serious one but, apart from philosofic
> > questions against "persistency at all costs", you pose me the answer
> > later, suppose I fear heavy server load or I have to be spare about
> > server memory resources..
>
> Well, if you are doing a student quiz (for example) then server load
> probably is not an issue; if you are doing an on-line game with tens-
> of-thousands of people simultaneously connected to a gaming context,
> that is a completely different problem.
>
>
>
> > > Second - if it is _really_ transient data that you arevalidation,
> > > then even memory db, per request, could get pretty "heavy" in terms of
> > > server load - why not do client-sidevalidation?
>
> > Of course you can if you have JS enabled.
>
> There are many choices for client side processing - even within the
> constraints of a browser.   You have ActionScript/flash, JavaScript,
> Java, Processing (although at the moment, implementations are in
> either java or javascript), and for HTML5 perhaps more.     A browser
> might not be the solution of choice, for example if you write for a
> mobile environment - you might prefer a client-native app which
> connects with the server.  This may be your choice because of more
> efficient programming use (i.e. better client performance, or less
> battery/bandwidth use), or to give you better control and access to
> device's facilities, i.e.  gps,  motion / positoin sensors, etc.
>
> > So your answer here would be "if your data are really transient go
> > with client side validation".
>
> Sometimes - like I say: it is a design decision, and should be driven
> by needs of the problem, and an appropriate solution selected by
> rational consideration.
>
>
>
> > > Either way, this begs the question:   why exactly this form of
> > > question?
>
> > My answer would have simply been a pure html Contact Form you see in
> > any web site but I now read a Thadeous' post where he gives his form
> > example.
>
> This example is missing something:   consider the boundary condition
> of what you say:   "Form + contact information, on client only" - not
> saved.   My question was:  "What is your purpose?"  --- in this
> example, what use is contact information without persistence?   (Even
> in a game, user-name or player-name is likely stored!).
>
>
>
> > Thank you Yarko for following me in these apparently futile arguments
> > but I would just like that people beginning with Web2py do not have to
> > read, like in many other python frameworks docs, "it is easy to get
> > this thing done" but they can never grasp that "easy way".
>
> IT IS easy - but the hardest part (always) is having a concrete "why"
> behind each of your "I want"s --- a reason for an action / decision
> --- and end goal in mind.   You can explore different ways to do
> things (i.e. performance testing of various built-in web servers) to
> understand more specifically what they offer you;   You can explore
> interfaces to "see" if you like how they look.   But ultimately, you
> need to know "I want to do this - how?  what are my choices?"
>
> Web2py offers you FORM, SQLFORM, and SQLFORM.factory.
>
> Thank you for the discussion.
>
> Kind regards,
> Yarko
>
>
>
> > carlo

-- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.

Reply via email to