#controllers/login.py
import config
from bottle import Bottle, template, request, response, redirect
from verify_email import verify_email
from models.userdb import Userdb
userdb = Userdb()
class Login(Bottle):
def __init__(self):
super().__init__()
self.get('/', callback=self.index)
self.get('/user', callback=self.getUser)
self.post('/user', callback=self.postUser)
self.get('/logout', callback=self.logout)
def index(self):
config.kdict['blogTitle'] = "ចុះឈ្មោះ"
return template('login', data=config.kdict)
def postUser(self):
username = request.forms.getunicode('fusername')
password = request.forms.getunicode('fpassword')
email = request.forms.getunicode('femail')
checkEmail = verify_email(email)
if checkEmail and username and password:
result = userdb.checkUser(username, password, email)
if result:
config.kdict['user'] = result
redirect('/')
else:
result = userdb.checkUsername(username)
if not result:
userdb.insert(username, password, email, 1, False)
result = userdb.checkUser(username, password, email)
config.kdict['user'] = result
redirect('/')
else:
config.kdict['message'] = 'ឈ្មោះអ្នកប្រើប្រាស់នេះត្រូវបានគេប្រើរួចហើយ។'
redirect('/login')
else:
if not checkEmail:
config.kdict['message'] = 'Email របស់លោកអ្នកមិនត្រឹមត្រូវទេ។'
redirect('/login')
elif not (username or password):
config.kdict['message'] = 'ត្រូវមានឈ្មោះអ្នកប្រើប្រាស់និងពាក្យសំងាត់។'
redirect('/login')
def getUser(self):
return 'get user'
def logout(self):
config.kdict['user'] = ('ភ្ញៀវ', 'អត់មាន', 1)
redirect('/')
#models/userdb.py
import os, psycopg2
class Userdb():
def __init__(self):
self.createTable()
def setConection(self):
if 'DYNO' in os.environ:
DATABASE_URL = os.environ['DATABASE_URL']
self.conn = psycopg2.connect(DATABASE_URL, sslmode='require')
self.cursor = self.conn.cursor()
else:
self.conn = psycopg2.connect(
database="postgres",
user="postgres",
password="sokhavuth",
host="localhost",
port="5432"
)
self.cursor = self.conn.cursor()
def createTable(self):
self.setConection()
SQL = '''CREATE TABLE IF NOT EXISTS TYPERS(
ID SERIAL PRIMARY KEY,
USERNAME TEXT,
PASSWORD VARCHAR(320),
EMAIL VARCHAR(320),
GRADE INT,
GRADUATED BOOLEAN NOT NULL
)'''
self.cursor.execute(SQL)
self.conn.close()
def insert(self, *user):
self.setConection()
self.cursor.execute("INSERT INTO TYPERS (USERNAME, PASSWORD, EMAIL, GRADE, GRADUATED) VALUES %s ", (user,))
self.conn.commit()
self.conn.close()
def checkUser(self, *user):
self.setConection()
SQL = "SELECT USERNAME, PASSWORD, GRADE FROM TYPERS WHERE USERNAME = %s AND PASSWORD = %s AND EMAIL = %s LIMIT 1"
self.cursor.execute(SQL, user)
result = self.cursor.fetchone()
self.conn.close()
return result
def checkUsername(self, username):
self.setConection()
SQL = "SELECT USERNAME FROM TYPERS WHERE USERNAME = %s LIMIT 1"
self.cursor.execute(SQL, (username,))
result = self.cursor.fetchone()
self.conn.close()
return result
<!--views/login.tpl-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>{{data['blogTitle']}}</title>
<script src="/static/scripts/jQuery.js"></script>
<script src="/static/scripts/login.js"></script>
<link href="/static/styles/login.css" rel="stylesheet"></link>
<link href="/static/images/site_logo.png" rel="icon" ></link>
<link href="/static/fonts/setup.css" rel="stylesheet"></link>
</head>
<body>
<div id="site">
<form id="login" action='/login/user' method='post'>
<div id='info'>ទំរង់បែបបទចុះឈ្មោះ</div>
<div class="wrapper">
<a></a><div style='text-align:center;'><dv class='message'>{{data['message']}}</dv></div>
%data['message'] = ''
<a>អ្នកប្រើប្រាស់ៈ</a><input class='username' type='text' name='fusername' required />
<a>ពាក្យសំងាត់ៈ</a><input class='password' type='password' name='fpassword' required />
<a>Email:</a><input type="email" name="femail" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$" required />
<a></a><input type='submit' value='បញ្ជូន' />
</div>
</form>
</div><!--sites-->
</body>
</html>
GitHub: https://khmerweb-typing.herokuapp.com
Heroku: https://khmerweb-typing.herokuapp.com/














