تصبح الحاجة إلى البيانات أكثر أهمية عند إكمال الإصدار الأول من موقع الويب الخاص بك باستخدام Django أو REST API باستخدام Django Rest Framework (DRF). لقد كتبت مقالتي السابقة عن مشكلة مماثلة، حيث ناقشت طريقة مباشرة لتفريغ بيانات JSON في نموذج Django عن طريق الإدراج مباشرة في قاعدة بيانات وجداول SQLite. ومع ذلك، فقد ذكرت أيضًا أن Django لديه بيانات تحميل وبيانات تفريغ وتركيبات لمشاكل مماثلة ولكنها تحتاج إلى مزيد من الفهم لإطار العمل.
اليوم، سأسافر عبر منحنى التعلم هذا وأناقش كيفية تحويل بيانات JSON العادية إلى أداة ثابتة ثم استخدم loaddata لتفريغ بيانات JSON إلى نموذج محدد. وبالمثل، إذا كان لديك بعض البيانات الخاصة بالنماذج (يمكن إضافتها عبر صفحة المسؤول وما إلى ذلك) فكيف يمكنك تفريغها كتركيبات لاستخدامها مع نموذج آخر أو استخدامها في مشروع آخر.
تتكون المقالة السابقة من جزأين: الجزء الأول هو الإعداد العادي المطلوب لتفريغ البيانات والجزء الثاني، يتعلق ببرنامج بايثون النصي لتفريغ بيانات JSON في النموذج. لذا، اجعل المقال قصيرًا، في هذه المقالة سأبدأ من الجزء الثاني ويمكنك متابعة الجزء الأول من المقالة السابقة لمتابعة هذا المقال. لذا، بافتراض أن لديك تطبيق كتاب ويوجد فيه نموذج كتاب داخلmodels.py، وبالمثل فإن نقاط نهاية واجهة برمجة التطبيقات (API) جاهزة، مثل (Github repo للمنشور السابق):
http://127.0.0.1:8000/api/books/1
أو تريد ببساطة تحميل البيانات إلى نموذج الكتاب لموقع ويب يستند إلى Django. يمكنك اتباع التعليمات البرمجية من مستودع git التالي.
تفريغ بيانات JSON إلى النموذج
نظرًا لمستودعين، يمكنك استخدام أي شخص لمتابعة المقالة من هنا، تحتاج فقط إلى الأشياء التالية:
مثال 1: نموذج الكتاب في book/models.py
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) isbn = models.CharField(max_length=13, unique=True) pages = models.PositiveIntegerField() language = models.CharField(max_length=30) def __str__(self): return self.title
books.json
[ { "title": "Example Book 1", "author": "John Doe", "isbn": "1234567890123", "pages": 350, "language": "English" }, { "title": "Example Book 2", "author": "Kumar Ajit", "isbn": "9876543210987", "pages": 280, "language": "Hindi" } ]
مثال 2: نموذج الكتاب من المقالة السابقة
from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) price = models.DecimalField(max_digits=6, decimal_places=2) def __str__(self): return self.title
يمكنك العثور على ملف data.json هنا.
لدينا مشروع Django عامل مع نموذج كتاب وملف JSON إضافي يحتوي على معلومات الكتب. إذن، الآن ما هي المشكلة؟
نريد تفريغ بيانات JSON في النموذج بحيث يمكن استخدامها إما مع موقع Django (على سبيل المثال، تمرير البيانات إلى القالب لعرضها على المستخدم) أو تقديم البيانات عبر واجهة برمجة التطبيقات (API) إلى الواجهة الأمامية.
يحتوي Django على بيانات تحميل وتركيبات وبيانات تفريغ، إلى جانب صفحة المسؤول (يمكنك تسجيل النموذج الخاص بك وإدراج البيانات) وshell (لمعالجة قاعدة البيانات مباشرة باستخدام SQL أو ORM). ومع ذلك، يبدو تحميل البيانات عبر التركيبات أفضل إذا كنت تريد دمج البيانات الكبيرة أو تريد القيام بذلك عدة مرات (غالبًا ما تكون حالة استخدام أثناء التطوير والاختبار).
لنبدأ بشرح هذه الأدوات ثم نتعمق في نص بايثون لتحقيق مهمة تفريغ البيانات.
$django-admin loaddata
التركيب عبارة عن مجموعة من الملفات التي تحتوي على المحتويات المتسلسلة لقاعدة البيانات. كل تركيبات لها اسم فريد، ويمكن توزيع الملفات التي تتكون منها التركيبات عبر أدلة متعددة، في تطبيقات متعددة. [مصدر]
دعنا ننتقل إلى الجزء المستقبلي من المقالة ونلقي نظرة على تركيبات الكتب.
[ { "model": "book.book", "pk": 40, "fields": { "title": "Example Book 1", "author": "John Doe", "isbn": "123456734890123", "pages": 350, "language": "English" } }, { "model": "book.book", "pk": 41, "fields": { "title": "Example Book 2", "author": "Kumar Ajit", "isbn": "9876543455210987", "pages": 280, "language": "Hindi" } } ]
إذا ألقيت نظرة على ملف التثبيت، فلا بد أنك وجدت أنه مجرد ملف JSON آخر يحتوي على المزيد من أزواج القيمة الرئيسية وهذه بيانات وصفية لنماذج/جداول Django. لذا، نعم، أنت على حق وهدفنا هو تحويل تنسيق books.json الخاص بنا إلى تنسيق ثابت حتى تتعرف عليه أداة إدارة Django وتقوم بتفريغ البيانات في جدول/جداول مناسبة.
الآن، لإنشاء تركيبات، يمكن أن يكون لديك حالتان: 1) لديك بيانات في النماذج وتريد إنشاء تركيبات للاستخدام المستقبلي أو الاختبار وما إلى ذلك.
2) ليس لديك بيانات في النماذج/الجداول ولكن لديك بيانات في مصادر خارجية مثل json أو csv أو أي تنسيقات أخرى وتريد تحميل تلك البيانات في Django عبر الأمر الذي تمت مناقشته مسبقًا loaddata .( هذا المقالة تدور حول هذا الموقف ولكن في النهاية، سنستخدم بيانات التفريغ لمقارنة الإخراج اليدوي وبيانات التفريغ.)
قبل الانتقال إلى برنامج python النصي لتحويل ملف json العادي إلى تنسيق ثابت، دعنا نفهم كيف يبحث Django عن ملف التثبيت وكيفية استخدامه.
هناك ثلاث نقاط اهتمام وترتيب [المصدر]:
في دليل التركيبات لكل تطبيق مثبت: يشبه هذا التوصية الخاصة بدليل آخر مثل القالب أو الوسائط أو المجلد الثابت المنظم داخل مشروع Django. ومع ذلك، يمكنك أيضًا إعطاء مسار مباشر كما هو مذكور أدناه.
في أي دليل مدرج في إعداد FIXTURE_DIRS
في المسار الحرفي المسمى بواسطة التركيبات: يعمل مع مشروع أو تطبيق أصغر ولكن من الأفضل أن يكون لديك موقع مناسب موصى به للتركيبات بحيث يكون من السهل استخدامه مع الاختبار أو تصحيح الأخطاء وما إلى ذلك.
ملاحظة: إحدى الفوائد الرئيسية لاستخدام التركيبات هي تطبيق الضغط واستخدامه على التركيبات.
هذا أمر Django-admin لإخراج جميع بيانات الجدول إلى الإخراج القياسي.
ملاحظة 1: يتم إخراج جميع البيانات الموجودة في قاعدة البيانات المرتبطة بالتطبيق (التطبيقات) المحددة إلى الإخراج القياسي.
ملاحظة 2: يمكن استخدام مخرجات dumpdata كمدخل لبيانات التحميل. (كتركيبة)
django-admin dumpdata [app_label[.ModelName]
يمكنك قراءة المزيد من هذا الرابط.
from django.apps import apps import django import os import json # Set the Django settings module os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dataloading.settings') django.setup() # get all models models = apps.get_models() # Get the model names for model in models: print(model) print(model.__name__) # Choose Model to create fixtures from book.models import Book # Get all field names field_names = [field.name for field in Book._meta.get_fields()] fixture_name = "books.json" #read the data file json, csv etc. with open('data.json','r') as fp: books= json.load(fp) books_fixture =[] # get the pk value from model , if there is data pk=1 # iterate all the books in json file for book in books: book_fixture={} # Add model name (most important for fixture) book_fixture['model']= 'book.book' pk =1 book_fixture['pk']=pk # assuming the data has same fields name as model else mapping is required book_fixture['fields']=book books_fixture.append(book_fixture) # Writing converted Json as file for fixture with open(fixture_name,'w') as fp: json.dump(books_fixture,fp) # print(field_names) # if __name__ =='__main__' : #create_book()
بمجرد إنشاء ملفك كـ books.json. حان الوقت لنقله/نسخه إلى الموقع المناسب (كتاب/تركيبات/كتاب/) حتى يتمكن مدير Django من العثور عليه بسهولة ثم تشغيل أمرloaddata لتفريغ جميع البيانات إلى نموذج الكتاب.
$mv books.json book/fixtures/book/ $python manage.py loaddata book/fixtures/book/books.json
يمكنك أيضًا استخدام برنامج نصي مشابه لكتابة البيانات مباشرةً لنموذج طريقة الغناء .save(). فيما يلي طريقة create_book() التي يمكن استخدامها لإدراج سجل بيانات واحد أو أكثر (حلقات) في نموذج الكتاب.
# def create_book(): # book = Book( # title="This is from script", # author ="ajit", # isbn = "2024-0809", # pages=300, # language ='English' # ) # book.save() # print(f'Book {book.title} by {book.author} created.')
يمكنك أيضًا البحث في Dumpscript من ملحقات Django للقيام بمهمة مماثلة.
آمل أن يكون مفيدًا.
ملاحظة: لم يتم تدقيق المقالة وتنسيقها بشكل صحيح بسبب ضيق الوقت. لذا، يرجى استخدامه بعناية وترك التعليقات أدناه لأية أخطاء أو شكوك أو أسئلة. سأقوم بالرد وتحرير المقال الإضافي.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3