基本的註冊功能有用戶名、密碼和密碼確認,當然郵箱確認和基本信息填寫在高階的時候完善,現在只完成基本功能。在register.html寫如下內容:
{%extends 'main.html'%}
{%block content%}
<p class='text-danger'>註冊用戶名不支持中文</p>
<script src='static/checkpw.js'></script>
<form action='/register' method='post' class='well'>
<div class='form-group'>
<label>用戶名</label>
<input type='text' name='username' class='form-control'/>
</div>
<div class='form-group'>
<label>密碼</label>
<input type='password' name='password' class='form-control'/>
</div>
<div class='form-group'>
<label>確認密碼</label>
<input type='password' name='password2' class='form-control'/>
</div>
<button type='submit' class='btn btn-primary' οnclick='return checkpw()'>註冊</button>
<a href='/'>已有帳號,請直接登錄</a>
</form>
{%end%}
效果圖如下:
下面要完成registerHandler,代碼如下:
class registerHandler(tornado.web.RequestHandler):
def get(self):
self.render('register.html')
def post(self):
name=self.get_argument('username')
pw=self.get_argument('password')
res=check(name)
if res: #用戶名已存在
self.redirect('/register')
else:
insert(name,pw)
self.set_cookie('hackerName',name)
self.redirect('/')
點擊註冊按鈕時,採用post方式發送請求,/register收到這個請求後,首先要查看這個用戶名是否存在,如果存在就不能註冊這個名字了,我的數據庫表格是:
CREATE TABLE user(id integer primary key,name text,pw text,level integer);
check函數如下所示:
def check(name,pw=None):
c.execute('select * from user')
data=c.fetchall()
if not pw: #沒有密碼,則查詢用戶是否存在
for i in data:
if name==i[1]:
return True
return False
else: #存在密碼,則查詢用戶名和密碼是否對應
for i in data:
if name==i[1]:
if pw==i[2]:
return True
else:
return False
return False #都不存在這個用戶
我寫的這個check函數可以完成兩個功能,當沒有密碼參數的時候,只是查詢用戶名是否已存在,是註冊時候使用的;當有密碼參數的時候,查詢用戶名和密碼是否對應,是登錄時候使用的。註冊成功後自動轉到主頁。我設置了名字是“hackerName”的cookie,用來表示用戶的登錄狀態,這個還不是很完善,因爲一旦cookie被別人獲取,就可以免密碼登錄,目前基本實現先這樣,第二輪改進中採用服務端session的方式更安全。
轉載請註明:轉自http://blog.csdn.net/littlethunder/article/details/25533875