Skip to content

Instantly share code, notes, and snippets.

@shiweifu
Created May 29, 2013 12:30
Show Gist options
  • Select an option

  • Save shiweifu/5669928 to your computer and use it in GitHub Desktop.

Select an option

Save shiweifu/5669928 to your computer and use it in GitHub Desktop.
注册并显示gravatar 头像
#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