Created
May 29, 2013 12:30
-
-
Save shiweifu/5669928 to your computer and use it in GitHub Desktop.
注册并显示gravatar 头像
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #coding: utf-8 | |
| #author: shiweifu | |
| import web | |
| from web import form | |
| import urllib, hashlib | |
| #template | |
| register_tmpl_string = """$def with(form) | |
| <h1>Register</h1> | |
| <form method="POST"> | |
| $:form.render() | |
| </form>""" | |
| register_success_tmpl_string = """$def with(username, email, avatar, created_date) | |
| <table border="1" > | |
| <tr> | |
| <th>用户名</th> | |
| <th>邮箱</th> | |
| <th>头像</th> | |
| <th>注册日期</th> | |
| </tr> | |
| <tr> | |
| <td>$:username</td> | |
| <td>$:email</td> | |
| <td><img src="$:avatar"></img></td> | |
| <td>$:created_date</td> | |
| </tr> | |
| </table> | |
| """ | |
| register_tmpl = web.template.Template(register_tmpl_string) | |
| register_success_tmpl = web.template.Template(register_success_tmpl_string) | |
| vpass = form.regexp(r".{6,20}$", 'must be between 6 and 20 characters') | |
| vemail = form.regexp(r".*@.*", "must be a valid email address") | |
| register_form = form.Form( | |
| form.Textbox("username", description="用户名"), | |
| form.Textbox("email", vemail, description="邮箱"), | |
| form.Password("password", vpass, description="密码"), | |
| form.Password("password2", description="重复密码 "), | |
| form.Button("submit", type="submit", description="Register"), | |
| validators = [form.Validator("Passwords did't match", lambda i: i.password == i.password2)] | |
| ) | |
| #################################### global variables #################################### | |
| urls = ( | |
| '/reg', 'register' | |
| ) | |
| app = web.application(urls, globals()) | |
| db = web.database(dbn="sqlite", db="ermiao.db") | |
| SQL_CREATE_TABLE = """CREATE TABLE `ermiao_user` ( | |
| `id` INTEGER PRIMARY KEY AUTOINCREMENT, \ | |
| `username` CHAR(32) NOT NULL, \ | |
| `password` CHAR(20) NOT NULL, \ | |
| `avatar` CHAR(256) NOT NULL, \ | |
| `email` CHAR(64) NOT NULL, \ | |
| `created_time` datetime default current_timestamp)""" | |
| #################################### utils func #################################### | |
| def init(): | |
| try: | |
| db.query(SQL_CREATE_TABLE) | |
| except: | |
| pass | |
| def get_gravater_url(email): | |
| # Set your variables here | |
| default = "http://www.ermiao.com/media/img/avatar.png" | |
| size = 40 | |
| # construct the url | |
| gravatar_url = "http://www.gravatar.com/avatar/" + hashlib.md5(email.lower()).hexdigest() + "?" | |
| gravatar_url += urllib.urlencode({'d':default, 's':str(size)}) | |
| return gravatar_url | |
| def cur_date(format = "%Y-%m-%d %H:%m:%S %p"): | |
| import time | |
| import datetime | |
| return datetime.datetime.now().strftime(format) | |
| def db_insert(tb_name="ermiao_user", values = None): | |
| def q(x): return "(" + x + ")" | |
| if values: | |
| sql_query = 'INSERT INTO '+ tb_name + q(', '.join(values.keys())) + ' VALUES' + q(', '.join('\''+str(_value)+'\'' for _value in values.values())) | |
| db.query(sql_query) | |
| return True | |
| else: | |
| return False | |
| #################################### point #################################### | |
| class register: | |
| def GET(self): | |
| f = register_form() | |
| return register_tmpl(f) | |
| return render.register(f) | |
| def POST(self): | |
| f = register_form() | |
| if not f.validates(): | |
| return register_tmpl(f) | |
| else: | |
| username = f.d.username | |
| password = f.d.password | |
| email = f.d.email | |
| avatar = get_gravater_url(email) | |
| values = dict(username=username, password=password, email=email, avatar=avatar) | |
| db_insert(values=values) | |
| return register_success_tmpl(username, email, avatar, cur_date("%Y-%m-%d")) | |
| def main(): | |
| init() | |
| app.run() | |
| if __name__ == '__main__': | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment