[英]Django How to add data to database from javascript
我在 django 中创建了一个页面,在这个页面上我创建了一个调用 JavaScript 函数的按钮,该函数反过来从 API 获取数据。 这部分代码按预期工作,因为它将响应数据写入控制台。 但是,我似乎无法将该数据插入到我在 django 中创建的模型中。
我不确定 python/javascript/models 是如何将所有链接在一起的。
模型.py
from django.db import models
class Set(models.Model):
scry_id = models.CharField(max_length=255)
code = models.CharField(max_length=255)
name = models.CharField(max_length=255)
set_type = models.CharField(max_length=255)
release_date = models.DateField()
card_count = models.IntegerField()
block_code = models.CharField(max_length=255, null=True)
block_name = models.CharField(max_length=255, null=True)
parent_set_code = models.CharField(max_length=255, null=True)
digital_only = models.BooleanField(default=False)
foil_only = models.BooleanField(default=False)
nonfoil_only = models.BooleanField(default=False)
icon = models.CharField(max_length=255)
status = models.BooleanField(default=False)
def __str__(self):
return self.name
集.html
{% extends "main/index.html "%}
{% block content %}
<div class="background card">
<div class="card-body">
<button class="btn" id="setRefresh" style="border: 1px solid" onclick="setRefresh()"><i class="fas fa-sync"></i></button>
</div>
</div>
{% endblock%}
自定义.js
function setRefresh() {
const Url="https://api.scryfall.com/sets";
fetch(Url)
.then(res => res.json())
.then(data => obj = data.data)
.then(() => obj.sort(function(a,b){return a.released_at.localeCompare(b.released_at);}))
.then(() => {
for (var i = 0; i < obj.length; i++) {
//console.log(obj[i].name);
}
})
}
查看.py
def sets(request):
return render(request,
"main/sets.html",
{"Sets": Set.objects.all})
有两种方法可以做到
.您的视图应如下所示:
from .models import Set
from django.http import HttpResponse
import json
def save(request):
data=json.loads(request.body)
for entry in data:
s = Set()
s.scry_id=entry["scry_id"]
#in the next lines you map entry fields to Set fields
s.save()
return HttpResponse("ok")
方法 2:您的按钮在单击时调用您的 django 应用程序,然后您的 django 应用程序从https://api.scryfall.com/sets自身检索数据,然后将它们保存到数据库中。 你的代码应该是这样的
from .models import Set from django.http import HttpResponse import json import requests def save(request): response = requests.request("GET", "https://api.scryfall.com/sets") data=response.json() for entry in data: s = Set() s.scry_id=entry["scry_id"] #in the next lines you map entry fields to Set fields s.save() return HttpResponse("ok")
当然,无论哪种情况,都不要忘记将您的 urlconf 映射到保存视图
有两个缺失的部分。 首先,您需要有一个url
来监听更改,然后您需要有一个view
函数,您可以在其中设置数据。 并且您需要对代码的JS
部分进行一些更改。下面的示例可以解决这一问题,并且它也可以正常工作:
views.py
@ajax_required
def views_name(request):
try:
if request.method == 'POST':
post_id = request.POST.get('post')
YourModel.objects.create(id=post_id)
except Exception: # pragma: no cover
return HttpResponseBadRequest()
urls.py
urlpatterns = [
url(r'^whatever/$', views.views_name, name='whatever'),
]
custom.js:
$(function () {
$(".class-name").click(function () {
var csrf = $(this).attr('csrf');
var post = $(this).attr('page-id');
$.ajax({
url: '/whatever/',
data: {
'post': post,
'csrfmiddlewaretoken': csrf
},
type: 'post',
cache: false,
success: function (returned_values) {
// do whatever you want after success!
},
});
});
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.