由于循环,我试图在我的服务上创建多个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:查看函数映射正在覆盖现有的端点函数:company
答案 0 :(得分:1)
这会失败,因为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):
...
答案 1 :(得分:0)
假设您现在正在使用flask,您应该考虑自定义URL转换器。检查下面的链接
http://flask.pocoo.org/docs/0.10/api/#flask.Flask.url_map - url_map UrlConverter API https://exploreflask.com/views.html#url-converters - 示例网址转换器 https://stackoverflow.com/a/5872904/3451543 - Philip Southam
的RegexConverter无论如何,指明您问题的更多细节总是有助于获得准确答案:)