#controllers/post.py import config, lib, datetime, uuid from bottle import route, template, request, redirect, response from models import postdb, settingdb, categorydb @route('/post/<id:int>') def post(id): config.reset(settingdb.select()) config.kargs['blogTitle'] = "ទំព័រការផ្សាយ" config.kargs['post'] = postdb.select(1, id) config.kargs['posts'] = postdb.select(config.kargs['frontPagePostLimit']) config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts']) config.kargs['page'] = 1 author = request.get_cookie("logged-in", secret=config.kargs['secretKey']) if author: config.kargs['showEdit'] = True return template('post', data=config.kargs) @route('/posting', method="POST") def posting(): author = request.get_cookie("logged-in", secret=config.kargs['secretKey']) if ((author != "Guest") and postdb.check(author)): title = request.forms.getunicode('fpost-title') if title == "": title = "untitled" postdate = request.forms.getunicode('fpost-date') posttime = request.forms.getunicode('fpost-time') category = request.forms.getunicode('fcategory') content = request.forms.getunicode('fcontent') try: postdate = datetime.datetime.strptime(postdate, "%d-%m-%Y") except ValueError: config.kargs['message'] = 'ទំរង់កាលបរិច្ឆេទមិនត្រឹមត្រូវ!' return template('dashboard/home', data=config.kargs) try: posttime = datetime.datetime.strptime(posttime, "%H:%M:%S") except ValueError: config.kargs['message'] = 'ទំរង់ពេលវេលាមិនត្រឹមត្រូវ!' return template('dashboard/home', data=config.kargs) if 'postId' in config.kargs: id = config.kargs['postId'] postdb.update(title, postdate, posttime, category, content, id) del config.kargs['postId'] else: id = str(uuid.uuid4().int) postdb.insert(id, title, author, postdate, posttime, category, content) redirect('/post/'+str(id)) redirect('/login') @route('/post/delete/<id:int>') def delete(id): author = request.get_cookie("logged-in", secret=config.kargs['secretKey']) if ((author != "Guest") and postdb.check(author)): postdb.delete(id) redirect('/login') @route('/post/edit/<id:int>') def edit(id): author = request.get_cookie("logged-in", secret=config.kargs['secretKey']) if ((author != "Guest") and postdb.check(author)): config.reset(settingdb.select()) config.kargs['blogTitle'] = "ទំព័រកែតំរូវ" config.kargs['posts'] = postdb.select(config.kargs['dashboardPostLimit']) config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts']) config.kargs['categories'] = categorydb.select(amount="all") config.kargs['post'] = postdb.select(1, id) config.kargs['edit'] = True config.kargs['postId'] = id config.kargs['page'] = 1 return template('dashboard/home', data=config.kargs) redirect('/login') @route('/paginate/<place>') def paginate(place): if place == "frontEnd": postLimit = config.kargs['frontPagePostLimit'] elif place == 'home': postLimit = config.kargs['homePagePostLimit'] else: postLimit = config.kargs['dashboardPostLimit'] posts = postdb.select(postLimit, page=config.kargs['page']) def toString(post): post[3] = post[3].strftime('%d-%m-%Y') post[4] = post[4].strftime('%H:%M:%S') if posts: config.kargs['page'] += 1 posts = [list(obj) for obj in posts ] [toString(obj) for obj in posts] thumbs = lib.getPostThumbs(posts) return {'json':posts, 'thumbs':thumbs} else: return {'json':0} @route('/search/<place>', method="POST") def search(place): config.reset(settingdb.select()) query = request.forms.getunicode('fquery') config.kargs['posts'] = postdb.search(query) config.kargs['thumbs'] = lib.getPostThumbs(config.kargs['posts']) config.kargs['blogTitle'] = "ទំព័រស្វែងរក" if place == "backend": return template('dashboard/search', data=config.kargs) else: return template('search', data=config.kargs)
#models/postdb.py import os import psycopg2 def createTable(): if 'DYNO' in os.environ: DATABASE_URL = os.environ['DATABASE_URL'] conn = psycopg2.connect(DATABASE_URL, sslmode='require') cursor = conn.cursor() else: conn = psycopg2.connect( database="postgres", user="postgres", password="sokhavuth", host="localhost", port="5432" ) cursor = conn.cursor() SQL = '''CREATE TABLE IF NOT EXISTS POST( ID TEXT, TITLE TEXT, AUTHOR TEXT, POSTDATE DATE, POSTTIME TIME, CATEGORY TEXT, CONTENT TEXT )''' cursor.execute(SQL) conn.commit() conn.close() def insert(*post): createTable() if 'DYNO' in os.environ: DATABASE_URL = os.environ['DATABASE_URL'] conn = psycopg2.connect(DATABASE_URL, sslmode='require') cursor = conn.cursor() else: conn = psycopg2.connect( database="postgres", user="postgres", password="sokhavuth", host="localhost", port="5432" ) cursor = conn.cursor() cursor.execute("INSERT INTO POST (ID, TITLE, AUTHOR, POSTDATE, POSTTIME, CATEGORY, CONTENT) VALUES %s ", (post,)) conn.commit() conn.close() def select(amount, id=None, page=0): createTable() if 'DYNO' in os.environ: DATABASE_URL = os.environ['DATABASE_URL'] conn = psycopg2.connect(DATABASE_URL, sslmode='require') cursor = conn.cursor() else: conn = psycopg2.connect( database="postgres", user="postgres", password="sokhavuth", host="localhost", port="5432" ) cursor = conn.cursor() if id and (amount == 1): cursor.execute("SELECT * FROM POST WHERE ID = '" + str(id) +"'") elif page: SQL = "SELECT * FROM POST ORDER BY POSTDATE DESC, POSTTIME DESC OFFSET %s ROWS FETCH NEXT %s ROWS ONLY" cursor.execute(SQL, (amount*page, amount)) else: cursor.execute("SELECT * FROM POST ORDER BY POSTDATE DESC, POSTTIME DESC LIMIT " + str(amount)) result = cursor.fetchall() return result def check(username): if 'DYNO' in os.environ: DATABASE_URL = os.environ['DATABASE_URL'] conn = psycopg2.connect(DATABASE_URL, sslmode='require') cursor = conn.cursor() else: conn = psycopg2.connect( database="postgres", user="postgres", password="sokhavuth", host="localhost", port="5432" ) cursor = conn.cursor() cursor.execute("SELECT USERNAME FROM USERS WHERE USERNAME = '"+ username + "' LIMIT 1") result = cursor.fetchone() if result: return True else: return False def delete(id): if 'DYNO' in os.environ: DATABASE_URL = os.environ['DATABASE_URL'] conn = psycopg2.connect(DATABASE_URL, sslmode='require') cursor = conn.cursor() else: conn = psycopg2.connect( database="postgres", user="postgres", password="sokhavuth", host="localhost", port="5432" ) cursor = conn.cursor() cursor.execute("DELETE FROM POST WHERE ID = '" + str(id) + "'") conn.commit() conn.close() def update(*args): if 'DYNO' in os.environ: DATABASE_URL = os.environ['DATABASE_URL'] conn = psycopg2.connect(DATABASE_URL, sslmode='require') cursor = conn.cursor() else: conn = psycopg2.connect( database="postgres", user="postgres", password="sokhavuth", host="localhost", port="5432" ) cursor = conn.cursor() sql = "UPDATE POST SET TITLE = %s, POSTDATE = %s, POSTTIME = %s, CATEGORY = %s, CONTENT = %s WHERE ID = '%s' " cursor.execute(sql, args) conn.commit() conn.close() def search(query): createTable() if 'DYNO' in os.environ: DATABASE_URL = os.environ['DATABASE_URL'] conn = psycopg2.connect(DATABASE_URL, sslmode='require') cursor = conn.cursor() else: conn = psycopg2.connect( database="postgres", user="postgres", password="sokhavuth", host="localhost", port="5432" ) cursor = conn.cursor() sql = "SELECT * from POST WHERE" sql += " TITLE LIKE '%"+query+"%'" sql += " OR CONTENT LIKE '%"+query+"%'" sql += " ORDER BY POSTDATE DESC, POSTTIME DESC LIMIT 12" cursor.execute(sql) result = cursor.fetchall() return result
GitHub: https://github.com/Sokhavuth/kwblog
Heroku: https://khmerweb-kwblog.herokuapp.com/