在Python上使用app.route循环

时间:2015-07-21 08:08:41

标签: python

由于循环,我试图在我的服务上创建多个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

2 个答案:

答案 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

无论如何,指明您问题的更多细节总是有助于获得准确答案:)