Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.88 KB | None | 0 0
  1. import sqlite3
  2. from flask import Flask, flash, redirect, render_template, request, session, url_for
  3. from flask_session import Session
  4. from passlib.apps import custom_app_context as pwd_context
  5. from tempfile import gettempdir
  6. from sqlalchemy import *
  7.  
  8. from helpers import *
  9.  
  10. from cs50 import SQL
  11.  
  12. # configure application
  13. app = Flask(__name__)
  14.  
  15. # configure CS50 Library to use SQLite database
  16. # db = SQL("sqlite:///signme.db")
  17.  
  18. # configure sqlite3 database
  19. conn = sqlite3.connect('music.sqlite3')
  20. db = conn.cursor()
  21.  
  22. # engine = create_engine('sqlite:///signme.db', echo=True)
  23. # metadata = MetaData(bind=engine)
  24. # users_table = Table('users', metadata, autoload=True)
  25. # events = Table('events', metadata, autoload=True)
  26. # registrants = Table('registrants', metadata, autoload=True)
  27.  
  28. # ensure responses aren't cached
  29. if app.config["DEBUG"]:
  30.     @app.after_request
  31.     def after_request(response):
  32.         response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
  33.         response.headers["Expires"] = 0
  34.         response.headers["Pragma"] = "no-cache"
  35.         return response
  36.  
  37. # configure session to use filesystem (instead of signed cookies)
  38. app.config["SESSION_FILE_DIR"] = gettempdir()
  39. app.config["SESSION_PERMANENT"] = False
  40. app.config["SESSION_TYPE"] = "filesystem"
  41. Session(app)
  42.  
  43. # connect to database
  44. # conn = sqlite3.connect('signme.db', check_same_thread=False)
  45. # db = conn.cursor()
  46.  
  47.  
  48. @app.route("/")
  49. def home():
  50.     if session==[]:
  51.         """User profile page"""
  52.         # select row from users table corresponding to the user
  53.         user = db.execute("SELECT * FROM users WHERE id = :id", id=session["user_id"])
  54.        
  55.         # select events from events table corresponding to the user
  56.         myevents = db.execute("SELECT title FROM events WHERE host = :host", host=session["user_id"])
  57.        
  58.         # select events from registrants table corresponding to the user
  59.         registeredevents = db.execute("SELECT title FROM registrants JOIN events ON events.id = registrants.event_id WHERE user_id=:userid",
  60.         userid=session["user_id"])
  61.        
  62.         return render_template("profile.html", user=user, myevents=myevents, registeredevents=registeredevents)
  63.     else:
  64.         return render_template("home.html")
  65.    
  66.    
  67.  
  68. @app.route("/newevent", methods=["GET", "POST"])
  69. @login_required
  70. def newevent():
  71.     """Create new event."""
  72.    
  73.     # if user reached route via POST
  74.     if request.method == "POST":
  75.    
  76.         # update events table
  77.         event = db.execute("INSERT INTO events (title, host) VALUES (:title, :host)", title=request.form.get("title"),
  78.         host=session["user_id"])
  79.        
  80.         return redirect(url_for("myevent") + event.id)
  81.    
  82.     # else if user reached route via GET
  83.     else:
  84.         return render_template("newevent.html")
  85.        
  86. @app.route("/myevent/<int:event_id>")
  87. @login_required
  88. def myevent(event_id):
  89.     """Show information related to the event."""
  90.    
  91.     registrants = db.execute("SELECT * FROM registrants JOIN users ON users.id = registrants.user_id WHERE event_id=:eventid",
  92.     eventid=event_id)
  93.    
  94.     event = db.execute("SELECT * FROM events WHERE event_id=:eventid", eventid=event_id)
  95.    
  96.     number = len(registrants)
  97.    
  98.     return render_template("myevent.html", registrants=registrants, event=event, number=number)
  99.    
  100.  
  101. @app.route("/login", methods=["GET", "POST"])
  102. def login():
  103.     """Log user in."""
  104.  
  105.     # forget any user_id
  106.     session.clear()
  107.  
  108.     # if user reached route via POST (as by submitting a form via POST)
  109.     if request.method == "POST":
  110.  
  111.         # ensure username was submitted
  112.         if not request.form.get("email"):
  113.             return render_template("error.html", message = "Must provide email")
  114.  
  115.         # ensure password was submitted
  116.         elif not request.form.get("password"):
  117.             return render_template("error.html", message = "Must provide password")
  118.  
  119.         # query database for username
  120.         user = db.execute("SELECT * FROM users WHERE email=:email", email=request.form.get("email"))
  121.  
  122.         # ensure username exists and password is correct
  123.         if user == [] or not pwd_context.verify(request.form.get("password"), user.password):
  124.             return render_template("error.html", message = "Invalid username and/or password")
  125.  
  126.         # remember which user has logged in
  127.         session["user_id"] = user.id
  128.  
  129.         # redirect user to home page
  130.         return redirect(url_for("home"))
  131.  
  132.     # else if user reached route via GET (as by clicking a link or via redirect)
  133.     else:
  134.         return render_template("login.html")
  135.  
  136. @app.route("/logout")
  137. def logout():
  138.     """Log user out."""
  139.  
  140.     # forget any user_id
  141.     session.clear()
  142.  
  143.     # redirect user to login form
  144.     return redirect(url_for("login"))
  145.    
  146.  
  147. @app.route("/register", methods=["GET", "POST"])
  148. def register():
  149.     """Register user."""
  150.    
  151.     # if user reached route via POST
  152.     if request.method == "POST":
  153.        
  154.          # ensure email is not blank
  155.         if not request.form.get("email"):
  156.             return render_template("error.html", message="Must provide email")
  157.        
  158.         # ensure email isn't already taken
  159.         email = db.execute("SELECT * FROM users WHERE email = :email", email=request.form.get("email"))
  160.         if email != []:
  161.             return render_template("error.html", message="Sorry, this email is taken :(")
  162.        
  163.         # ensure password is not blank
  164.         elif not request.form.get("password"):
  165.             return render_template("error.html", message="Must provide password")
  166.        
  167.         # ensure same password entered again
  168.         elif request.form.get("password") != request.form.get("passwordconfirm"):
  169.             return render_template("error.html", message="Passwords must match")
  170.        
  171.         # hash password
  172.         hash = pwd_context.encrypt(request.form.get("password"))
  173.        
  174.        
  175.         # enter new user into users
  176.         # user = db.execute("INSERT INTO users (email, password, first_name, last_name, birthdate, phone, school, major, grad_year,\
  177.         # house) VALUES (:email, :password, :first_name, :last_name, :birthdate, :phone, :school, :major, \
  178.         # :grad_year, :house)", email=request.form.get("email"), password=hash,
  179.         # first_name=request.form.get("first_name"), last_name=request.form.get("last_name"), birthdate=request.form.get("birthdate"),
  180.         # phone=request.form.get("phone"), school=request.form.get("school"), major=request.form.get("major"),
  181.         # grad_year=request.form.get("grad_year"), house=request.form.get("house"))
  182.        
  183.         user = db.execute("INSERT INTO users (email, password, first_name, last_name, birthdate, phone, school, major, grad_year,\
  184.        house) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", request.form.get("email"), hash,
  185.         request.form.get("first_name"), request.form.get("last_name"), request.form.get("birthdate"),
  186.         request.form.get("phone"), request.form.get("school"), request.form.get("major"),
  187.         request.form.get("grad_year"), request.form.get("house"))
  188.        
  189.         conn.commit()
  190.        
  191.         # with engine.begin() as connection:
  192.         #     user = connection.execute(users.insert(), email=request.form.get("email"), password=hash,
  193.         #     first_name=request.form.get("first_name"), last_name=request.form.get("last_name"), birthdate=request.form.get("birthdate"),
  194.         #     phone=request.form.get("phone"), school=request.form.get("school"), major=request.form.get("major"),
  195.         #     grad_year=request.form.get("grad_year"), address=request.form.get("address"), zipcode=request.form.get("zipcode"),
  196.         #     city=request.form.get("city"), state=request.form.get("state"))
  197.        
  198.         #i = users.insert()
  199.         # user = users.insert().execute(email=request.form.get("email"), password=hash,
  200.         # first_name=request.form.get("first_name"), last_name=request.form.get("last_name"), birthdate=request.form.get("birthdate"),
  201.         # phone=request.form.get("phone"), school=request.form.get("school"), major=request.form.get("major"),
  202.         # grad_year=request.form.get("grad_year"), address=request.form.get("address"), zipcode=request.form.get("zipcode"),
  203.         # city=request.form.get("city"), state=request.form.get("state"))
  204.        
  205.        
  206.         # a connectionless way to Insert a user
  207. # ins = users_table.insert()
  208. # result = engine.execute(ins, name="Shinji", age=15, password="nihongo")
  209.  
  210. # # another connectionless Insert
  211. # result = users_table.insert().execute(name="Martha", age=45, password="dingbat")
  212.        
  213.        
  214.         # remember the user who has just registered
  215.         session["user_id"] = user
  216.        
  217.         # redirect user to home page
  218.         return redirect(url_for("home"))
  219.        
  220.     # else if user reached route via GET
  221.     else:
  222.         return render_template("register.html")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement