簡體   English   中英

在Python上使用app.route循環

[英]Loop using app.route on Python

由於循環,我試圖在serv上創建幾個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

之所以失敗是因為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):
    ...

假設您現在正在使用flask,則應考慮使用Custom URL Converter。 檢查下面的鏈接

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

無論如何,為您的問題指定更多詳細信息始終有助於獲得准確的答案:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM