Вернуть json в браузер - Flask - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть эта функция, она возвращает результат на консоли:

numbers_to_add = list(range(10000001))
try:
    req = request.Request('http://127.0.0.1:5000/total'
        , data=bytes(json.dumps(numbers_to_add), 'utf_8')
        , headers={'Content-Type': 'application/json'}
        , method='POST')
    result = json.loads(request.urlopen(req).read(), encoding='utf_8')
    print(json.dumps(result, indent=4))
except Exception as ex:
    print(ex)

Возвращает результат в диапазоне 10000001

Теперь я хочу вернуть это по запросу браузера,в приложении Flask я пробовал это:

def hardCoded():
    numbers_to_add = list(range(10000001))
    try:
        req = request.Request('http://127.0.0.1:5000/total'
            , data=bytes(json.dumps(numbers_to_add), 'utf_8')
            , headers={'Content-Type': 'application/json'}
            , method='POST')
        result = json.loads(request.urlopen(req).read(), encoding='utf_8')
        print(json.dumps(result, indent=4))
    except Exception as ex:
        print(ex)

class rangeNumbers(Resource):
    def get(self, range):
        return {'data': directSum.hardCoded(range)}

api.add_resource(rangeNumbers, '/range/<range>')

Когда я запрашиваю это в своем браузере, он выдает мне следующее:

Traceback (most recent call last):
File "/home/user/.virtualenvs/test_sum/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/home/user/.virtualenvs/test_sum/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/user/.virtualenvs/test_sum/lib/python3.6/site-packages/flask_restful/__init__.py", line 480, in wrapper
resp = resource(*args, **kwargs)
File "/home/user/.virtualenvs/test_sum/lib/python3.6/site-packages/flask/views.py", line 84, in view
return self.dispatch_request(*args, **kwargs)
File "/home/user/.virtualenvs/test_sum/lib/python3.6/site-packages/flask_restful/__init__.py", line 595, in dispatch_request
resp = meth(*args, **kwargs)
File "app.py", line 16, in get
return {'data': directSum.hardCoded()}
TypeError: hardCoded() takes 0 positional arguments but 1 was given

Есть идеи?

1 Ответ

0 голосов
/ 28 ноября 2018

Если range означает возвращаемое число n, в данном случае 10000001, то вместо этого вы захотите сделать следующее:

В вашем файле directSum:

def hardCoded(rng):
    numbers_to_add = list(range(rng))
    try:
    # ... rest of code ...

В вашем основном файле:

class rangeNumbers(Resource):
    def get(self, rng):
        return {'data': directSum.hardCoded(rng)}

Где, когда вы звоните rangeNumbers().get, вы делаете это:

rng_num = rangeNumbers()
rng_num.get(10000001)

Обратите внимание, что я изменил вашу переменную rangeдо rng.В ваших же интересах , а не затмевать имена builtin даже в пределах локальной области видимости.В противном случае вызов range(range) принесет вам бесконечную боль.

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