【问题标题】:JSON API with Flask - 500 Internal Server Error带有 Flask 的 JSON API - 500 内部服务器错误
【发布时间】:2019-12-09 16:58:07
【问题描述】:

我是 Flask 和 API 方面的绝对新手。我想用 FLASK 在 localhost 中使用 API 托管我的 Json。但它说

500 内部服务器错误。

在我第一次尝试运行这个 Flask 时,它给了我这个 500 Internal Server 错误。然后我从 Ubuntu 转到 Windows 玩游戏和浏览(我试着解释清楚)。我又回到了 Ubuntu。

我做的事情和我第一次尝试做的完全一样,我得到了这个 500 Internal 服务器错误。但我不知道,这一次有效。我敢肯定 我什么都不做,就像我的第一次尝试一样

这是代码

from flask import Flask
from flask import request
from pymongo import MongoClient
from bson.json_util import dumps
import json


client = MongoClient()
db = client.dbCrawlTwint

app = Flask(__name__)

@app.route("/get_statistic_year", methods = ['GET'])
def get_statistic_year():
        statisticYear = db.statisticYear.find()
        return dumps(statisticYear)

@app.route("/get_statistic_month", methods = ['GET'])
def get_statistic_month():
        statisticMonth = db.statisticMonth.find()
        return dumps(statisticMonth)

@app.route("/get_statistic_week", methods = ['GET'])
def get_statistic_week():
        statisticWeek = db.statisticWeek.find()
        return dumps(statisticWeek)

@app.route("/get_statistic_day", methods = ['GET'])
def get_statistic_day():
        statisticDay = db.statisticDay.find()
        return dumps(statisticDay)

这是错误日志

INFO:werkzeug:127.0.0.1 - - [01/Aug/2019 13:21:13] "GET /get_statistic_month HTTP/1.1" 500 -
ERROR:restAPI:Exception on /get_statistic_month [GET]
Traceback (most recent call last):
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/alramdein/Documents/Angular-exp/angular-statistic/flask/restAPI.py", line 21, in get_statistic_month
    return dumps(statisticMonth)
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/bson/json_util.py", line 383, in dumps
    return json.dumps(_json_convert(obj, json_options), *args, **kwargs)
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/bson/json_util.py", line 421, in _json_convert
    return list((_json_convert(v, json_options) for v in obj))
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/bson/json_util.py", line 421, in <genexpr>
    return list((_json_convert(v, json_options) for v in obj))
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/pymongo/cursor.py", line 1225, in next
    if len(self.__data) or self._refresh():
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/pymongo/cursor.py", line 1140, in _refresh
    self.__send_message(q)
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/pymongo/cursor.py", line 1010, in __send_message
    helpers._check_command_response(first)
  File "/home/alramdein/anaconda3/envs/eventenv/lib/python3.6/site-packages/pymongo/helpers.py", line 155, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: there are no users authenticated
INFO:werkzeug:127.0.0.1 - - [01/Aug/2019 13:21:14] "GET /get_statistic_month HTTP/1.1" 500 -

这是错误

【问题讨论】:

    标签: python api flask server json-api


    【解决方案1】:

    我注意到有一个

    pymongo.errors.OperationFailure:没有经过身份验证的用户

    当我发布这个问题时

    添加这个 在 Windows 中

    client = MongoClient('mongodb://user:pass@localhost:27017/')
    

    或者这个在 Linux 中

    client = MongoClient('mongodb://user:pass@172.17.0.1:27017/')
    

    我没有删除它,因为其他人可能和我有同样的问题

    【讨论】: