带有 spotipy 的 Django 表单未在 Apache2 上更新

Django form with spotipy not updating on Apache2

我用这个 form.py 制作了一个 Django 网站来填充一个模板 html,其中包含一个包含我当前所有 spotify 播放列表的下拉列表:

from django import forms 
import spotipy
import spotipy.util as util


def getplaylists(): 

    #credentials
    CLIENT_ID='xxxxx'
    CLIENT_SECRET='xxxxx'
    USER='xxxxxx'

    # token krijgen
    token = util.oauth2.SpotifyClientCredentials(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
    cache_token = token.get_access_token()
    sp = spotipy.Spotify(cache_token)

    # playlists opvragen
    results = sp.user_playlists(USER,limit=50)

    namenlijst = []
    idlijst = []

    for i, item in enumerate(results['items']):
        namenlijst.append(item['name'])
        idlijst.append(item['id'])

    #samenvoegen
    dropdowndata = zip(idlijst, namenlijst)
    #dropdowndata = zip(namenlijst, idlijst)

    return dropdowndata


class SpotiForm(forms.Form):  

    LIJSTEN = getplaylists()
    lijstje = forms.ChoiceField(choices=LIJSTEN, required=True)

我 运行 在我的 VPS 上有这个 Django 网站的两个版本(代码完全相同):
A) Apache2 上的一个版本(mod_wsgi)
B) 测试版('python ./manage.py runserver x.x.x.x:xxx')

当我在 Spotify 中添加或删除播放列表时,版本 A 中的下拉列表会更新,但版本 B 的下拉列表不会。有人可以向我解释为什么会这样吗?

因为在 Apache - 或任何适当的托管环境 - 一个进程持续多个请求,但在 class 或模块级别所做的任何事情每个进程只执行一次。

像这样的动态事情应该在方法内部完成。在这种情况下,将其放在表单的 __init__:

class SpotiForm(forms.Form):  
    lijstje = forms.ChoiceField(choices=(), required=True)

    def __init__(self, *args, **kwargs):
        super(SpotiForm, self).__init__(*args, **kwargs)
        self.fields['lijstje'].choices = getplaylists()