يعني بعد ان استقبل محتوى الفورم من المستخدم من ال html أريد أن يقوم الجافا سكريبت بالتعديل على بيانات json
من اجل ان اقوم بعدها باستقبال البيانات في بايثون من ملف ال json
وما اريده الان هو ان اعدل على ملف الjson من خلال javascript ؟
ارجوا المساعدة وهل هذا الطريق الذي اسلكه صحيح؟
var app2 = new Vue({
el: '#form',
data: {
ses:"sd"
},
methods:{
save(event){
var x = new XMLHttpRequest();
x.open('GET',"data.json");
x.withCredentials = true;
var app =this;
x.onload = function(){
var data = JSON.parse(x.responseText);
app.ses = data.name;
};
x.send();
}
}
});
الذي فهمته منك هو انك تحاول اخذ بيانات من ملف JSON وتريد تعديل الملف والكتابة عليه بإستخدام الجافاسكربت ومن ثم الـ Python ستقوم بأخذ البيانات من ملف الـ JSON بعد تعديلة.
في الحقيقة لا يمكنك إنشاء وتعديل الملفات بإستخدام الجافاسكربت وإنما ستحتاج إلى لغة من جانب السيرفر للقيام بذلك مثل node.js. لكن يظل قيامك بهذا الشئ بهذه الطريقة غير مقنع لي لذا إشرح لي ماهو الهدف وماهو البرنامج الذي تعمل عليه حتى نستطيع الخروج بأفضل طريقة لتحقيق الهدف منه.
هل هذا الطريق الذي اسلكه صحيح؟
الطريقة الأصح هو أن تقوم بأخذ البيانات من الفورم وإرسالها للسيرفر مباشرة
انا كنت اود ان ارسل واستقبل البيانات بين البايثون وال template بدون ان استخدم تعليمات بايثون داخل ملفات html
بحيث اجعل ملف json هو الوسيط بحيث يقوم بايثون باخذ البيانات من الداتا بيس يرسلها لملف ال json وبعدها يأتي دور الجافا سكربت اخص بالذكر هنا المكتبة التي اعمل عليها وهي vue js سيقوم باخذ البيانات من json وعرضها على الواجهة html
الى هنا جرت الامور بشكل جيد ولم أواجه مشكلة
لكنني عندما أردت ان ارسل بينات بالعكس من ال html الى قاعدة البيانات فانني اردت أن اقوم بأخذ البيانات من الفورم وارسالها عن طريق جافا سكربت لملف ال json من اجل ان ياخذها بايثون وينقلها لقاعدة البيانات، لكن مع الاسف م استطع لتعديل من خلال جافا سكربت على ملف ال json وهنا وقفت
أنا اعرف طريقة البعث عن طريق الفورم للبايثون مباشرة لكنني أود افصل البايثون تماما عن ال html
ما رأيك؟
أولا قد قمت بنقل مجلد js داخل static لأنه لم يتم تحميل ملفات ال js عندي، وقمت باستدعائهم من خلال url_for('static',filename='....')
هذه محاولة مني إستطعت من خلالها أن أعدل أو بالأحرى أكتب على ملف data.json عند ارسال محتوى جديد إلى السيرفر، ستجد التعليقات في الكود تشرح ذلك
ولكن هل هي الطريقة الأنسب أو لا سيجيبك الأستاذ @YaserAlnajjar حاولت المساعدة بطريقتي الخاصة لأنني جديدة في هذا المجال
شكرا لك
انا فعلا كنت قد عملت بطريقتك ونجحت معي لكنني حسب نصيحة الاستاذ ياسر ان نتجاز فكرة وجود ملف json
وانا اردت ان اطبقها لكن لا ادري لاذا توجهني هذه المشكلة
من الأحسن أن تتبع طريقة الأستاذ ياسر مثل المثال الذي أعطاه لك، لكن بمعرفتي حاولت أن أجعل ملف data.json قابل للكتابة والتعديل باستقبال البيانات المدخلة من قبل المستخدم واضافتها إلى الملف
في انتظار خبرة الأستاذ ياسر
if request.method == "POST":
date = request.get_json([""])
print(date)
return date["name"]
مشي الحال
بس ما بعرف ليش لازم يكون get_json([""])
يعني لازم يتنكتب بهالشكل وعادي شو ماحطيت داخل علامتي التنصيص ما بيرق
والنتيجة انو بيعطيك كل البيانات المرسلة
دالة get_json() لا تستطيع أن تمرر داخلها البيانات لأنها ستجلب لك كل البيانات على شكل json، لها ثلاث براميترات force, silent & cache ففي حالة أنها ترجع لك None تمرر داخلها force بقيمة True وفي حالة مررت فيها silent لا تطبع لك الأخطاء في حالة حدوثها أما الـcache فهي تخزن البيانات دائما على شكل json في حالة احتجتها لاحقا http://flask.pocoo.org/docs/1.0/api/#flask.Request.get_json
بحيث سترسل الطلب ajax إلى الـ endpoint وهي تأخذ البيانات وتضيفها… وبالنسبة للصفحة، فأنت ستضيف البيانات بشكل تلقائي (بإفتراض أن السيرفر أضافها) بمجرد استقبال النتيجة 200 OK من السيرفر (يجب أن تتلقى النتيجة من السيرفر في Vue داخل الـ promise).
بالمناسبة في هذه الحالة الأفضل تستعمل get_json() وأيضاً تجعل الـ content type هو json (حينما ترسل الطلب من Vue) لكي يتم التعامل مع الأمر بالشكل الصحيح.