Amer Abdallah نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 أواجه صعوبة في إنشاء تطبيق لرفع الملفات في جانغو Django. لم أتمكن من العثور على أي أمثلة حديثة لكيفية عمل نظام MVT لرفع الملفات إلى الخادم بأي طريقة. كيف يمكن رفع الملفات بطريقة صحيحة ، هل يمكن لأي أحد شرح مثال بسيط للقيام بهذا الأمر؟ أستخدم الإصدار 3.0 من جانغو Django مع بايثون 3.7 1 اقتباس
1 عبدالله عبدالرحمن11 نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 يمكنك القيام بهذه الخطوات لرفع الملف الى السيرفر بإستخدام Django 1. الإعدادات: myproject / settings.py لتحميل الملفات وتقديمها ، تحتاج إلى تحديد المكان الذي يخزن فيه Django الملفات المرفوعة ومن أي عنوان URL يخدمها Django. MEDIA_ROOT و MEDIA_URL موجودان في settings.py افتراضيًا لكنهما فارغان. راجع الأسطر الأولى في Django Managing Files للحصول على التفاصيل. تذكر أيضًا تعيين قاعدة البيانات وإضافة تطبيق myapp إلى INSTALLED_APPS ... import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) ... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'database.sqlite3'), 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', } } ... MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' ... INSTALLED_APPS = ( ... 'myapp', ) 2. النموذج: myproject / myapp / Models.py بعد ذلك ، تحتاج إلى نموذج به FileField. يخزن هذا الحقل المحدد الملفات على سبيل المثال إلى media / documents / 2011/12/24 / بناءً على التاريخ الحالي و MEDIA_ROOT. انظر مرجع FileField . # -*- coding: utf-8 -*- from django.db import models class Document(models.Model): docfile = models.FileField(upload_to='documents/%Y/%m/%d') 3. النموذج: myproject / myapp / forms.py للتعامل مع التحميل بشكل جيد ، تحتاج إلى نموذج Form. هذا النموذج يحتوي على حقل واحد فقط ولكن هذا يكفي. راجع مرجع Form FileField للحصول على التفاصيل. # -*- coding: utf-8 -*- from django import forms class DocumentForm(forms.Form): docfile = forms.FileField( label='Select a file', help_text='max. 42 megabytes' ) 4. عرض: myproject / myapp / views.py عرض View حيث يحدث المهم. انتبه كيف request.FILES يتم التعامل معها. حيث كان من الصعب حقًا تحديد حقيقة أنه request.FILES['docfile'] يمكن حفظها في models.FileField. حيث يتعامل دالة save() مع تخزين الملف في نظام الملفات تلقائيًا. # -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.template import RequestContext from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from myproject.myapp.models import Document from myproject.myapp.forms import DocumentForm def list(request): # التعامل مع رفع الملف if request.method == 'POST': form = DocumentForm(request.POST, request.FILES) if form.is_valid(): newdoc = Document(docfile = request.FILES['docfile']) newdoc.save() # التحويل الى قائمة المستندات بعد POST return HttpResponseRedirect(reverse('myapp.views.list')) else: form = DocumentForm() # نموذج فارغ غير محدد # تحميل المستندات من أجل صفحة القائمة documents = Document.objects.all() # تصيير صفحة القائمة مع المستندات والنموذج return render_to_response( 'myapp/list.html', {'documents': documents, 'form': form}, context_instance=RequestContext(request) ) 5. عناوين URL للمشروع: myproject / urls.py Django لا يخدم MEDIA_ROOT بشكل افتراضي. سيكون ذلك خطيرًا في بيئة الإنتاج. لكن في مرحلة التطوير ، يمكننا أن نختصر. انتبه إلى السطر الأخير. هذا الخط يمكّن Django من خدمة الملفات من MEDIA_URL. هذا يعمل فقط في مرحلة التطوير. راجع مرجع django.conf.urls.static.static للحصول على التفاصيل. راجع أيضًا هذا النقاش حول خدمة ملفات الوسائط . # -*- coding: utf-8 -*- from django.conf.urls import patterns, include, url from django.conf import settings from django.conf.urls.static import static urlpatterns = patterns('', (r'^', include('myapp.urls')), ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 6. عناوين URL التطبيق: myproject / myapp / urls.py لتسهيل الوصول إلى العرض View ، يجب عليك تحديد عناوين url الخاصة به. لا يوجد الكثير هنا. # -*- coding: utf-8 -*- from django.conf.urls import patterns, url urlpatterns = patterns('myapp.views', url(r'^list/$', 'list', name='list'), ) 7. النموذج أو Template القالب : myproject / myapp / Templates / myapp / list.html الجزء الأخير: نموذج القائمة واستمارة التحميل أدناه. يجب أن يحتوي النموذج على سمة enctype مضبوطة على "multiart / form-data" وأن الطريقة مضبوطة على "post" لجعل التحميل إلى Django ممكنًا. راجع وثائق تحميل الملفات للحصول على التفاصيل. يحتوي FileField على العديد من السمات التي يمكن استخدامها في القوالب. على سبيل المثال ، {{document.docfile.url}} و {{document.docfile.name}} كما في القالب. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Minimal Django File Upload Example</title> </head> <body> <!-- قائمة المستندات المرفوعة --> {% if documents %} <ul> {% for document in documents %} <li><a href="{{ document.docfile.url }}">{{ document.docfile.name }}</a></li> {% endfor %} </ul> {% else %} <p>No documents.</p> {% endif %} <!-- نموذج الرفع وايضاً لاحظ خاصية enctype --> <form action="{% url 'list' %}" method="post" enctype="multipart/form-data"> {% csrf_token %} <p>{{ form.non_field_errors }}</p> <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p> <p> {{ form.docfile.errors }} {{ form.docfile }} </p> <p><input type="submit" value="Upload" /></p> </form> </body> </html> 8. تهيئة فقط قم بتشغيل syncdb و runserver. > cd myproject > python manage.py syncdb > python manage.py runserver أخيرًا ، كل شيء جاهز. في بيئة تطوير Django الافتراضية ، يمكن رؤية قائمة المستندات التي تم تحميلها على localhost:8000/list/. 2 اقتباس
0 Salah Eddin Beriani2 نشر 23 أغسطس 2021 أرسل تقرير نشر 23 أغسطس 2021 تحميل الملف إلى الخادم باستخدام Django هو مهمة سهلة للغاية. يوفر Django طرق مضمنة تساعد في تحميل ملف على الخادم. يتم استخدام طريقة Forms.FileField () لإنشاء إدخال ملف وإرسال الملف إلى الخادم. أثناء العمل مع الملفات ، تأكد من أن علامة نموذج HTML تحتوي على خاصية enctype = "multipart / form-data". لنرى مثالاً index.html إنشاء نموذج HTML يحتوي على مكون إدخال ملف. <body> <form method="POST" class="post-form" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit" class="save btn btn-default">Save</button> </form> </body> forms.py from django import forms class StudentForm(forms.Form): firstname = forms.CharField(label="Enter first name",max_length=50) lastname = forms.CharField(label="Enter last name", max_length = 10) email = forms.EmailField(label="Enter Email") file = forms.FileField() # for creating file input views.py هنا ، طلب param إضافي واحد. الملفات مطلوبة في المنشئ. تحتوي هذه الوسيطة على نسخة الملف الذي تم تحميله. from django.shortcuts import render from django.http import HttpResponse from myapp.functions.functions import handle_uploaded_file from myapp.form import StudentForm def index(request): if request.method == 'POST': student = StudentForm(request.POST, request.FILES) if student.is_valid(): handle_uploaded_file(request.FILES['file']) return HttpResponse("File uploaded successfuly") else: student = StudentForm() return render(request,"index.html",{'form':student}) urls.py from django.contrib import admin from django.urls import path from myapp import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), ] Upload Script تُستخدم هذه الوظيفة لقراءة الملف الذي تم تحميله وتخزينه في الموقع المتوفر. ضع هذا الرمز في ملف functions.py. لكن قم أولاً بإنشاء هذا الملف في المشروع. def handle_uploaded_file(f): with open('myapp/static/upload/'+f.name, 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) 1 اقتباس
السؤال
Amer Abdallah
أواجه صعوبة في إنشاء تطبيق لرفع الملفات في جانغو Django. لم أتمكن من العثور على أي أمثلة حديثة لكيفية عمل نظام MVT لرفع الملفات إلى الخادم بأي طريقة.
كيف يمكن رفع الملفات بطريقة صحيحة ، هل يمكن لأي أحد شرح مثال بسيط للقيام بهذا الأمر؟
أستخدم الإصدار 3.0 من جانغو Django مع بايثون 3.7
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.