Created
May 18, 2015 13:23
-
-
Save hondajojo/5d762b801f859fb0d8d6 to your computer and use it in GitHub Desktop.
login-logout-signup by tornado
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
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import os | |
import tornado.httpserver | |
import tornado.ioloop | |
import tornado.options | |
import tornado.web | |
import torndb | |
from tornado.options import define,options | |
import bcrypt | |
import concurrent.futures | |
from tornado import gen | |
import tornado.escape | |
define("port",default=8001,help='run on the given port',type=int) | |
define('mysql_host',default='127.0.0.1:3306',help='db host') | |
define('mysql_database',default='tot',help='db name') | |
define('mysql_user',default='root',help='db user') | |
define('mysql_password',default='1',help='db password') | |
executor = concurrent.futures.ThreadPoolExecutor(2) | |
TEMPLATE_PATH = os.path.join(os.path.dirname(__file__), "templates") | |
STATIC_PATH = os.path.join(os.path.dirname(__file__), "static") | |
class Application(tornado.web.Application): | |
def __init__(self): | |
handlers = [ | |
# (r'/index',loginHandler), | |
(r'/login',LoginHandler), | |
(r'/',HomeHandler), | |
(r'/logout',LogoutHandler), | |
(r'/register',RegisterHandler), | |
] | |
settings = dict( | |
template_path = TEMPLATE_PATH, | |
static_path = STATIC_PATH, | |
debug = True, | |
cookie_secret = 'bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=', | |
login_url = '/login', | |
) | |
tornado.web.Application.__init__(self,handlers,**settings) | |
self.db = torndb.Connection( | |
host = options.mysql_host, | |
database = options.mysql_database, | |
user = options.mysql_user, | |
password = options.mysql_password, | |
) | |
class BaseHandler(tornado.web.RequestHandler): | |
def get_current_user(self): | |
return self.get_secure_cookie('username') | |
class HomeHandler(BaseHandler): | |
@tornado.web.authenticated | |
def get(self): | |
self.render('home.html') | |
class LoginHandler(BaseHandler): | |
def get(self): | |
db = self.application.db | |
#first = db.query('select * from users') | |
#print first | |
self.render('denglu.html',error=None) | |
#class loginHandler(tornado.web.RequestHandler): | |
@gen.coroutine | |
def post(self): | |
name = self.get_argument('username') | |
password = self.get_argument('password') | |
# hashed_password = yield executor.submit( | |
# bcrypt.hashpw, tornado.escape.utf8(self.get_argument("password")), | |
# bcrypt.gensalt()) | |
#email = self.get_argument('email') | |
db =self.application.db | |
check_result = self.check(name,password) | |
#print check_result | |
if isinstance(check_result,dict): | |
hashed_password = yield executor.submit( | |
bcrypt.hashpw, tornado.escape.utf8(password), | |
tornado.escape.utf8(check_result['password'])) | |
if hashed_password == check_result['password']: | |
self.set_secure_cookie('username',name) | |
self.redirect('/') | |
else: | |
self.render('denglu.html',error='密码错误') | |
#self.render('shouye.html') | |
#self.render('index.html') | |
#db.insert("insert into users (username,password) values (%s,%s)",name,passwd) | |
#self.set_secure_cookie('username',self.get_argument('username')) | |
#self.redirect('/') | |
#elif check_result == 2: | |
#self.render('denglu.html',error='密码错误') | |
elif check_result == 3: | |
#db.insert("insert into users (username,password,email) values (%s,%s,%s)",name,passwd,email) | |
#self.render('shouye.html',name=name) | |
self.render('denglu.html',error='用户名不存在') | |
# elif check_result == 4: | |
# self.render('denglu.html',error='请输入用户名') | |
# elif check_result == 3: | |
# self.render('denglu.html',error='用户名不存在') | |
else: | |
self.render('denglu.html',error='请输入完整') | |
#else: | |
#self.write('请输入用户名和密码') | |
#db.execute("insert into users (username,password,email) values (%s,%s,%s)",name,passwd,email) | |
#self.redirect('/') | |
#self.redirect('/') | |
def check(self,name,password): | |
db = self.application.db | |
all = db.query('select * from users') | |
#if name in [i['username'] for i in all] and passwd in [i['password'] for i in all]: | |
if name and password: | |
if name in [i['username'] for i in all ]: | |
sql = 'select * from users where username="%s"' %name | |
db_name = db.get(sql) | |
# if db.get(sql)['password'] == password: | |
# return 1 | |
# else: return 2 | |
return db_name | |
else: return 3 | |
else: return 4 | |
class LogoutHandler(BaseHandler): | |
def get(self): | |
self.clear_cookie('username') | |
self.redirect(self.get_argument('next','/')) | |
class RegisterHandler(BaseHandler): | |
def get(self): | |
self.render('register.html',error=None) | |
@gen.coroutine | |
def post(self): | |
username = self.get_argument('username') | |
password = self.get_argument('password') | |
email = self.get_argument('email') | |
db = self.application.db | |
check_register_result = self.check_register(username,password,email) | |
if check_register_result == 1: | |
hashed_password = yield executor.submit( | |
bcrypt.hashpw,tornado.escape.utf8(password),bcrypt.gensalt() | |
) | |
db.insert("insert into users (username,password,email) values (%s,%s,%s)",username,hashed_password,email) | |
self.set_secure_cookie('username',username) | |
self.redirect('/') | |
elif check_register_result == 2: | |
self.render('register.html',error='该邮箱注册过') | |
elif check_register_result == 3: | |
self.render('register.html',error='用户名已被注册') | |
else: | |
self.render('register.html',error='请输入完整') | |
def check_register(self,username,password,email): | |
db = self.application.db | |
all = db.query('select * from users') | |
if username and password and email: | |
if username not in [i['username'] for i in all ]: #用户名在数据库里没有 | |
if email not in [i['email'] for i in all ]: return 1 #都没有 | |
else: return 2 #邮箱存在,用户名不存在 | |
else: return 3 #用户名在数据库里有,已存在 | |
# elif: | |
# if username and password: return 4 #输入邮箱 | |
# elif username and email: return 5 #输入用户名 | |
# elif password and email: return 6 #输入密码 | |
else: | |
return 4 | |
if __name__ == "__main__": | |
tornado.options.parse_command_line() | |
http_server = tornado.httpserver.HTTPServer(Application()) | |
http_server.listen(options.port) | |
tornado.ioloop.IOLoop.instance().start() |
Please include HTML sir. Thank you!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hey sir!
Can u please include your HTML files in this repository so we can get some more help from this repository?