由于循环,我正在尝试在我的服务器上创建多个 URL。问题是我在 app.route 中创建的每个函数不能与其他函数具有相同的名称。而且我不知道如何创建不同的函数名称...... 这是代码:
json_tweets = []
for line in open('C:\Users\Benjamin\Desktop\DashboardProject\last_rated_set.json',"r"):
json_tweets.append(json.loads(line,"ISO-8859-1"))
cashtag_tab = []
for tweet in json_tweets:
if not(tweet['cashtag'] in cashtag_tab) :
cashtag_tab.append(tweet['cashtag'])
for i in range(0,(len(cashtag_tab)-1)) :
var=cashtag_tab[i]
@app.route("/"+var)
def company(var) :
finance=Share(var)
datas = finance.get_historical('2014-01-01', '2014-12-31')
datas = json.dumps(datas, default=json_util.default)
return datas
我收到错误 AssertionError: View 函数映射正在覆盖现有端点函数:公司
最佳答案
这会失败,因为 Flask 默认从函数中派生端点名称,但无论如何它稍后都会失败,因为函数 company
需要参数 var
而路由不是参数化。最简单的选择就是检查处理程序内的值:
@api.route('/<var>')
def company(var):
if var not in cashtag_tab:
abort(404)
如果您出于任何原因希望所有路由都位于路由映射中,我曾经需要类似的东西并想出了这样的东西:
def url_family(source, methods=('GET',)):
def decorator(f):
for entry in source:
# create a handler that delegates to your function
def view_func(entry=entry, **kwargs):
return f(entry, **kwargs)
endpoint = '{0}_{1}'.format(f.__name__, entry)
url = '/{0}'.format(entry)
api.add_url_rule(url,
methods=methods,
endpoint=endpoint,
view_func=view_func)
return decorator
然后将处理程序注册为:
@url_family(cashtag_tab)
def company(var):
...
关于python - 在 Python 上使用 app.route 进行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31533577/