जब आप Django या REST API का उपयोग करके Django रेस्ट फ्रेमवर्क (DRF) का उपयोग करके वेबसाइट का अपना पहला संस्करण पूरा करते हैं तो डेटा की आवश्यकता सबसे महत्वपूर्ण हो जाती है। इसी तरह की समस्या के लिए मैंने अपना पिछला लेख लिखा है, जिसमें मैंने सीधे SQLite डेटाबेस और तालिकाओं में डालकर JSON डेटा को Django मॉडल में डंप करने के प्रत्यक्ष दृष्टिकोण पर चर्चा की है। हालाँकि, मैंने यह भी उल्लेख किया है कि Django के पास समान समस्याओं के लिए लोडडेटा, डंपडेटा और फिक्स्चर हैं लेकिन इसके लिए रूपरेखा की थोड़ी अधिक समझ की आवश्यकता है।
आज, मैं उस सीखने की अवस्था की यात्रा करने जा रहा हूं और चर्चा करूंगा कि कैसे अपने सामान्य JSON डेटा को एक फिक्स्चर में परिवर्तित किया जाए और फिर JSON डेटा को एक विशिष्ट मॉडल में डंप करने के लिए loaddata का उपयोग किया जाए। इसी तरह, यदि आपके पास मॉडलों के लिए कुछ डेटा है (एडमिन पेज आदि के माध्यम से जोड़ा जा सकता है) तो उसे अन्य मॉडल के साथ उपयोग करने या अन्य प्रोजेक्ट में उपयोग करने के लिए फिक्स्चर के रूप में कैसे डंप किया जाए।
पिछले लेख में दो भाग हैं: पहला भाग डेटा डंपिंग के लिए आवश्यक सामान्य सेटअप है और दूसरा भाग, JSON डेटा को मॉडल में डंप करने के लिए पायथन स्क्रिप्ट के बारे में है। तो, लेख को छोटा रखें, इस लेख में, मैं दूसरे भाग से शुरू करूंगा और आप इस लेख का अनुसरण करने के लिए पिछले लेख से भाग-I का अनुसरण कर सकते हैं। तो, मान लीजिए कि आपके पास एक बुक ऐप है और जिसमें models.py के अंदर बुक मॉडल है, इसी तरह एपीआई एंडपॉइंट तैयार हैं, जैसे (पिछली पोस्ट का जीथब रेपो):
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 फ़ाइल यहां पा सकते हैं।
हमारे पास एक मॉडल Book और पुस्तकों की जानकारी वाली एक अतिरिक्त JSON फ़ाइल के साथ एक कार्यशील Django प्रोजेक्ट है। तो, अब समस्या क्या है?
हम JSON डेटा को मॉडल में डंप करना चाहते हैं ताकि या तो Django वेबसाइट के साथ उपयोग किया जा सके (उदाहरण के लिए उपयोगकर्ता को प्रदर्शित करने के लिए टेम्पलेट में डेटा पास करना) या एपीआई के माध्यम से फ्रंटएंड पर डेटा परोसना।
Django में एडमिन पेज के किनारे लोडडेटा, फिक्स्चर और डंपडेटा है (आप अपना मॉडल पंजीकृत कर सकते हैं और डेटा डाल सकते हैं) और शेल (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 या किसी अन्य प्रारूप में डेटा है और आप उस डेटा को पहले चर्चा किए गए कमांड loaddata के माध्यम से Django में लोड करना चाहते हैं। लेख इस स्थिति के बारे में है लेकिन अंत में, हम मैनुअल और डंपडेटा आउटपुट की तुलना करने के लिए डंपडेटा का उपयोग करेंगे।)
सामान्य json फ़ाइल को फ़िक्स्चर प्रारूप में परिवर्तित करने के लिए पायथन स्क्रिप्ट पर जाने से पहले, आइए समझें कि Django फ़िक्स्चर फ़ाइल को कैसे देखता है और इसका उपयोग कैसे करता है।
रुचि और क्रम के तीन बिंदु हैं [स्रोत]:
प्रत्येक स्थापित एप्लिकेशन की फिक्स्चर निर्देशिका में: यह Django प्रोजेक्ट के अंदर व्यवस्थित टेम्पलेट या मीडिया या स्थिर फ़ोल्डर जैसी अन्य निर्देशिका के लिए अनुशंसा के समान है। हालाँकि, आप नीचे बताए अनुसार सीधा रास्ता भी दे सकते हैं।
FIXTURE_DIRS सेटिंग में सूचीबद्ध किसी भी निर्देशिका में
फ़िक्स्चर द्वारा नामित शाब्दिक पथ में: छोटे प्रोजेक्ट या ऐप के साथ काम करता है लेकिन फिक्स्चर के लिए उचित अनुशंसित स्थान होना बेहतर है ताकि परीक्षण या डिबगिंग आदि के साथ इसका उपयोग करना आसान हो।
नोट: फिक्स्चर का उपयोग करने का एक प्रमुख लाभ फिक्स्चर पर संपीड़न लागू करना और उसका उपयोग करना है।
यह तालिका के सभी डेटा को मानक आउटपुट में आउटपुट करने के लिए django-admin कमांड है।
नोट 1: नामित एप्लिकेशन से जुड़े डेटाबेस में सभी डेटा को मानक आउटपुट पर आउटपुट करता है।
नोट 2: डंपडेटा के आउटपुट को लोडडेटा के लिए इनपुट के रूप में उपयोग किया जा सकता है। (फिक्स्चर के रूप में)
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 प्रबंधक इसे आसानी से ढूंढ सके और फिर सभी डेटा को बुक मॉडल में डंप करने के लिए लोडडेटा कमांड चला सके।
$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.')
आप समान कार्य के लिए Django-एक्सटेंशन से डंपस्क्रिप्ट भी देख सकते हैं।
मुझे आशा है कि यह मददगार होगा।
नोट: समय की कमी के कारण लेख को ठीक से प्रूफरीड और स्वरूपित नहीं किया गया है। इसलिए, कृपया इसका सावधानीपूर्वक उपयोग करें और किसी भी त्रुटि, संदेह या प्रश्न के लिए नीचे टिप्पणी छोड़ें। मैं अतिरिक्त समय में उत्तर दूंगा और लेख को संपादित करूंगा।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3