Arsen Lüpen
Hectopat
- Katılım
- 28 Şubat 2021
- Mesajlar
- 102
Daha fazla
- Cinsiyet
- Erkek
Merhaba. "React Native-image-picker" kütüphanesini kullanarak resimlerin URL'lerini database e kayıt ediyordum. Ama local olarak kayıt oluyormuş. Biraz araştırdım ve JSON formatında değil "multipart/form-data" formatında gönderilmesi gerekiyormuş. Şimdi ben diğer bilgileri JSON formatında kayıt ediyorum. Önce kodlaramı paylaşayım sonra sorularımı soracağım.
Kullanıcı kayıt olma aşamasının sonuna geldiği tüm verilerin Redux'tan alınıp Django'ya gönderileceği alan:
AddNewUser Metodu ile Json formatındaki verilerin Django tarafına yapılan post isteği:
Şimdi kodlarım böyle iken sıkıntısız bir şekilde veritabanına kaydediliyor ama resimler dediğim gibi.
Bu formatta geliyor. Şimdi sorularıma geliyorum.
Deneme yaparken karşılaştığım sorun:
Tüm verileri form-data türünden kayıt etmek istedim.
Bu yüzden header ı 'content-type': 'multipart/form-data', olarak değiştirdim.
Ama gelen veri yani formdata tüm verileri formdata olarak yaptığım zaman.
Bu kısma düşüyor,
Yardımcı olabilirseniz teşekkür ederim.
Kullanıcı kayıt olma aşamasının sonuna geldiği tüm verilerin Redux'tan alınıp Django'ya gönderileceği alan:
JavaScript:
const fetchAllUserDatas = () => {
const name = allDatas.name;
const about = allDatas.about;
const email = allDatas.email;
const gender = allDatas.gender;
const username = allDatas.username;
const birthdate = allDatas.birthdate;
const profileImages = allDatas.profileImages;
const userDatas = {
name,
username,
email,
birthdate,
gender,
profileImages,
about,
};
Return JSON. Stringify(userdatas);
}
useEffect(() => {
Const senduserdatastobackend = async () => {
Const response = await addNewUser(fetchAllUserDatas());
İf (response) {
Navigation. Navigate("mainpagenavigators");
}
}
sendUserDatasToBackend();
}, []);
AddNewUser Metodu ile Json formatındaki verilerin Django tarafına yapılan post isteği:
JavaScript:
const addNewUser = async (userDatas) => {
try {
const response = await axios.post(`${BASE_API_URL}/add_user/`, userDatas,
{
headers: {
'Content-Type': 'application/json',
}
}
);
return response;
}
catch (error) {
console.error("User couldn't save to database: " + error);
}
};
Şimdi kodlarım böyle iken sıkıntısız bir şekilde veritabanına kaydediliyor ama resimler dediğim gibi.
file:///data/user/0/com.cheersfe/cache/rn_image_picker_lib_temp_0d752f09-0fab-40f0-8c89-13dec3695de0.jpgBu formatta geliyor. Şimdi sorularıma geliyorum.
- Kullanıcının diğer bilgileri ile resimleri aynı tabloda olsun istiyorum. Diğer özellikleri JSON olarak kaydedip, fotoğrafları da form-data olarak kayıt edebilir miyim? Eğer edebiliyorsam tek bir API çağrısı üstünden diğer özellikleri JSON, resimi form-data olarak gönderebilir miyim? Yoksa ayrı iki çağrı mı kullanmalıyım?
- Ayrı iki tablo oluşturup önce kullanıcının verilini kaydedip sonra kullanıcı tablosuna foreign key ile bağlayacağım fotoğraflar tablosuna mı kayıt etmeliyim?
- Resimlerle birlikte diğer verileri de form-data olara mı kayıt etmeliyim?
Deneme yaparken karşılaştığım sorun:
Tüm verileri form-data türünden kayıt etmek istedim.
JavaScript:
const fetchAllUserDatas = () => {
const {
name,
about,
email,
gender,
username,
birthdate,
profileImages,
} = allDatas;
console.log(profileImages);
const formData = new FormData();
formData.append('name', name);
formData.append('about', about);
formData.append('email', email);
formData.append('gender', gender);
formData.append('username', username);
formData.append('birthdate', birthdate);
profileImages.forEach((image, index) => {
if (image) {
formData.append(`profileImages[${index}]`, {
uri: image.uri,
type: image.type,
name: image.fileName,
});
}
});
return formData;
}
useEffect(() => {
const sendUserDatasToBackend = async () => {
const response = await addNewUser(fetchAllUserDatas());
if (response) {
navigation.navigate("MainPageNavigators");
}
}
sendUserDatasToBackend();
}, []);
Bu yüzden header ı 'content-type': 'multipart/form-data', olarak değiştirdim.
JavaScript:
const addNewUser = async (formData) => {
try {
const response = await axios.post(`${BASE_API_URL}/add_user/`, formData,
{
headers: {
'Content-Type': 'multipart/form-data',
}
}
);
return response;
}
catch (error) {
console.error("User couldn't save to database: " + error);
}
};
Ama gelen veri yani formdata tüm verileri formdata olarak yaptığım zaman.
catch (error) { console.error("User couldn't save to database: " + error);}Bu kısma düşüyor,
network error hatası alıyorum. Ama form-data değil de JSON objesi olarak gönderdiğimde ise. Backende gidiyor backenddeki hata kodu çalışıyor.Yardımcı olabilirseniz teşekkür ederim.