带有 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()
我用这个 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()