[Zope-DB] Hello!

Philip Kilner phil@xfr.co.uk
Mon, 21 Jul 2003 17:37:45 +0100


This is a cryptographically signed message in MIME format.

--------------ms090701090509060107000706
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hi Charlie,

Charlie Clark wrote:
> First of all, do not ever use an UPDATE or an INSERT directly from ZPT or 
> DTML or any other form for that matter. It is very bad practice and could 
> cause you any kind of problems. Always use a PythonScript to do this for 
> you so you can do your error checking gracefully.
> 

OK - so ZPT calls script, script calls ZSQL Method?

> What you want to do can't be done anyway and has nothing to do with ZPT.
> 

Well, I understand what you're saying - but it's a little dispiriting to 
find that the gulf between DTML and ZPT is getting wider rahther than 
narrower, and that there is in effect an even larger amoubnt of 
"missing" documentation as a result.

<wry grin>

I am documenting my experiences for those that follow...

> This is your form:
> 
> <form name="insert_book" action="insertBook" method="POST">
> <input type="text" name="field_ISBN">
> <br>
> <input type="text" name="field_Title">
> <br>
> <input type="text" name="field_Author">
> <br>
> <input type="text" name="field_BookPrice">
> </form>
> 
> No TALES or METAL required. However, this will fail as insertBook expects a 
> Python dictionary and not an http-request - this is also a security 
> feature, by the way.
> 

Ahh - actually, I'd "understood" that Zope presented the request object 
/as/ a dictionary, and hence expected things to be a little more 
"automatic" than they really are...

> You call an ZSQL-method within Zope like this:
> r = context.selectBook()
> 
> in ZPT this looks like this <span tal:define="r here/selectBook"></span> 
> unless you wish to pass a parameter to the method in which case you have to 
> use Python syntax, ie.
> <span tal:define="r python: here.selectBook(ISBN=1)"></span>
> 

Can I ask why you have designated this "r"?

> Now, back to your form. You need something which processes the name/value 
> pairs which come from browser and the best thing to do this is a Python 
> script.
> 
> ### request = context.REQUEST
> context.insertBook(field_ISBN=request.field_ISBN, 
> field_Title=request.field_Title, field_Author=request.field_Author, 
> field_BookPrice=field_BookPrice)
> return context.thank_you(context, request)
> 
> Now, that's the minimalist version which doesn't do any checking and will 
> present SQL-errors to the user if something is in correct. It's also a 
> little difficult to read.
> 
> I generally loop over the REQUEST.form assigning values to a dictionary 
> which gets passed to the ZSQL-Method after things have been checked.
> 
> book_dict = {}
> for item, value in request.form.items():
> 	book_dict[item] = value
> 
> context.insertBook(book_dict)
> return context.thank_you(context, request)
> 
> Hope that helps.
> 

I /think/ so - I'll come back to you after I have plodded through 
it...<smile>

Thanks!

-- 

Regards,

PhilK

Email: phil@xfr.co.uk / Voicemail & Facsimile: 07092 070518

"As we enjoy great advantages from inventions of others,
we should be glad of an opportunity to serve others by
any invention of ours; and this we should do freely and
generously." - Benjamin Franklin


--------------ms090701090509060107000706
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

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
AwIHMA0GCCqGSIb3DQMCAgEoMIGrBgkrBgEEAYI3EAQxgZ0wgZowgZIxCzAJBgNVBAYTAlpB
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEPMA0GA1UEChMG
VGhhd3RlMR0wGwYDVQQLExRDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEoMCYGA1UEAxMfUGVyc29u
YWwgRnJlZW1haWwgUlNBIDIwMDAuOC4zMAIDCihRMIGtBgsqhkiG9w0BCRACCzGBnaCBmjCB
kjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBU
b3duMQ8wDQYDVQQKEwZUaGF3dGUxHTAbBgNVBAsTFENlcnRpZmljYXRlIFNlcnZpY2VzMSgw
JgYDVQQDEx9QZXJzb25hbCBGcmVlbWFpbCBSU0EgMjAwMC44LjMwAgMKKFEwDQYJKoZIhvcN
AQEBBQAEggEA5nFTi/v76bDLV091xvd8m/4AlHmIum4/IGce2DKPdDks05L1JX9Uq3y/xbi3
jk6zTMeK/jmTHxHe8KHRluO1caAysjcr8Fl/DJLzy4O5GuJVwpN43bz8Oxh/4m74nA4mP7sA
ACYyS3tNbd7+mekvno9Fd7HTSXTav3us+c7q4OiVRla39Yx3WiEYOQyjiN140cmxaOAyJzYF
4DZF12KUEwH/xTKLF+A5AagztRTikp7qjZC2Ghb09lf/PEtnDhgR/NYTHo345ZRA6VaD36Xq
p9Wz4SCedDPRgBbRP0eqPcFXL4ydp66q9+3XThXqxTRvX/VLO7i4oDQ++H5LSq0K7wAAAAAA
AA==
--------------ms090701090509060107000706--