Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- from cs50 import SQL
- from flask import Flask, flash, redirect, render_template, request, session
- from flask_session import Session
- from werkzeug.security import check_password_hash, generate_password_hash
- from helpers import apology, login_required, lookup, usd
- # Configure application
- app = Flask(__name__)
- # Custom filter
- app.jinja_env.filters["usd"] = usd
- # Configure session to use filesystem (instead of signed cookies)
- app.config["SESSION_PERMANENT"] = False
- app.config["SESSION_TYPE"] = "filesystem"
- Session(app)
- # Configure CS50 Library to use SQLite database
- db = SQL("sqlite:///finance.db")
- # Make sure API key is set
- if not os.environ.get("API_KEY"):
- raise RuntimeError("API_KEY not set")
- @app.after_request
- def after_request(response):
- """Ensure responses aren't cached"""
- response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
- response.headers["Expires"] = 0
- response.headers["Pragma"] = "no-cache"
- return response
- @app.route("/")
- @login_required
- def index():
- """Show portfolio of stocks"""
- return apology("TODO")
- @app.route("/buy", methods=["GET", "POST"])
- @login_required
- def buy():
- """Buy shares of stock"""
- return apology("TODO")
- @app.route("/history")
- @login_required
- def history():
- """Show history of transactions"""
- return apology("TODO")
- @app.route("/login", methods=["GET", "POST"])
- def login():
- """Log user in"""
- # Forget any user_id
- session.clear()
- # User reached route via POST (as by submitting a form via POST)
- if request.method == "POST":
- # Ensure username was submitted
- if not request.form.get("username"):
- return apology("must provide username", 403)
- # Ensure password was submitted
- elif not request.form.get("password"):
- return apology("must provide password", 403)
- # Query database for username
- rows = db.execute("SELECT * FROM users WHERE username = ?", request.form.get("username"))
- # Ensure username exists and password is correct
- if len(rows) != 1 or not check_password_hash(rows[0]["hash"], request.form.get("password")):
- return apology("invalid username and/or password", 403)
- # Remember which user has logged in
- session["user_id"] = rows[0]["id"]
- # Redirect user to home page
- return redirect("/")
- # User reached route via GET (as by clicking a link or via redirect)
- else:
- return render_template("login.html")
- @app.route("/logout")
- def logout():
- """Log user out"""
- # Forget any user_id
- session.clear()
- # Redirect user to login form
- return redirect("/")
- @app.route("/quote", methods=["GET", "POST"])
- @login_required
- def quote():
- """Get stock quote."""
- return apology("TODO")
- @app.route("/register", methods=["GET", "POST"])
- def register():
- """Register user"""
- # Forget any user_id
- session.clear()
- # User registered
- if request.method == "POST":
- username = request.form.get("username")
- password = request.form.get("password")
- conformation = request.form.get("conformation")
- # Make sure username was submitted
- if not username:
- return apology("Please provide a username", 403)
- # Make sure password wass filled in
- elif not password:
- return apology("Please provide a password", 403)
- # Make sure they actually typed in a conformation
- elif not conformation:
- return apology("Please confim your password", 403)
- # Make sure the passwords are equal
- elif password != conformation:
- return apology("Enter passwords that are equal, please", 403)
- # Add everything to the databases
- db.execute("INSERT INTO users(username, hash) VALUES(?, ?)", username, generate_password_hash(password))
- @app.route("/sell", methods=["GET", "POST"])
- @login_required
- def sell():
- """Sell shares of stock"""
- return apology("TODO")
Advertisement
Comments
-
- cs50/web/finance/ $ flask run
- Traceback (most recent call last):
- File "/opt/cs50/lib/flask", line 19, in <module>
- sys.exit(flask.cli.main())
- ^^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 1063, in main
- cli.main()
- File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1055, in main
- rv = self.invoke(ctx)
- ^^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1657, in invoke
- return _process_result(sub_ctx.command.invoke(sub_ctx))
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1404, in invoke
- return ctx.invoke(self.callback, **ctx.params)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/click/core.py", line 760, in invoke
- return __callback(*args, **kwargs)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/click/decorators.py", line 84, in new_func
- return ctx.invoke(f, obj, *args, **kwargs)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/click/core.py", line 760, in invoke
- return __callback(*args, **kwargs)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 911, in run_command
- raise e from None
- File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 897, in run_command
- app = info.load_app()
- ^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 312, in load_app
- app = locate_app(import_name, None, raise_if_not_found=False)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 218, in locate_app
- __import__(module_name)
- File "/workspaces/132350714/cs50/web/finance/app.py", line 26, in <module>
- raise RuntimeError("API_KEY not set")
- RuntimeError: API_KEY not set
Add Comment
Please, Sign In to add comment