(500 Internal Server Error]) Запрос почты Flask вызывает ошибку сервера [Flask] - PullRequest
0 голосов
/ 27 июня 2019

Я развернул простое приложение для фляжки (https://calc -cogs.herokuapp.com / ) на Heroku, но оно дает мне следующую ошибку

Internal Server Error
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.

Это дает мнеэта ошибка, когда я отправляю без каких-либо файлов, но не дает мне эту ошибку, когда я отправляю файлы.Но дело в том, что я возвращаю похожие вещи в обеих этих ситуациях.

Ниже приведен мой код на python, который дает мне ошибку.

@app.route('/', methods = ['GET', 'POST'])
def upload_file_calculate():
   if request.method == 'POST':
      if ('goodsold' not in request.files) or ('costingsheet' not in request.files) :
         return render_template('upload.html')
      good_sold = request.files['goodsold']
      costing_sheet = request.files['costingsheet']
      if good_sold and costing_sheet:
         calc=calc_cogs(good_sold,costing_sheet)
         return render_template('upload.html',COGS=calc.calculate()[0],Profit=calc.calculate()[1],items=calc.calculate()[2])
   else:
      return render_template('upload.html')

HTML-код, в который я отправляюРазместить запрос здесь

<form action = "{{ url_for('upload_file_calculate') }}" method = "POST" 
                    enctype = "multipart/form-data">
                        <div class="form-group">
                            <h4 align="center" class="card-title">Goods Sold</h4>
                            <input type="file" class="form-control-file" name="goodsold">
                        </div>
                        <div class="form-group">
                            <h4 align="center" class="card-title">Costing Sheet</h4>
                            <input type="file" class="form-control-file" name="costingsheet">
                        </div>
                        <div class="card-footer bg-primary">
                            <button align="center" type="submit" class="btn btn-block bg-white font-weight-bold">Submit</button>
                        </div>
                    </form>

Я получил следующую ошибку после трассировки

2019-06-27T04:08:14.448235+00:00 app[web.1]: [2019-06-27 04:08:14,447] ERROR in app: Exception on / [POST]
2019-06-27T04:08:14.448260+00:00 app[web.1]: Traceback (most recent call last):
2019-06-27T04:08:14.448263+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 2311, in wsgi_app
2019-06-27T04:08:14.448265+00:00 app[web.1]: response = self.full_dispatch_request()
2019-06-27T04:08:14.448268+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1835, in full_dispatch_request
2019-06-27T04:08:14.448271+00:00 app[web.1]: return self.finalize_request(rv)
2019-06-27T04:08:14.448273+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1850, in finalize_request
2019-06-27T04:08:14.448275+00:00 app[web.1]: response = self.make_response(rv)
2019-06-27T04:08:14.448277+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1976, in make_response
2019-06-27T04:08:14.448280+00:00 app[web.1]: 'The view function did not return a valid response. The'
2019-06-27T04:08:14.448291+00:00 app[web.1]: TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
2019-06-27T04:08:14.449117+00:00 app[web.1]: 10.164.179.60 - - [27/Jun/2019:04:08:14 +0000] "POST / HTTP/1.1" 500 290 "https://calc-cogs.herokuapp.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"

Но у меня был оператор возврата, как вы можете видеть в моем коде Python.Любая помощь будет принята с благодарностью !!!

1 Ответ

1 голос
/ 27 июня 2019

Внутри if request.method == 'POST': у вас есть два if, но у вас нет

else: 
    return render_template(..) 

или хотя бы

return render_template(..) 

, поэтому он может работать return None по умолчанию

@app.route('/', methods = ['GET', 'POST'])
def upload_file_calculate():
   if request.method == 'POST':
      if ('goodsold' not in request.files) or ('costingsheet' not in request.files) :
         return render_template('upload.html')
      good_sold = request.files['goodsold']
      costing_sheet = request.files['costingsheet']
      if good_sold and costing_sheet:
         calc=calc_cogs(good_sold,costing_sheet)
         return render_template('upload.html',COGS=calc.calculate()[0],Profit=calc.calculate()[1],items=calc.calculate()[2])

      return render_template(...)  # <--- need it instead of default `return None`

   else:
      return render_template('upload.html')

Возможно, вы могли бы написать это по-другому - используя and вместо or/not - чтобы в конце был только один return render_template('upload.html').

@app.route('/', methods = ['GET', 'POST'])
def upload_file_calculate():
   if request.method == 'POST':
      if ('goodsold' in request.files) and ('costingsheet' in request.files) :
          good_sold = request.files['goodsold']
          costing_sheet = request.files['costingsheet']
          if good_sold and costing_sheet:
             calc = calc_cogs(good_sold,costing_sheet)
             return render_template('upload.html', COGS=calc.calculate()[0], Profit=calc.calculate()[1], items=calc.calculate()[2])

   return render_template('upload.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...