Guest User

app.py + traceback

a guest
Aug 14th, 2023
154
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.08 KB | None | 0 0
  1. import os
  2.  
  3. from cs50 import SQL
  4. from flask import Flask, flash, redirect, render_template, request, session
  5. from flask_session import Session
  6. from werkzeug.security import check_password_hash, generate_password_hash
  7.  
  8. from helpers import apology, login_required, lookup, usd
  9.  
  10. # Configure application
  11. app = Flask(__name__)
  12.  
  13. # Custom filter
  14. app.jinja_env.filters["usd"] = usd
  15.  
  16. # Configure session to use filesystem (instead of signed cookies)
  17. app.config["SESSION_PERMANENT"] = False
  18. app.config["SESSION_TYPE"] = "filesystem"
  19. Session(app)
  20.  
  21. # Configure CS50 Library to use SQLite database
  22. db = SQL("sqlite:///finance.db")
  23.  
  24. # Make sure API key is set
  25. if not os.environ.get("API_KEY"):
  26.     raise RuntimeError("API_KEY not set")
  27.  
  28. @app.after_request
  29. def after_request(response):
  30.     """Ensure responses aren't cached"""
  31.     response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
  32.     response.headers["Expires"] = 0
  33.     response.headers["Pragma"] = "no-cache"
  34.     return response
  35.  
  36.  
  37. @app.route("/")
  38. @login_required
  39. def index():
  40.     """Show portfolio of stocks"""
  41.     return apology("TODO")
  42.  
  43.  
  44. @app.route("/buy", methods=["GET", "POST"])
  45. @login_required
  46. def buy():
  47.     """Buy shares of stock"""
  48.     return apology("TODO")
  49.  
  50.  
  51. @app.route("/history")
  52. @login_required
  53. def history():
  54.     """Show history of transactions"""
  55.     return apology("TODO")
  56.  
  57.  
  58. @app.route("/login", methods=["GET", "POST"])
  59. def login():
  60.     """Log user in"""
  61.  
  62.     # Forget any user_id
  63.     session.clear()
  64.  
  65.     # User reached route via POST (as by submitting a form via POST)
  66.     if request.method == "POST":
  67.  
  68.         # Ensure username was submitted
  69.         if not request.form.get("username"):
  70.             return apology("must provide username", 403)
  71.  
  72.         # Ensure password was submitted
  73.         elif not request.form.get("password"):
  74.             return apology("must provide password", 403)
  75.  
  76.         # Query database for username
  77.         rows = db.execute("SELECT * FROM users WHERE username = ?", request.form.get("username"))
  78.  
  79.         # Ensure username exists and password is correct
  80.         if len(rows) != 1 or not check_password_hash(rows[0]["hash"], request.form.get("password")):
  81.             return apology("invalid username and/or password", 403)
  82.  
  83.         # Remember which user has logged in
  84.         session["user_id"] = rows[0]["id"]
  85.  
  86.         # Redirect user to home page
  87.         return redirect("/")
  88.  
  89.     # User reached route via GET (as by clicking a link or via redirect)
  90.     else:
  91.         return render_template("login.html")
  92.  
  93.  
  94. @app.route("/logout")
  95. def logout():
  96.     """Log user out"""
  97.  
  98.     # Forget any user_id
  99.     session.clear()
  100.  
  101.     # Redirect user to login form
  102.     return redirect("/")
  103.  
  104.  
  105. @app.route("/quote", methods=["GET", "POST"])
  106. @login_required
  107. def quote():
  108.     """Get stock quote."""
  109.     return apology("TODO")
  110.  
  111.  
  112. @app.route("/register", methods=["GET", "POST"])
  113. def register():
  114.     """Register user"""
  115.  
  116.     # Forget any user_id
  117.     session.clear()
  118.  
  119.     # User registered
  120.     if request.method == "POST":
  121.  
  122.         username = request.form.get("username")
  123.         password = request.form.get("password")
  124.         conformation = request.form.get("conformation")
  125.  
  126.         # Make sure username was submitted
  127.         if not username:
  128.             return apology("Please provide a username", 403)
  129.  
  130.         # Make sure password wass filled in
  131.         elif not password:
  132.             return apology("Please provide a password", 403)
  133.  
  134.         # Make sure they actually typed in a conformation
  135.         elif not conformation:
  136.             return apology("Please confim your password", 403)
  137.  
  138.         # Make sure the passwords are equal
  139.         elif password != conformation:
  140.             return apology("Enter passwords that are equal, please", 403)
  141.  
  142.         # Add everything to the databases
  143.         db.execute("INSERT INTO users(username, hash) VALUES(?, ?)", username, generate_password_hash(password))
  144.  
  145.  
  146. @app.route("/sell", methods=["GET", "POST"])
  147. @login_required
  148. def sell():
  149.     """Sell shares of stock"""
  150.     return apology("TODO")
Advertisement
Comments
  • toortelboomf
    1 year
    1. cs50/web/finance/ $ flask run
    2. Traceback (most recent call last):
    3.   File "/opt/cs50/lib/flask", line 19, in <module>
    4.     sys.exit(flask.cli.main())
    5.              ^^^^^^^^^^^^^^^^
    6.   File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 1063, in main
    7.     cli.main()
    8.   File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1055, in main
    9.     rv = self.invoke(ctx)
    10.          ^^^^^^^^^^^^^^^^
    11.   File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1657, in invoke
    12.     return _process_result(sub_ctx.command.invoke(sub_ctx))
    13.                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    14.   File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1404, in invoke
    15.     return ctx.invoke(self.callback, **ctx.params)
    16.            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    17.   File "/usr/local/lib/python3.11/site-packages/click/core.py", line 760, in invoke
    18.     return __callback(*args, **kwargs)
    19.            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    20.   File "/usr/local/lib/python3.11/site-packages/click/decorators.py", line 84, in new_func
    21.     return ctx.invoke(f, obj, *args, **kwargs)
    22.            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    23.   File "/usr/local/lib/python3.11/site-packages/click/core.py", line 760, in invoke
    24.     return __callback(*args, **kwargs)
    25.            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    26.   File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 911, in run_command
    27.     raise e from None
    28.   File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 897, in run_command
    29.     app = info.load_app()
    30.           ^^^^^^^^^^^^^^^
    31.   File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 312, in load_app
    32.     app = locate_app(import_name, None, raise_if_not_found=False)
    33.           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    34.   File "/usr/local/lib/python3.11/site-packages/flask/cli.py", line 218, in locate_app
    35.     __import__(module_name)
    36.   File "/workspaces/132350714/cs50/web/finance/app.py", line 26, in <module>
    37.     raise RuntimeError("API_KEY not set")
    38. RuntimeError: API_KEY not set
Add Comment
Please, Sign In to add comment