Building data-driven web apps with Pyramid and SQLAlchemy Transcripts
Chapter: Client and server-side validation
Lecture: Client-side validation with HTML5

Login or purchase this course to watch this video and the rest of the course contents.
0:00 View models are awesome for validating server-side code
0:03 but me might as well do as much validation as we can
0:07 in the browser before it ever touches our server
0:10 before it ever even leaves the browser
0:11 in the form of a request.
0:13 This won't allow us to entirely skip server-side validation
0:16 cuz people could always turn that kind of stuff off
0:19 use scripts and so on and get around it
0:22 but at least it will give our users
0:23 a slightly better experience.
0:26 So let's go back to our PyPI validation
0:28 version of our demo code
0:31 and let's add some client-side validation.
0:33 First of all, let's just run it and see where we are
0:36 so let's go try to register.
0:38 Now, if I put "abc" here, and I hit Go
0:40 notice you'll see a little flicker
0:42 and then a message comes down here
0:44 and this is actually ridiculously fast, like it's
0:48 if we look at what's happening
0:50 this is in less than a millisecond, pretty incredible.
0:54 That's cuz there's zero milliseconds being timed
0:56 between me and the server, right?
0:58 If we're halfway round the world
1:00 that could be much, much longer.
1:02 Either way, this is going back and hitting my web server.
1:07 It'd be nice if it'd just, as users type, it would say
1:10 "This is valid, this is invalid," and so on.
1:13 So, let's go and change that so as much as possible
1:16 this will validate on the client side
1:18 turns out it's super easy.
1:19 Over here, in Register, we have this form, right?
1:22 Let's go way to the end here, and on this form
1:25 we can come over here and say Your Name
1:28 you know what that is, Required
1:30 we don't even have to set a value
1:32 just put the attribute of Required on them.
1:35 The other thing we did is we set
1:38 the type to be various things.
1:39 Here we set the Type of e-mail to be text
1:41 but we can upgrade it to be of type email
1:45 or number, or things like that.
1:47 Now, if we just save, we can come over here and refresh.
1:50 Let's refresh like this, and if we hit Go
1:54 notice no POST back, and here it says
1:57 "Please fill out this field."
1:59 Okay, so Michael, great, and I hit this.
2:02 Okay, whatever, I don't care.
2:04 It says, "No, no, no, e-mail address."
2:06 C'mon Michael that's michael@talkpython.fm
2:09 yeah, sure give it a password
2:12 and then I'm going to go over here and go
2:14 It does appear that we're missing
2:16 a little validation there, doesn't it
2:19 cuz it let that submit
2:20 but let's also fix that really quick.
2:22 Where do we do validation?
2:24 We saw we do that in our view model
2:29 so we can go to our user_service
2:31 and say, find_user_by_email.
2:35 It doesn't exist, but it will in a second.
2:42 Write that really quick.
2:43 You know what, it's so much like that
2:47 but here we just say, email and that's going to be email.
2:52 We can say that's a string, and what we get back
2:55 an optional of user. Now, let's try one more time.
3:00 Log out and try to register one more time with that.
3:05 Boom, this user already exists, so notice
3:07 if this is missing altogether, it never even goes back
3:11 there's no flicker up here, it never goes there.
3:15 Let's actually load it up fresh.
3:17 Okay, so when I click it, it never goes back
3:20 but if I fill this out and then I hit it
3:22 you'll see it flicker and it falls back
3:24 to the server-side validation cuz the client-side
3:26 we're not really checking.
3:27 We're not going to access the database through java script.
3:29 We're just going to let the server do that
3:31 so there you can see that's going back to the server
3:33 once it passes client-side validation
3:35 so it's not all or nothing on client server
3:38 it's this blend much of the time.