Adding Crud Functionality to User Database
#models/userdb.py
import os, psycopg2
class Userdb():
def __init__(self):
self.create_table()
def set_conection(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 create_table(self):
self.set_conection()
SQL = '''CREATE TABLE IF NOT EXISTS USERS(
ID SERIAL PRIMARY KEY,
EMAIL VARCHAR(320),
PASSWORD VARCHAR(320),
ROLE TEXT,
CONTENT TEXT,
CATDATE DATE,
CATTIME TIME,
AUTHOR TEXT
)'''
self.cursor.execute(SQL)
self.conn.commit()
self.conn.close()
def insert(self, *user):
self.set_conection()
self.cursor.execute("INSERT INTO USERS (EMAIL, PASSWORD, ROLE, CONTENT, CATDATE, CATTIME, AUTHOR) VALUES %s ", (user,))
self.conn.commit()
self.conn.close()
def select(self, amount=5, id='', page=0):
self.set_conection()
if id:
SQL = "SELECT * FROM USERS WHERE ID=%s"
self.cursor.execute(SQL, (id,))
result = self.cursor.fetchone()
elif page:
SQL = "SELECT * FROM USERS ORDER BY ID DESC OFFSET %s ROWS FETCH NEXT %s ROWS ONLY"
self.cursor.execute(SQL, (amount*page, amount))
result = self.cursor.fetchall()
else:
SQL = "SELECT * FROM USERS ORDER BY ID DESC LIMIT %s"
self.cursor.execute(SQL, (amount,))
result = self.cursor.fetchall()
self.conn.close()
return result
def check_user(self, email):
self.set_conection()
SQL = "SELECT EMAIL, PASSWORD FROM USERS WHERE EMAIL = %s LIMIT 1"
self.cursor.execute(SQL, (email,))
result = self.cursor.fetchone()
self.conn.close()
return result
def check_author(self, email):
self.set_conection()
SQL = "SELECT * FROM USERS WHERE EMAIL = %s LIMIT 1"
self.cursor.execute(SQL, (email,))
result = self.cursor.fetchone()
self.conn.close()
return result
def delete(self, id):
self.set_conection()
SQL = "DELETE FROM USERS WHERE ID = %s"
self.cursor.execute(SQL, (id,))
self.conn.commit()
self.conn.close()
def update(self, *user):
self.set_conection()
sql = "UPDATE USERS SET EMAIL = %s, PASSWORD = %s, ROLE = %s, CONTENT = %s, CATDATE = %s, CATTIME = %s, AUTHOR = %s WHERE ID = %s"
self.cursor.execute(sql, user)
self.conn.commit()
self.conn.close()
<!--templates/dashboard/signup.html-->
{% extends 'dashboard/dashboard.html' %}
{% block head %}
{{ super() }}
<link href="/static/styles/signup.css" rel="stylesheet" >
{% endblock %}
{% block content %}
<form id='signup' action='/dashboard/signup/' method="POST" >
{% if 'user' in data %}
<input id='user-title' value="{{ data['user'][1] }}" name="fuser-title" type="text" placeholder="E-MAIL" required />
<textarea name="fcontent" id="editor" >{{ data['user'][4] }}</textarea>
{% else: %}
<input id='user-title' value="" name="fuser-title" type="text" placeholder="E-MAIL" required />
<textarea name="fcontent" id="editor" ></textarea>
{% endif %}
<div id="bottombar">
<input id="submit" class="bottom-widget" type="submit" value="ចុះផ្សាយ">
{% if 'user' in data %}
<input id="user-password" value="{{ data['user'][2] }}" class="bottom-widget user-time" type="password" name="fpassword" />
{% else %}
<input id="user-password" value="" class="bottom-widget user-time" type="password" name="fpassword" />
{% endif %}
<select id="user-role" class="bottom-widget" name="fuser-role" >
<option>Teacher</option>
<option>Admin</option>
</select>
<input id="user-date" value="{{ data['datetime'][0] }}" class="bottom-widget user-date" type="text" name="fuser-date" required />
<input id="user-time" value="{{ data['datetime'][1] }}" class="bottom-widget user-time" type="text" name="fuser-time" required />
<input disabled type='text' value="{{ session['logged-in'] }}" id="user-author" class="user-time" name="fuser-author" required />
</div>
</form>
<div id="message">{{ data['message'] }}</div>
<script src="/static/scripts/ckeditor/config.js"></script>
{% endblock %}
{% block item_listing %}
<ul id="item-listing" class="item-listing region">
{% if 'users' in data %}
{% for v in range(data['users']|length) %}
<li class="user">
<a class="thumbnail" href="/page/{{ data['users'][v][0] }}">
<img src="{{data['thumbs'][v]}}" />
</a>
<div class='title'>
<a href="/user/{{ data['users'][v][0] }}">{{ data['users'][v][1] }}</a>
<span>{{ data['users'][v][3] }}</span>
</div>
<div class="crud">
<a class="user">{{ data['users'][v][7] }}</a>
<a href='/dashboard/user/delete/{{ data["users"][v][0] }}'><img src="/static/images/delete.png" /></a>
<a href='/dashboard/user/edit/{{ data["users"][v][0] }}'><img src="/static/images/edit.png" /></a>
</div>
</li>
{% endfor %}
{% endif %}
</ul>
<div id="load-more" class="load-more region">
<img onclick="lib.load_items('/dashboard/user/load/', 'users')" src="/static/images/load-more.png" />
</div>
{% endblock %}
GitHub: "https://github.com/Sokhavuth/E-Learning
Heroku: https://khmerweb-elearning.herokuapp.com/

Comments
Post a Comment