Advertisement
Guest User

app.py

a guest
Nov 3rd, 2020
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.72 KB | None | 0 0
  1. from flask import Flask, render_template, request, redirect, flash, url_for
  2. from flask_sqlalchemy import SQLAlchemy
  3. import sqlite3
  4. from covid import covid_obj
  5. import random
  6. from datetime import datetime
  7.  
  8. from werkzeug.security import generate_password_hash, check_password_hash
  9.  
  10. from flask_login import LoginManager, login_required ,UserMixin, login_user, logout_user, current_user
  11. from form import LoginForm  
  12.  
  13.  
  14. app = Flask(__name__)
  15. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
  16. db = SQLAlchemy(app)
  17.  
  18. # Hard coded secret key for development only
  19. app.config['SECRET_KEY'] = "your-secret-key-here"
  20.  
  21. login_manager = LoginManager() # Login manage for flask-login
  22. login_manager.login_view = 'login'
  23. login_manager.init_app(app)
  24.  
  25.  
  26.  
  27.  
  28. # Inherit all necessary methods from UserMixin class
  29. class User(UserMixin, db.Model):
  30.     """Create columns to store our data"""
  31.     id = db.Column(db.Integer, primary_key=True)
  32.     username = db.Column(db.String(60), unique=True, nullable=False)
  33.     password = db.Column(db.String(20), unique=True, nullable=False)
  34.     email = db.Column(db.String(60), unique=True, nullable=False)
  35.  
  36.     def __init__(self, username, password, email):
  37.         self.username = username
  38.         self.password = password
  39.         self.email = email
  40.  
  41.     def verify_password(self, pwd):
  42.         return check_password_hash(self.password, pwd)
  43.  
  44.     def __repr__(self):
  45.         return '<User %r>' % self.username
  46.  
  47.  
  48. class Course(db.Model):
  49.     """Create this course table to store course details"""
  50.  
  51.     id = db.Column(db.Integer,
  52.                     primary_key=True)
  53.     title = db.Column(db.String(120),
  54.                       nullable=False)
  55.     description = db.Column(db.Text,
  56.                             nullable=False)
  57.     price = db.Column(db.Integer,
  58.                       nullable=False)
  59.     duration = db.Column(db.Integer,
  60.                          nullable=False)
  61.     instructor = db.Column(db.String(80),
  62.                            nullable=False)
  63.     date_created = db.Column(db.DateTime(),
  64.                              default=datetime.utcnow)
  65.  
  66.  
  67. @login_manager.user_loader
  68. def load_user(user_id):
  69.  
  70.     return User.query.get(int(user_id))
  71.  
  72.  
  73. # Only test
  74. @app.route('/test')
  75. def home_test():
  76.  
  77.     name = "Son"
  78.     return render_template("home-test.html", name=name)  
  79.  
  80.  
  81. @app.route('/about')
  82. @login_required
  83. def about():
  84.     return render_template("about.html")
  85.  
  86.  
  87. @app.route('/script')
  88. def test_script():
  89.     return render_template("test-script.html")
  90.  
  91.  
  92. @app.route('/covid-table')
  93. def covid_table():
  94.     """Return covid19 data to show in a table"""
  95.  
  96.     covid_data = covid_obj
  97.  
  98.     return render_template("covid-table.html", covid_data=covid_data)
  99.  
  100.  
  101. @app.route('/covid-dashboard')
  102. def covid_dashboard():
  103.     """Return covid19 data to display in a dashboard"""
  104.  
  105.     data = covid_obj
  106.     confirmed_case = data["Confirmed"]
  107.     recovered_case = data["Recovered"]
  108.     hospitalized_case = data["Hospitalized"]
  109.     new_deaths_case = data["NewDeaths"]
  110.     new_confirmed_case = data["NewConfirmed"]
  111.     last_updated = data["UpdateDate"]
  112.  
  113.     return render_template("covid-dashboard.html", confirmed_case=confirmed_case,
  114.                                                     recovered_case=recovered_case,
  115.                                                     hospitalized_case=hospitalized_case,
  116.                                                     new_deaths_case=new_deaths_case,
  117.                                                     new_confirmed_case=new_confirmed_case,
  118.                                                     last_updated=last_updated)
  119.  
  120.  
  121.  
  122. @app.route('/random-menu')
  123. def random_menu():
  124.  
  125.     random_list = ["กะเพราหมู", "ไข่เจียวหมูสับ", "หมูทอดกระเทียม", "ก๋วยเตี๋ยว", "ผัดซีอิ๊ว"]
  126.     menu_data = random.choice(random_list)
  127.  
  128.     return render_template("random-menu.html", menu_data=menu_data)
  129.  
  130.  
  131. @app.route('/create', methods=["GET", "POST"])
  132. @login_required
  133. def create():
  134.     """Create a new course"""
  135.  
  136.     # Check if method that being sent is "POST"
  137.     if request.method == "POST":
  138.  
  139.         # Create variables to get input attributes from form
  140.         title = request.form["title"]
  141.         instructor = request.form["instructor"]
  142.         price = request.form["price"]
  143.         duration = request.form["duration"]
  144.         description = request.form["description"]
  145.  
  146.         # Create an object, then pass variables into the class(Course)
  147.         obj = Course(title=title,
  148.                      instructor=instructor,
  149.                      price=price,
  150.                      duration=duration,
  151.                      description=description)
  152.  
  153.         # Add the object to SQlAlchemy session
  154.         # then submit it into our database
  155.         db.session.add(obj)
  156.         db.session.commit()
  157.  
  158.         # Redirect to home page after submitting form
  159.         return redirect(url_for('home'))
  160.                
  161.     return render_template("create-course.html")
  162.  
  163.  
  164.  
  165. @app.route('/')
  166. def home():
  167.     """Retrieve all courses from the database"""
  168.  
  169.     all_courses = Course.query.all()
  170.  
  171.     return render_template("home.html", all_courses=all_courses)
  172.  
  173.  
  174. @app.route('/post-details/<int:id>')
  175. def post_details(id):
  176.     """Retrieve only one course(by id)"""
  177.  
  178.     single_course = Course.query.get(id)
  179.  
  180.     return render_template("post-details.html", single_course=single_course)
  181.  
  182.  
  183. @app.route('/update/<int:id>', methods=["GET", "POST"])
  184. def update(id):
  185.     """Update an existing post"""
  186.  
  187.     data = Course.query.get(id)
  188.  
  189.     # Check if method that being sent is "POST"
  190.     if request.method == "POST":
  191.  
  192.         # Create variables to get input attributes from form
  193.         title = request.form["title"]
  194.         instructor = request.form["instructor"]
  195.         price = request.form["price"]
  196.         duration = request.form["duration"]
  197.         description = request.form["description"]
  198.  
  199.         data.title = title
  200.         data.instructor = instructor
  201.         data.price = price
  202.         data.duration = duration
  203.         data.description = description
  204.  
  205.         # Submit an updated post into the database
  206.         db.session.commit()
  207.  
  208.         # Redirect to home page after finishing update
  209.         return redirect(url_for('home'))
  210.  
  211.     return render_template('update.html', data=data)
  212.  
  213.  
  214. @app.route('/delete/<int:id>', methods=["GET", "POST"])
  215. def delete(id):
  216.     """Delete a post"""
  217.  
  218.     data = Course.query.get(id)
  219.  
  220.     db.session.delete(data)
  221.     db.session.commit()
  222.  
  223.     return redirect(url_for('home'))
  224.  
  225.  
  226. @app.route('/sign-up', methods=["GET", "POST"])
  227. def sign_up():
  228.     """Sign up user account"""
  229.  
  230.     # Check if method that being sent is "POST"
  231.     if request.method == "POST":
  232.  
  233.         # Create variables to get input attribute values from our form
  234.         username = request.form["username"]
  235.         password = request.form["password"]
  236.         email = request.form["email"]
  237.  
  238.         # Create an object, then pass variables
  239.         # into the User class
  240.         obj = User(username=username,
  241.                    password=generate_password_hash(password, method='sha256'),
  242.                    email=email)
  243.  
  244.         # Add an object to SQLAlchemy session
  245.         # then submit into our database
  246.         db.session.add(obj)
  247.         db.session.commit()
  248.  
  249.         # Redirect to home page after submitting form
  250.         return redirect(url_for('home'))
  251.  
  252.     return render_template('sign-up.html')
  253.  
  254.  
  255. @app.route("/login", methods=["GET", "POST"])
  256. def login():
  257.  
  258.     # Create an object called "form" to use LoginForm class
  259.     form = LoginForm()
  260.     username = form.username.data
  261.     password = form.password.data
  262.  
  263.     # Validate a form submitted by a user
  264.     if form.validate_on_submit():
  265.         user = User.query.filter_by(username=username).first()
  266.        
  267.         # Check and compare a user's password
  268.         # in a database, if True, log a user in
  269.         if user and user.verify_password(password):
  270.  
  271.             # Log a user in after completing verifying a password
  272.             # then flash a message "Successful Login"
  273.             login_user(user)
  274.             flash("Successful Login", "success")
  275.            
  276.             # Redirect to homepage
  277.             return redirect(url_for('home'))
  278.  
  279.         else:
  280.             flash("Invalid Login", "danger")
  281.     else:
  282.         # You can print or return something such as an error message
  283.         # In this case, do nothing. But you can do it later
  284.         pass
  285.  
  286.     return render_template('login.html', form=form)
  287.  
  288.  
  289. @app.route("/logout")
  290. @login_required
  291. def logout():
  292.     logout_user()
  293.     return redirect(url_for('login'))
  294.  
  295.  
  296. if __name__ =="__main__":
  297.     app.run(debug=True)
  298.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement