[web2py] Re: Server side validation with ajax but without form

2012-02-02 Thread Chris
Is there an equivalent of of validate_and_update for update_record?

Re: [web2py] Re: Server side validation with ajax but without form

2012-02-02 Thread Bruno Rocha
On Thu, Feb 2, 2012 at 7:59 PM, Chris partyonais...@gmail.com wrote:

 Is there an equivalent of of validate_and_update for update_record?


not yet, but it is was on roadmap, but I forgot to send the patch ( I guess
I have it here somewhere)

Row.validate_and_update_record()

I will try to find, but anyway it can be implemented based in
Table.validate_and_update

-- 

Bruno Rocha
[http://rochacbruno.com.br]


[web2py] Re: Server side validation with ajax but without form

2011-09-09 Thread Anthony
form.accepts(request.vars,session) will create three hidden fields: id, 
_formname and _formkey -- if your jQuery post request doesn't send back 
those hidden fields with matching values, the form will not accept. By 
default, the _formname will be 'foo/[record id]', though you can override 
that by specifying form.accepts(...,formname='yourform'). The _formkey field 
is a one-time token and is only created if you pass session to form.accepts 
(to prevent CSRF attacks and double submission). If you don't want to use 
_formkey, then call form.accepts without session. Otherwise, you'll need to 
pass the _formkey value to the view and have the jQuery post send it back. 
Without session (and the formkey), something like this in the view:

var new_data = {id: '[record id to be updated]', name: 'new foo name', 
_formname: 'fooform'}; 

Alternatively, instead of form.accepts, you could do 
db.foo.validate_and_update(id=record.id,name=request.vars.name).

See http://web2py.com/book/default/chapter/07#Hidden-fields 
and http://web2py.com/book/default/chapter/07#SQLFORM-and-insert/update/delete.

Anthony

On Friday, September 9, 2011 1:01:13 PM UTC-4, GD wrote:

 Hi, 
 given this model: 

 db.define_table('foo', 
 Field('name')) 

 a jquery function in the view: 

 var new_data = {name: 'new foo name'}; 
 $.post( 
 url, 
 new_data, 
 function(result){ 
  // some kind of action upon success 
 }, 
 'json' 
 ); 

 let's say that url is already built in order to take the record id as 
 an argument, 
 so the controller has the following behavior: 

 def update(): 
 record = db.foo(request.args(0))  # this works 
 form = SQLFORM(db.foo, record)  # this works 
 if form.accepts(request.vars, session):  # this is never hit 
 return dict(message='record updated') 
 else: 
 return dict(message='data did not validate')  # this is always 
 hit 

 so the questions are 
 why it doesn't validate? 
 If it is not because any mistake on my side: is this an intended 
 behavior? 
 If it is intended: how is it possible to validate data passed 
 programmatically by a jquery function without human direct input? 

 Thanks