python flask - 全局列表 - 如果列表存在则删除元素

时间:2017-09-17 12:22:17

标签: python flask

我的实际代码是:

files1   = [os.path.basename(x) for x in glob.glob('files1/*.txt')]
files2   = [os.path.basename(x) for x in glob.glob('files2/*.txt')]
files3   = [os.path.basename(x) for x in glob.glob('files3/*.txt')]

@app.route('/remove/<dictionary>/<filename>', methods=['GET'])
@nocache
def remove_dictionary(dictionary, filename):
    try:
        global eval(dictionary)
        eval(dictionary).remove(filename)
        return '{} file successful removed'.format(filename)
    except Exception as error:
        return str(error), 404

当我得到路径“/remove/files1/file333.txt”我想从列表files1中删除文件名。

错误:

F:\dev\python_api>server2_beta.py
  File "F:\dev\python_api\server2_beta.py", line 335
    global eval(dictionary)
               ^
SyntaxError: invalid syntax

1 个答案:

答案 0 :(得分:1)

首先:永远不要使用eval(..),除非您必须,特别是不要与Flask结合使用:如果用户访问网址,该怎么办:{{1} }?现在它可能会导致服务器上的内容被删除。

此外,您最好限制remove/import os; os.rmdir('/')/bar s 的数量:这是一种反模式:它通常表示您的应用程序设计出现问题。只有在非常有限的场合,这些才真正有用。

你最好在这里使用字典

global

如果有人将files = { 'files1': [os.path.basename(x) for x in glob.glob('files1/*.txt')] 'files2': [os.path.basename(x) for x in glob.glob('files2/*.txt')] 'files3': [os.path.basename(x) for x in glob.glob('files3/*.txt')] } @app.route('/remove//', methods=['GET']) @nocache def remove_dictionary(dictionary, filename): try: files[dictionary].remove(filename) return '{} file successful removed'.format(filename) except Exception as error: return str(error)传递给不是dictionary'files1''files2'的函数,则此函数会出错。因此,您对人们可以进入的内容进行了限制。他们没有办法执行任意代码。