Mohssen A Mohssen نشر 16 فبراير 2022 أرسل تقرير نشر 16 فبراير 2022 لدي نموذج بسيط للغاية ويحتوي على حقل من نوع ImageField بالشكل التالي: image = models.ImageField('image', upload_to='uploads/') أريد أن أسمح للمستخدم بكتابة عنوان URL خاص بصورة موجودة على الإنترنت ثم تخزين هذه الصورة في هذا الحقل. كيف أقوم بتخزين صورة online في هذا الحقل؟ أعتقد أنه يجب تحميل الصورة في كود جانغو Django ثم تخزينها في ملف ما، كيف أقوم بهذا الأمر؟ 1 اقتباس
1 مسعود زاهي نشر 16 فبراير 2022 أرسل تقرير نشر 16 فبراير 2022 نعم كما تفضلت يجب تحميلُ الصورة ثم تخزينها. يمكن إستعمال مكتبة requests لتحميلها على الشكل التالي: from urllib.parse import urlparse import requests from django.core.files.base import ContentFile from myapp.models import Photo img_url = 'هنا ضع رابط الصورة' name = urlparse(img_url).path.split('/')[-1] # جلب اسم الصورة من الرابط # عادةً يكونُ اسم الصورة هو آخر كلمة في الرابط photo = Photo() # إنشاء كائن للنموذج response = requests.get(img_url) # تحميل الصورة باستخدام مكتبة requests if response.status_code == 200: # نحفظ الصورة في الحقل باستخدام الدالة # save photo.image.save(name, ContentFile(response.content), save=True) أو يُمكن حفظ الصورة في ملف مؤقت قبل حفظها في النموذج: from django.core.files import File from django.core.files.temp import NamedTemporaryFile photo = Photo() photo.save() # نحمل الصورة ونحفظها داخل ملف مؤقت من نوع # NamedTemporaryFile # باستعمال المكتبة # urlopen image_url = 'هنا ضع رابط الصورة' img_temp = NamedTemporaryFile(delete = True) img_temp.write(urlopen(image_url).read()) img_temp.flush() # نحفظ الصورة في النموذج photo.image.save("image_%s" % photo.pk, File(img_temp)) photo.save() 1 اقتباس
1 Bassam Ahmed3 نشر 19 فبراير 2022 أرسل تقرير نشر 19 فبراير 2022 الأمر بسيط حيث في البدايه 1 - يجب استدعاء تلك السطور في ملف models.py from django.core.files import File from urllib import request import os بالعلم أن السطر " import os " يمكن عدم استدعاؤه ( اختياري ) 2 - يتم إنشاء class في ملف models.py كالمثال التالي : class Item(models.Model): image_file = models.ImageField(upload_to='images') image_url = models.URLField() - حيثُ أن image_file من نوع ImageField وهو الحقل الذي يتم رفع به الصوره بشكل تقليدي و أن image_url من نوع URLField وهو يقبل إدخال الروابط فقط 3 - يتم تطبيق الفكره المُراد تطبيقها عن طريق كتابة الداله التاليه أسفل ال class الذي تم انشاؤه def get_remote_image(self): if self.image_url and not self.image_file: result = request.urlretrieve(self.image_url) self.image_file.save( os.path.basename(self.image_url), File(open(result[0], 'rb')) ) self.save() حيثُ أن تلك الداله تهدف إلى جعل الأمر منطقياً من خلال معادله بسيطه تٌفيد بأنها في حال وجود ملف للصوره تم رفعه في خانة " image_file " يتم تنزيل الملف من الرابط المتواجد داخل خانة " image_url " و حفظها و اعتبارها هي الصوره الأساسيه 1 اقتباس
السؤال
Mohssen A Mohssen
لدي نموذج بسيط للغاية ويحتوي على حقل من نوع ImageField بالشكل التالي:
أريد أن أسمح للمستخدم بكتابة عنوان URL خاص بصورة موجودة على الإنترنت ثم تخزين هذه الصورة في هذا الحقل.
كيف أقوم بتخزين صورة online في هذا الحقل؟
أعتقد أنه يجب تحميل الصورة في كود جانغو Django ثم تخزينها في ملف ما، كيف أقوم بهذا الأمر؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.