Flask API endpoints for users and reports












0














I made a FLASK project with API endpoints. I'm using flask-restful, flask-jwt-extended and postgresql.



enter image description here



You can see the full code on my github repo



The README has further instructions.



For now, as a sample, I'll post the code relevant to that handles the database connection:



database.py



import os
import psycopg2
from flask import current_app
from werkzeug.security import generate_password_hash


class DBModel:
def __init__(self):
with current_app.app_context():
self.connect = psycopg2.connect(current_app.config['DB_URL'])
self.cursor = self.connect.cursor()

def create_tables(self):
queries = [
"""CREATE TABLE IF NOT EXISTS users (
id serial NOT NULL UNIQUE,
isadmin boolean NOT NULL,
firstname varchar(255) NOT NULL,
lastname varchar(255) NOT NULL,
email text NOT NULL UNIQUE,
phonenumber text NOT NULL UNIQUE,
username varchar(255) NOT NULL PRIMARY KEY UNIQUE,
password text NOT NULL,
registered timestamp with time zone DEFAULT (now())
)""",
"""CREATE TABLE IF NOT EXISTS reports (
id serial NOT NULL PRIMARY KEY UNIQUE,
reporter varchar(255) NOT NULL,
type text NOT NULL,
location text NOT NULL,
comment text NOT NULL,
status text NOT NULL,
created timestamp with time zone DEFAULT (now()),
FOREIGN KEY(reporter) REFERENCES users(username)
)"""
]
for query in queries:
self.cursor.execute(query)
self.connect.commit()

def clear_database(self):
tables = ["users", "reports"]
for table in tables:
self.cursor.execute(
"DROP TABLE IF EXISTS {} cascade;".format(
table
)
)
self.connect.commit()

def create_user(self, new_user):
self.cursor.execute("""
INSERT INTO users (
isadmin, firstname, lastname, email,
phonenumber, username, password
) VALUES(%s, %s, %s, %s, %s, %s, %s) RETURNING username;""", (
new_user['isadmin'], new_user['firstname'],
new_user['lastname'], new_user['email'],
new_user['phonenumber'], new_user['username'],
new_user['password']
)
)
self.connect.commit()

def get_specific_from_table(self, table, table_key, table_value):
self.cursor.execute(
"SELECT * FROM {} WHERE {}='{}'".format(
table, table_key, table_value
)
)

def check_admin_existence(self):
self.cursor.execute("SELECT * FROM users WHERE username='liukang';")
return self.cursor.fetchone()

def create_admin(self):
admin = self.check_admin_existence()
if not admin:
new_admin = {
"isadmin": True,
"firstname": "Liu",
"lastname": "Kang",
"email": "liukang@gmail.com",
"phonenumber": "+2542345678901",
"username": "liukang",
"password": generate_password_hash("liukang")
}
self.create_user(new_admin)








share







