【從0開始Tornado建站】註冊

        基本的註冊功能有用戶名、密碼和密碼確認,當然郵箱確認和基本信息填寫在高階的時候完善,現在只完成基本功能。在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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章