Ошибка при создании RESTApi с использованием flask_restful - PullRequest
0 голосов
/ 03 ноября 2019

Flask RESTApi новичок здесь

Я пытаюсь создать службу RESTapi во Flask (и я пытаюсь сохранить вывод как файл .txt), используя flask_restful дляМой код, использующий модуль pydifact , выглядит следующим образом:

import datetime
from pydifact.message import Message
from pydifact.segments import Segment
from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)

api = Api(app)


class RestAPI(Resource):
    def get(self, ABSENDER_ID, EMPFÄNGER_ID, ERSTELLUNG_DATUM_ZEIT, REFERENCE):
        MSCONS = Message()

        def erstellung_datum_zeit(dt_time):
            # Needed for the UNB segment
            dt_time = dt_time.strftime('%Y%m%d%H%M')
            return dt_time

        def UNA_UNB_segment(absender_id, empfänger_id, erst_datum, ref):

            MSCONS.add_segment(Segment('UNA', ":+.? '"))
            MSCONS.add_segment(Segment('UNB', ['UNOC', '3'], [absender_id, '14'], [
                               empfänger_id, '500'], [erst_datum[2:8], erst_datum[8:]], ref, '', 'TL'))

        ERSTELLUNG_DATUM_ZEIT = str(
            erstellung_datum_zeit(datetime.datetime.now()))
        UNA_UNB_segment(ABSENDER_ID, EMPFÄNGER_ID,
                        ERSTELLUNG_DATUM_ZEIT, REFERENCE)
        result = MSCONS.serialize()
        final_result = result

        PATH_FOR_TXT = r'C:\Users\kashy\OneDrive\Desktop\Codes\mscons.txt'
        textfile = open(PATH_FOR_TXT, 'w')
        textfile.write(result)
        textfile.close()

        return {'result': final_result}


api.add_resource(
    RestAPI,
    '/RestAPI/<int:ABSENDER_ID>/<int:EMPFÄNGER_ID/<int:ERSTELLUNG_DATUM_ZEIT/<int:REFERENCE>')

if __name__ == '__main__':
    app.run(debug=True)

. ABSENDER_ID, EMPFÄNGER_ID, ERSTELLUNG_DATUM_ZEIT, REFERENCE все должны быть пользовательскими вводами, и все они должны быть в строковом формате.

Когда я делаю /RestAPI/<str:ABSENDER_ID>/<str:EMPFÄNGER_ID/<str:ERSTELLUNG_DATUM_ZEIT/<str:REFERENCE>, я получаю следующую ошибку:

C:\Users\kashy\OneDrive\Desktop\Codes\pydifact> & C:/Users/kashy/Anaconda3/envs/py36/python.exe c:/Users/kashy/OneDrive/Desktop/Codes/api.py
Traceback (most recent call last):
  File "c:/Users/kashy/OneDrive/Desktop/Codes/api.py", line 44, in <module>
    self.url_map.add(rule)
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 1401, in add
    rule.bind(self)
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 730, in bind
    self.compile()
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 790, in compile
    _build_regex(self.rule if self.is_leaf else self.rule.rstrip("/"))
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 779, in _build_regex
    convobj = self.get_converter(variable, converter, c_args, c_kwargs)
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 738, in get_converter
    raise LookupError("the converter %r does not exist" % converter_name)
LookupError: the converter 'str' does not exist

, а когда я

/RestAPI/<int:ABSENDER_ID>/<int:EMPFÄNGER_ID/<int:ERSTELLUNG_DATUM_ZEIT/<int:REFERENCE>, я получаю следующую ошибку:

PS C:\Users\kashy\OneDrive\Desktop\Codes\pydifact> & C:/Users/kashy/Anaconda3/envs/py36/python.exe c:/Users/kashy/OneDrive/Desktop/Codes/api.py
Traceback (most recent call last):
  File "c:/Users/kashy/OneDrive/Desktop/Codes/api.py", line 44, in <module>
    '/RestAPI/<int:ABSENDER_ID>/<int:EMPFÄNGER_ID/<int:ERSTELLUNG_DATUM_ZEIT/<int:REFERENCE>')
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\flask_restful\__init__.py", line 382, in add_resource
    self._register_view(self.app, resource, *urls, **kwargs)
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\flask_restful\__init__.py", line 448, in _register_view
    app.add_url_rule(rule, view_func=resource_func, **kwargs)
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\flask\app.py", line 98, in wrapper_func
    return f(self, *args, **kwargs)
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\flask\app.py", line 1277, in add_url_rule
    self.url_map.add(rule)
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 1401, in add
    rule.bind(self)
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 730, in bind
    self.compile()
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 790, in compile
    _build_regex(self.rule if self.is_leaf else self.rule.rstrip("/"))
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 766, in _build_regex
    for converter, arguments, variable in parse_rule(rule):
  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\werkzeug\routing.py", line 226, in parse_rule
    raise ValueError("malformed url rule: %r" % rule)
ValueError: malformed url rule: '/RestAPI/<int:ABSENDER_ID>/<int:EMPFÄNGER_ID/<int:ERSTELLUNG_DATUM_ZEIT/<int:REFERENCE>'

Я новичок в этом и только начал изучать его с помощью Создание REST API с использованием Python и Flask |Flask-RESTful учебное пособие.

Может кто-нибудь сказать, пожалуйста, какую ошибку я совершаю?

1 Ответ

1 голос
/ 03 ноября 2019

Ваши URL-адреса имеют проблемы. В первом из них должно быть string вместо str, а во втором у вас есть пропущенные > в конце int:EMPFÄNGER_ID и int:ERSTELLUNG_DATUM_ZEIT

Правильные должны быть:

/RestAPI/<string:ABSENDER_ID>/<string:EMPFANGER_ID>/<string:ERSTELLUNG_DATUM_ZEIT>/<string:REFERENCE>

и

/RestAPI/<int:ABSENDER_ID>/<int:EMPFANGER_ID>/<int:ERSTELLUNG_DATUM_ZEIT>/<int:REFERENCE>

Примечание. Я заменил Ä на A в URL-адресах выше, поскольку это также может привести к некорректной работе правила URL.

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