我有一个外部第三方API客户机,用于检索和存储歌曲名称,我需要它与Django 2接口,并允许用户通过Django表单插入和更新歌曲,而无需使用任何数据库后端,而仅使用API。在
我正在挣扎,因为大多数关于Django的文档都假设有数据库后端,甚至关于使用外部API的示例都假设我希望将从restapi获取的数据存储到数据库中。在
外部API甚至不是REST,我只是有一个客户端.py模块与所有的方法,我需要做一个存储歌曲信息的远程服务CRUD操作。在
我曾考虑过创建django2自定义模型管理器,但它似乎是作为现有数据库之上的东西而不是外部API来使用的。 django2序列化程序允许序列化和反序列化API和数据库之间的数据。在
我缺少的是创建一个自定义模型的方法,它抽象了API并允许我像使用数据库一样使用它,这样在抽象了模型层之后,我可以继续学习任何Django表单教程。在
注意:类似的问题被问到here,答案是:“Django是一个以数据库为中心的后端框架,跳过Django并使用Angular”这对Django来说有那么难吗?在
目前,我破解了类似以下SSCE示例的代码:
urlpatterns = [
url(r'^$', viewSong, name='home'),
url(r'^create/$', SongCreate.as_view(), name='create'),
url(r'^update/(?P<song_id>[0-9\.a-z]+)/$', SongUpdate.as_view(), name='update'),
]
class SongCreate(CreateView):
template_name = 'form.html'
def get(self, request, *args, **kwargs):
form = SongForm()
return render(request, self.template_name, {'form': form})
def post(self, request):
form = SongForm(request.POST)
if form.is_valid():
form.save()
return redirect("/")
return render(request, self.template_name, {'form': form})
class SongUpdate(UpdateView):
template_name = 'form.html'
def get(self, request, *args, **kwargs):
song_id = kwargs["song_id"]
obj = SongModel.load(song_id)
form = SongForm(obj)
return render(request, self.template_name, {'form': form})
class SongForm(forms.Form):
song_id = forms.CharField(label='song_id', max_length=30)
song_name = forms.CharField(label='song_name', max_length=100)
def save(self):
data = self.cleaned_data
songModel = SongModel(song_id=data['song_id'],
song_name=data['song_name'])
songModel.save()
from django.db import models
from woozy.song_client import SongClient
username = 'woozyuser'
password = 'userpass'
base_url = 'http://localhost:8080'
class SongModel(models.Model):
song_id = models.CharField(max_length=80)
song_name = models.CharField(max_length=80)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
songClient = SongClient()
songClient.connect(base_url, username, password)
songClient.create_song(self.song_id,
self.song_name)
return
@classmethod
def load(cls, song_id):
song_model = cls(song_id=song_id)
songClient = SongClient()
songClient.connect(base_url, username, password)
song = songClient.get_song(song_id)
return song
上面的内容对我来说有点复杂,所以我想我没有尊重Django支持的各种层和架构。在
目前没有回答
相关问题 更多 >
编程相关推荐