"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تفريغ بيانات JSON إلى نماذج Django: استخدام إعداد Django والأوامر

تفريغ بيانات JSON إلى نماذج Django: استخدام إعداد Django والأوامر

تم النشر بتاريخ 2024-09-02
تصفح:978

Dumping JSON data to Django Models: Using Django Setup and Commands

تصبح الحاجة إلى البيانات أكثر أهمية عند إكمال الإصدار الأول من موقع الويب الخاص بك باستخدام 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. مشروع Django عامل يحتوي على نموذج كتاب مع أو بدون ميزات API
  2. ملف 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 عن ملف التثبيت وكيفية استخدامه.

هناك ثلاث نقاط اهتمام وترتيب [المصدر]:

  1. في دليل التركيبات لكل تطبيق مثبت: يشبه هذا التوصية الخاصة بدليل آخر مثل القالب أو الوسائط أو المجلد الثابت المنظم داخل مشروع Django. ومع ذلك، يمكنك أيضًا إعطاء مسار مباشر كما هو مذكور أدناه.

  2. في أي دليل مدرج في إعداد FIXTURE_DIRS

  3. في المسار الحرفي المسمى بواسطة التركيبات: يعمل مع مشروع أو تطبيق أصغر ولكن من الأفضل أن يكون لديك موقع مناسب موصى به للتركيبات بحيث يكون من السهل استخدامه مع الاختبار أو تصحيح الأخطاء وما إلى ذلك.

ملاحظة: إحدى الفوائد الرئيسية لاستخدام التركيبات هي تطبيق الضغط واستخدامه على التركيبات.

تفريغ البيانات

هذا أمر Django-admin لإخراج جميع بيانات الجدول إلى الإخراج القياسي.

ملاحظة 1: يتم إخراج جميع البيانات الموجودة في قاعدة البيانات المرتبطة بالتطبيق (التطبيقات) المحددة إلى الإخراج القياسي.
ملاحظة 2: يمكن استخدام مخرجات dumpdata كمدخل لبيانات التحميل. (كتركيبة)

django-admin dumpdata [app_label[.ModelName] 

يمكنك قراءة المزيد من هذا الرابط.

نص بايثون من json البسيط إلى تركيبات Django.

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 للقيام بمهمة مماثلة.

آمل أن يكون مفيدًا.

ملاحظة: لم يتم تدقيق المقالة وتنسيقها بشكل صحيح بسبب ضيق الوقت. لذا، يرجى استخدامه بعناية وترك التعليقات أدناه لأية أخطاء أو شكوك أو أسئلة. سأقوم بالرد وتحرير المقال الإضافي.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/ajitkumar/dumping-json-data-to-django-models-using-django-setup-and-commands-1hj2?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang @163.com حذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3