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

Popular posts from this blog

Boilerplate Code

Adding Frontend Single Movie Template