title: Why I receive 500 Internal Server Error on Postman when I run a flask app
body: <p>Dears , </p>
  
  <p>I am new to Python and flask . When I run the following code on Spyder I get the following message:</p>
  
  <pre><code>runfile('C:/Users/...../Desktop/Folders/..../BlockChain/Create Blockchain/Module 1 - Create a Blockchain/blockchain.py', wdir='C:/Users/...../Desktop/Folders/..../BlockChain/Create Blockchain/Module 1 - Create a Blockchain')
   * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 
  </code></pre>
  
  <p>but when I want to run <a href="http://127.0.0.1:5000/get_chain" rel="nofollow noreferrer">http://127.0.0.1:5000/get_chain</a> on POSTMAN, I get the following message:</p>
  
  <pre><code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;
  &lt;title&gt;500 Internal Server Error&lt;/title&gt;
  &lt;h1&gt;Internal Server Error&lt;/h1&gt;
  &lt;p&gt;The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.&lt;/p&gt;
  </code></pre>
  
  <p>I TOTALLY CONFUSED WHY? Here is my code:</p>
  
  <pre><code>import datetime
  import hashlib
  import json
  from flask import Flask, jsonify, request
  </code></pre>
  
  <p>Part 1 - Building a Blockchain</p>
  
  <pre><code>class Blockchain:
  
      def __init__(self):
          self.chain = []
          self.create_block(proof = 1, previous_hash = '0')
  
      def create_block(self, proof, previous_hash):
          block = {'index': len(self.chain) + 1,
                   'timestamp': str(datetime.datetime.now()),
                   'proof': proof,
                   'previous_hash': previous_hash}
          self.chain.append(block)
          return block
  
      def get_previous_block(self):
          return self.chain[-1]
  
      def proof_of_work(self, previous_proof):
          new_proof = 1
          check_proof = False
          while check_proof is False:
              hash_operation = hashlib.sha256(str(new_proof**2 - previous_proof**2).encode()).hexdigest()
              if hash_operation[:4] == '0000':
                  check_proof = True
              else:
                  new_proof += 1
          return new_proof
  
      def hash(self, block):
          encoded_block = json.dumps(block, sort_keys = True).encode()
          return hashlib.sha256(encoded_block).hexdigest()
  
      def is_chain_valid(self, chain):
          previous_block = chain[0]
          block_index = 1
          while block_index &lt; len(chain):
              block = chain[block_index]
              if block['previous_hash'] != self.hash(previous_block):
                  return False
              previous_proof = previous_block['proof']
              proof = block['proof']
              hash_operation = hashlib.sha256(str(proof**2 - previous_proof**2).encode()).hexdigest()
              if hash_operation[:4] != '0000':
                  return False
              previous_block = block
              block_index += 1
          return True
  
  # Creating a Web App
  
      app = Flask(__name__)
  
  # Creating a Blockchain
  
      blockchain = Blockchain()
  
  # Mining a new block
  
      @app.route('/mine_block', methods = ['GET'])
  
      def mine_block():
          previous_block = blockchain.get_previous_block()
          previous_proof = previous_block['proof']
          proof = blockchain.proof_of_work(previous_proof)
          previous_hash = blockchain.hash(previous_block)
          block = blockchain.create_block(proof, previous_hash)
          response = {'message': 'Congratulations, you just mined a block!',
                      'index': block['index'],
                      'timestamp': block['timestamp'],
                      'proof': block['proof'],
                      'previous_hash': block['previous_hash']}
          return jsonify(response), 200
  
  # Getting the full Blockchain
  
      @app.route('/get_chain', methods = ['GET'])
      def get_chain():
          response = {'chain': blockchain.chain,
                      'length': len(blockchain.chain)}
          return jsonify(response), 200
  
  # Checking if the Blockchain is valid
  
      @app.route('/is_valid', methods = ['GET'])
      def is_valid():
          is_valid = blockchain.is_chain_valid(blockchain.chain)
          if is_valid:
              response = {'message': 'All good. The Blockchain is valid.'}
          else:
              response = {'message': 'Houston, we have a problem. The Blockchain is not valid.'}
          return jsonify(response), 200
  
  
  # Running the app
  
      app.run(host='0.0.0.0', port=5000)
  </code></pre>