New contributor




Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    0














    I made a FLASK project with API endpoints. I'm using flask-restful, flask-jwt-extended and postgresql.



    enter image description here



    You can see the full code on my github repo



    The README has further instructions.



    For now, as a sample, I'll post the code relevant to that handles the database connection:



    database.py



    import os
    import psycopg2
    from flask import current_app
    from werkzeug.security import generate_password_hash


    class DBModel:
    def __init__(self):
    with current_app.app_context():
    self.connect = psycopg2.connect(current_app.config['DB_URL'])
    self.cursor = self.connect.cursor()

    def create_tables(self):
    queries = [
    """CREATE TABLE IF NOT EXISTS users (
    id serial NOT NULL UNIQUE,
    isadmin boolean NOT NULL,
    firstname varchar(255) NOT NULL,
    lastname varchar(255) NOT NULL,
    email text NOT NULL UNIQUE,
    phonenumber text NOT NULL UNIQUE,
    username varchar(255) NOT NULL PRIMARY KEY UNIQUE,
    password text NOT NULL,
    registered timestamp with time zone DEFAULT (now())
    )""",
    """CREATE TABLE IF NOT EXISTS reports (
    id serial NOT NULL PRIMARY KEY UNIQUE,
    reporter varchar(255) NOT NULL,
    type text NOT NULL,
    location text NOT NULL,
    comment text NOT NULL,
    status text NOT NULL,
    created timestamp with time zone DEFAULT (now()),
    FOREIGN KEY(reporter) REFERENCES users(username)
    )"""
    ]
    for query in queries:
    self.cursor.execute(query)
    self.connect.commit()

    def clear_database(self):
    tables = ["users", "reports"]
    for table in tables:
    self.cursor.execute(
    "DROP TABLE IF EXISTS {} cascade;".format(
    table
    )
    )
    self.connect.commit()

    def create_user(self, new_user):
    self.cursor.execute("""
    INSERT INTO users (
    isadmin, firstname, lastname, email,
    phonenumber, username, password
    ) VALUES(%s, %s, %s, %s, %s, %s, %s) RETURNING username;""", (
    new_user['isadmin'], new_user['firstname'],
    new_user['lastname'], new_user['email'],
    new_user['phonenumber'], new_user['username'],
    new_user['password']
    )
    )
    self.connect.commit()

    def get_specific_from_table(self, table, table_key, table_value):
    self.cursor.execute(
    "SELECT * FROM {} WHERE {}='{}'".format(
    table, table_key, table_value
    )
    )

    def check_admin_existence(self):
    self.cursor.execute("SELECT * FROM users WHERE username='liukang';")
    return self.cursor.fetchone()

    def create_admin(self):
    admin = self.check_admin_existence()
    if not admin:
    new_admin = {
    "isadmin": True,
    "firstname": "Liu",
    "lastname": "Kang",
    "email": "liukang@gmail.com",
    "phonenumber": "+2542345678901",
    "username": "liukang",
    "password": generate_password_hash("liukang")
    }
    self.create_user(new_admin)








    share







    New contributor




    Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      0












      0








      0







      I made a FLASK project with API endpoints. I'm using flask-restful, flask-jwt-extended and postgresql.



      enter image description here



      You can see the full code on my github repo



      The README has further instructions.



      For now, as a sample, I'll post the code relevant to that handles the database connection:



      database.py



      import os
      import psycopg2
      from flask import current_app
      from werkzeug.security import generate_password_hash


      class DBModel:
      def __init__(self):
      with current_app.app_context():
      self.connect = psycopg2.connect(current_app.config['DB_URL'])
      self.cursor = self.connect.cursor()

      def create_tables(self):
      queries = [
      """CREATE TABLE IF NOT EXISTS users (
      id serial NOT NULL UNIQUE,
      isadmin boolean NOT NULL,
      firstname varchar(255) NOT NULL,
      lastname varchar(255) NOT NULL,
      email text NOT NULL UNIQUE,
      phonenumber text NOT NULL UNIQUE,
      username varchar(255) NOT NULL PRIMARY KEY UNIQUE,
      password text NOT NULL,
      registered timestamp with time zone DEFAULT (now())
      )""",
      """CREATE TABLE IF NOT EXISTS reports (
      id serial NOT NULL PRIMARY KEY UNIQUE,
      reporter varchar(255) NOT NULL,
      type text NOT NULL,
      location text NOT NULL,
      comment text NOT NULL,
      status text NOT NULL,
      created timestamp with time zone DEFAULT (now()),
      FOREIGN KEY(reporter) REFERENCES users(username)
      )"""
      ]
      for query in queries:
      self.cursor.execute(query)
      self.connect.commit()

      def clear_database(self):
      tables = ["users", "reports"]
      for table in tables:
      self.cursor.execute(
      "DROP TABLE IF EXISTS {} cascade;".format(
      table
      )
      )
      self.connect.commit()

      def create_user(self, new_user):
      self.cursor.execute("""
      INSERT INTO users (
      isadmin, firstname, lastname, email,
      phonenumber, username, password
      ) VALUES(%s, %s, %s, %s, %s, %s, %s) RETURNING username;""", (
      new_user['isadmin'], new_user['firstname'],
      new_user['lastname'], new_user['email'],
      new_user['phonenumber'], new_user['username'],
      new_user['password']
      )
      )
      self.connect.commit()

      def get_specific_from_table(self, table, table_key, table_value):
      self.cursor.execute(
      "SELECT * FROM {} WHERE {}='{}'".format(
      table, table_key, table_value
      )
      )

      def check_admin_existence(self):
      self.cursor.execute("SELECT * FROM users WHERE username='liukang';")
      return self.cursor.fetchone()

      def create_admin(self):
      admin = self.check_admin_existence()
      if not admin:
      new_admin = {
      "isadmin": True,
      "firstname": "Liu",
      "lastname": "Kang",
      "email": "liukang@gmail.com",
      "phonenumber": "+2542345678901",
      "username": "liukang",
      "password": generate_password_hash("liukang")
      }
      self.create_user(new_admin)








      share







      New contributor




      Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      I made a FLASK project with API endpoints. I'm using flask-restful, flask-jwt-extended and postgresql.



      enter image description here



      You can see the full code on my github repo



      The README has further instructions.



      For now, as a sample, I'll post the code relevant to that handles the database connection:



      database.py



      import os
      import psycopg2
      from flask import current_app
      from werkzeug.security import generate_password_hash


      class DBModel:
      def __init__(self):
      with current_app.app_context():
      self.connect = psycopg2.connect(current_app.config['DB_URL'])
      self.cursor = self.connect.cursor()

      def create_tables(self):
      queries = [
      """CREATE TABLE IF NOT EXISTS users (
      id serial NOT NULL UNIQUE,
      isadmin boolean NOT NULL,
      firstname varchar(255) NOT NULL,
      lastname varchar(255) NOT NULL,
      email text NOT NULL UNIQUE,
      phonenumber text NOT NULL UNIQUE,
      username varchar(255) NOT NULL PRIMARY KEY UNIQUE,
      password text NOT NULL,
      registered timestamp with time zone DEFAULT (now())
      )""",
      """CREATE TABLE IF NOT EXISTS reports (
      id serial NOT NULL PRIMARY KEY UNIQUE,
      reporter varchar(255) NOT NULL,
      type text NOT NULL,
      location text NOT NULL,
      comment text NOT NULL,
      status text NOT NULL,
      created timestamp with time zone DEFAULT (now()),
      FOREIGN KEY(reporter) REFERENCES users(username)
      )"""
      ]
      for query in queries:
      self.cursor.execute(query)
      self.connect.commit()

      def clear_database(self):
      tables = ["users", "reports"]
      for table in tables:
      self.cursor.execute(
      "DROP TABLE IF EXISTS {} cascade;".format(
      table
      )
      )
      self.connect.commit()

      def create_user(self, new_user):
      self.cursor.execute("""
      INSERT INTO users (
      isadmin, firstname, lastname, email,
      phonenumber, username, password
      ) VALUES(%s, %s, %s, %s, %s, %s, %s) RETURNING username;""", (
      new_user['isadmin'], new_user['firstname'],
      new_user['lastname'], new_user['email'],
      new_user['phonenumber'], new_user['username'],
      new_user['password']
      )
      )
      self.connect.commit()

      def get_specific_from_table(self, table, table_key, table_value):
      self.cursor.execute(
      "SELECT * FROM {} WHERE {}='{}'".format(
      table, table_key, table_value
      )
      )

      def check_admin_existence(self):
      self.cursor.execute("SELECT * FROM users WHERE username='liukang';")
      return self.cursor.fetchone()

      def create_admin(self):
      admin = self.check_admin_existence()
      if not admin:
      new_admin = {
      "isadmin": True,
      "firstname": "Liu",
      "lastname": "Kang",
      "email": "liukang@gmail.com",
      "phonenumber": "+2542345678901",
      "username": "liukang",
      "password": generate_password_hash("liukang")
      }
      self.create_user(new_admin)






      python postgresql flask





      share







      New contributor




      Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share







      New contributor




      Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share



      share






      New contributor




      Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 8 mins ago









      Edward Njoroge

      1




      1




      New contributor




      Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Edward Njoroge is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          Edward Njoroge is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210857%2fflask-api-endpoints-for-users-and-reports%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          Edward Njoroge is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          Edward Njoroge is a new contributor. Be nice, and check out our Code of Conduct.













          Edward Njoroge is a new contributor. Be nice, and check out our Code of Conduct.












          Edward Njoroge is a new contributor. Be nice, and check out our Code of Conduct.
















          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210857%2fflask-api-endpoints-for-users-and-reports%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Quarter-circle Tiles

          build a pushdown automaton that recognizes the reverse language of a given pushdown automaton?

          Mont Emei