У меня возникла проблема с объектом (объектом конфигурации), который я хочу изменить как для программы python, так и для внешних пользователей API. Если я использую новые данные API и PUT, данные сохраняются. Если у меня есть программа Python, попробуйте изменить объект, я не могу наблюдать это изменение при выполнении GET. Как вы можете видеть, я меняю config.encoding на "test", но при выполнении GET я не вижу изменения. Я все еще вижу кодировку, установленную в "ASCII". Я относительно новичок в Python и могу игнорировать что-то простое.
Благодарю.
config = util.Config()
class api_Config(Resource):
def get(self, id):
return [{"id": config.id,
"capture": config.capture,
"controller": config.controller,
"gateway_ip_address": config.gateway_ip_address,
"port": config.port,
"interval_rate": config.interval_rate,
"encoding": config.encoding}], 200
def put(self, id):
parser = reqparse.RequestParser()
parser.add_argument("capture")
parser.add_argument("controller")
parser.add_argument("gateway_ip_address")
parser.add_argument("port")
parser.add_argument("interval_rate")
parser.add_argument("encoding")
args = parser.parse_args()
config.capture = args["capture"]
config.controller = args["controller"]
config.gateway_ip_address = args["gateway_ip_address"]
config.port = args["port"]
config.interval_rate = args["interval_rate"]
config.encoding = args["encoding"]
return [{"id": config.id,
"capture": config.capture,
"controller": config.controller,
"gateway_ip_address": config.gateway_ip_address,
"port": config.port,
"interval_rate": config.interval_rate,
"encoding": config.encoding}], 200
if __name__== "__main__":
app = Flask(__name__)
api = Api(app)
config = util.Config()
api.add_resource(api_Config, '/<string:id>')
app.run(debug=True)
print config.encoding
config.encoding = "test"
Есть два места, в которых вы создаете свой объект config
. Один из них находится в первой строке, где вы говорите: config = util.Config()
который выглядит как либо util.Config
- это класс, а затем util.Config()
возвращает экземпляр этого класса, или он является функцией и любой функцией возвраты будут назначены в config
. В любом случае, это будет объект config
используемый вашим методом api_Config.get
.
Второе место, где вы создаете экземпляр этого объекта конфигурации, находится после вашего if __name__== "__main__":
block, который будет полностью новым объектом и не будет использоваться этими обработчиками api.
Вам может быть достаточно, чтобы удалить это второе определение и использовать
if __name__== "__main__":
app = Flask(__name__)
api = Api(app)
api.add_resource(api_Config, '/<string:id>')
app.run(debug=True)
print config.encoding
config.encoding = "test"
без изменения остальных.