2 回答

TA貢獻1863條經驗 獲得超2個贊
export const SendData = (url, props) =>{ //this url is the url to the DataInput api view
const data1 = document.getElementById('data1')
const data2 = document.getElementById('data2')
async function postData() {
var res = ''
const options ={
method : 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
body: JSON.stringify({
data_one: data1,
data_two: data2
})
}
const response = await fetch(url, options)
.then(response => {
if (response.ok) {
alert("Data Sent!")
}
else {
alert("An error has occurred.\nWere all fields filled out?")
}
});
}
postData()
};
models.py
class DataInput(models.Model):
data_one = models.IntegerField(
max_length=30,
default=5)
data_two = models.IntegerField(
max_length=30,
default=4)
class OtherData(models.Model):
other_data = models.IntegerField(
max_length=5,
default=10)
@receiver(post_save, sender=DataInput, dispatch_uid="extra function")
def extra_function(sender, instance, created, *args, **kwargs):
#dummy function to show reliance on data
for i in OtherData[0].other_data:
print(instance.data_two + instance.data_one)
serializer.py
from rest_framework import serializers
from .models import DataInput
from .models import OtherData
class DataSerializer(serilizers.ModelSerializer):
class Meta:
model = DataInput
fields = ('data_one', 'data_two')
class OtherDataSerializer(serializer.ModelSerializer):
class Meta:
model = OtherData
fields = ('other_data')

TA貢獻1898條經驗 獲得超8個贊
最好避免在同一 (http) 連接中同步等待長時間運行的操作的響應。特別是在瀏覽器中,因為它們可能會導致超時(取決于瀏覽器,但通常為 1-5 分鐘)
解決方案之一是使用 HTTP 輪詢。該技術的詳細解釋可以在這里找到:
帶輪詢的長時間運行操作
異步請求-應答模式
正如您在第二個鏈接中可以找到的,您的 API 應在開始長時間運行的流程之前驗證請求和要執行的操作。如果請求無效,請立即回復錯誤代碼,例如 HTTP 400(錯誤請求)。在其他情況下,將任務分配給后臺工作人員(例如?django-q),并使用反應應用程序可以輪詢等待作業結果的位置進行響應。
添加回答
舉報