web.py目前并没有对ajax的官方支持. Google Code上只有一个
ajaxweb的项目, 可以暂时用一下.
这段代码肯定是在document ready的事件里了. 由于"$"的关系, 需要把js分离出html.
利用jquey的库, 可以自己很轻松的实现这一个功能.
html:
- <form id="signup" action="/user/add/" method="post">
- <fieldset>
- <legend>请输入您的信息:</legend>
- <p>
- <label for="nickname">昵称:</label><br>
- <input type="text" class="text" name="nickname" id="nickname" maxlength="40">
- <span id="validateUsername"></span>
- </p>
- <p>
- <label for="email">邮件地址:</label><br>
- <input type="text" class="text" name="email" id="email" maxlength="40">
- <span id="validateEmail"></span>
- </p>
- <p>
- <label for="passwd">密码:</label><br>
- <input type="password" class="text" name="passwd" id="passwd" maxlength="40">
- </p>
- <p>
- <input type="submit" value="注册"></input>
- <input type="reset" value="重来"></input>
- </p>
- </fieldset>
- </form>
Js:
- //validate
- var validateUsername = $('#validateUsername');
- $('#nickname').keyup(function () {
- var t = this;
- if (this.value != this.lastValue && this.value != '') {
- if (this.timer) clearTimeout(this.timer);
- //show checking status
- validateUsername.html(
- '检查昵称是否存在...'
- );
- this.timer = setTimeout(function () {
- $.ajax({
- url: '/user/validate/',
- data: 'action=check_nickname&value=' + t.value,
- type: 'post',
- success: function (j) {
- validateUsername.html(j);
- }
- });
- }, 500);
- //end timer
- this.lastValue = this.value;
- }
- });
服务端:
(只是初步的处理了一下)
- class validate:
- def POST(self):
- i = web.input()
- if i.action == 'check_nickname':
- return self.validateName(i.value)
- elif i.action == 'check_email':
- return self.validateEmail(i.value)
- def validateName(self, name):
- return web.config.session.query(user).filter_by(nickname=name).count()
- def validateEmail(self, e):
- if re.match("^.+//@(//[?)[a-zA-Z0-9//-//.]+//.([a-zA-Z]{2,3}|[0-9]{1,3})(//]?)$", e) == None:
- return False
- return web.config.session.query(user).filter_by(email=e).count() == 0