"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पायथन और Django में CRUD संचालन - भाग 2

पायथन और Django में CRUD संचालन - भाग 2

2024-07-29 को प्रकाशित
ब्राउज़ करें:170

हमारे पिछले लेख में, हमने Django प्रोजेक्ट स्थापित करने की मूल बातें शामिल कीं और अपना व्यायाम मॉडल बनाया, जिसे हमने एक सूची के रूप में सामने के अंत में प्रदर्शित किया। इस लेख में, हम सीआरयूडी संचालन के बारे में विस्तार से जानेंगे। उन अपरिचित लोगों के लिए, सीआरयूडी का अर्थ है बनाएं, पढ़ें, अपडेट करें और हटाएं-अनिवार्य रूप से चार मूलभूत क्रियाएं जो आप अपने डेटा पर कर सकते हैं।

अब जब हमने ऐप फ़ोल्डर में अपना एपीआई सेट कर लिया है, तो हम अनुरोधों को बनाने, अपडेट करने और हटाने के लिए केवल इंडेक्स व्यू का विस्तार करेंगे।

फार्म

आइए एक फॉर्म सेट करें जो उपयोगकर्ताओं को व्यायाम बनाने की अनुमति देता है। हम इस उद्देश्य के लिए एक बार फिर HTML टेम्प्लेट का उपयोग करेंगे। आरंभ करने के लिए, ऐप/टेम्पलेट्स फ़ोल्डर में add_exercise.html नामक एक नया टेम्प्लेट बनाएं।

{% csrf_token %}

अगला, हमारे Index.html टेम्पलेट में, हम निम्नलिखित विधि का उपयोग करके add_exercise.html टेम्पलेट शामिल करेंगे:

{% extends "base.html" %} {% block content %}
    

Exercises

{% include 'add_exercise.html' %} ... {% endblock %}

हम यहां शामिल टैग का उपयोग कर रहे हैं, जो HTML टेम्प्लेट में कंपोजिबिलिटी को बढ़ावा देता है, जिससे हमारे कोड को बनाए रखना और समझना आसान हो जाता है। यदि आप अपने ब्राउज़र में पृष्ठ को ताज़ा करते हैं, तो आपको स्क्रीन पर फ़ॉर्म दिखाई देना चाहिए।

Add Exercise

हमारे HTML में, हम

टैग का उपयोग POST पर सेट विधि विशेषता और / की ओर इंगित करने वाली क्रिया विशेषता के साथ कर रहे हैं, जो वही समापन बिंदु है जिसका उपयोग हम अभ्यासों की सूची लाने के लिए करते हैं।

इस संदर्भ में, csrf_token एक सुरक्षा सुविधा है जो यादृच्छिक रूप से उत्पन्न गुप्त मान द्वारा दर्शायी जाती है। यह हमारे फ़ॉर्म सबमिशन को जालसाजी हमलों से बचाने में मदद करता है, जिसका मतलब है सीएसआरएफ- क्रॉस-साइट अनुरोध जालसाजी। प्रत्येक उपयोगकर्ता सत्र के लिए एक अद्वितीय टोकन उत्पन्न होता है, और यह तृतीय-पक्ष साइटों द्वारा पहुंच योग्य नहीं है, जिससे अनधिकृत परिवर्तनों को होने से रोका जा सकता है।

हमारे फॉर्म में दो इनपुट फ़ील्ड शामिल हैं: एक शीर्षक के लिए और दूसरा तारीख के लिए, हमारे व्यायाम मॉडल की स्कीमा के बाद। जब फॉर्म सबमिट किया जाता है, तो शीर्षक और दिनांक के मान को POST अनुरोध के माध्यम से / एंडपॉइंट पर भेजा जाएगा, जिसे बाद में ऐप/views.py में हमारे इंडेक्स व्यू द्वारा संसाधित किया जाएगा।

आदर्श

Django में, हम CRUD संचालन के अनुरूप विशिष्ट तरीकों को जोड़कर अपने व्यायाम मॉडल-अनिवार्य रूप से एक पायथन वर्ग-को बढ़ा सकते हैं। App/models.py फ़ाइल में, हम निम्नलिखित शामिल करेंगे:

class Exercise(models.Model):
    ...

    def create(request):
        title = request.POST.get('title')
        date = request.POST.get('date')

        exercise = Exercise.objects.create(title=title, date=date)

        return exercise

जैसा कि ऊपर दिए गए कोड में दिखाया गया है, हम पोस्ट अनुरोध से शीर्षक और तारीख तक पहुंच सकते हैं। फिर, हम एक नया अभ्यास बनाने और बनाए गए उदाहरण को वापस करने के लिए Django के अंतर्निहित ORM का उपयोग कर सकते हैं।

हम उसी सूचकांक दृश्य का लाभ उठाएंगे जिसका उपयोग हम अभ्यासों को पुनः प्राप्त करने के लिए करते हैं, यह जांचने के लिए इसका विस्तार करेंगे कि अनुरोध विधि POST है या नहीं। यदि ऐसा है, तो हम अनुरोध ऑब्जेक्ट को उस क्लास विधि में पास कर देंगे जिसे हमने पहले परिभाषित किया था। एक बार अभ्यास बन जाने के बाद, हम उपयोगकर्ता को होमपेज पर वापस रीडायरेक्ट करेंगे या पेज रिफ्रेश करेंगे, यह सुनिश्चित करते हुए कि नया जोड़ा गया अभ्यास स्क्रीन पर दिखाई दे।

from django.http import HttpResponseRedirect

from app import models

...

def index(request):
    if request.method == 'POST':
        models.Exercise.create(request)
        return redirect('/')

    exercises = (
        models.Exercise.objects.all().order_by("created_at")
    )
    return render(request, "index.html", context={'exercises': exercises})

अब एक नया अभ्यास बनाने का प्रयास करें, और आपको यह सूची के नीचे दिखाई देगा।

व्यायाम अद्यतन करें

आइए अभ्यासों में अद्यतन कार्यक्षमता जोड़ने से पहले अपने कोड को थोड़ा पुनः सक्रिय करें। हम अभ्यासों को उनके स्वयं के टेम्पलेट में स्थानांतरित कर देंगे जिसे एक्सरसाइज.एचटीएमएल कहा जाता है।

Exercises

{% include 'add_exercise.html' %}
    {% for exercise in exercises %}
  • {% include 'exercise.html' %}
  • {% endfor %}

ऐप/टेम्प्लेट्स फ़ोल्डर में exercise.html के लिए एक टेम्पलेट बनाएं, और हम इसमें निम्नलिखित HTML जोड़ देंगे:

{% csrf_token %}

हम सूची में प्रत्येक अभ्यास के लिए

टैग का फिर से उपयोग कर रहे हैं और व्यायाम.आईडी के लिए एक छिपा हुआ इनपुट जोड़ रहे हैं, जिसका उपयोग व्यायाम को अपडेट करने के लिए किया जाएगा। ब्राउज़र पर वापस जाएँ और पृष्ठ को ताज़ा करें; आपको सूची में प्रत्येक व्यायाम के लिए एक फॉर्म देखना चाहिए, जिसमें प्रत्येक इनपुट संबंधित व्यायाम डेटा से पहले से भरा हुआ होगा।

CRUD Operations In Python & Django - Part 2

ध्यान दें कि हम फॉर्म विधि के रूप में PUT का उपयोग नहीं कर रहे हैं; इसके बजाय, हम POST का उपयोग कर रहे हैं। ऐसा इसलिए है क्योंकि व्यू हैंडलर केवल GET और POST अनुरोधों के माध्यम से भेजे गए डेटा को पार्स कर सकते हैं, PUT और DELETE के लिए कोई अंतर्निहित समर्थन नहीं है। जब हमने एक्सरसाइज क्लास में क्रिएट क्लास विधि बनाई, तो आपने देखा होगा कि हमने request.POST.get('title') का उपयोग किया था। हालाँकि यह POST अनुरोधों के लिए काम करता है, लेकिन अनुरोध ऑब्जेक्ट में कोई PUT या DELETE विधियाँ उपलब्ध नहीं हैं।

लेकिन हम पोस्ट और पुट अनुरोध के बीच अंतर कैसे करते हैं? यदि आप हमारे द्वारा पहले बनाए गए फॉर्म की जांच करते हैं, तो आप देखेंगे कि हमने सबमिट बटन को एक नाम विशेषता दी है। हम इस विशेषता तक उसी तरह पहुंच सकते हैं जैसे हमने request.POST.get('update') का उपयोग करके शीर्षक और दिनांक तक पहुंच बनाई थी।

आइए समान परिवर्तन को शामिल करने के लिए क्रिएट एक्सरसाइज फॉर्म को अपडेट करें।

...

और हमारे अभ्यास दृश्य में, हम अनुरोधों के बीच अंतर करने के लिए निम्नलिखित परिवर्तन करेंगे।

def index(request):
    if request.method == 'POST':
        create = 'create' in request.POST
        update = 'update' in request.POST

        if create == True:
            models.Exercise.create(request)
        elif update == True:
            models.Exercise.update(request)

        return redirect('/')

    exercises = (
        models.Exercise.objects.all().order_by("created_at")
    )
    return render(request, "index.html", context={'exercises': exercises})

हम बटन के नाम की जांच करते हैं और तदनुसार उचित व्यायाम विधि के लिए अनुरोध अग्रेषित करते हैं।

आइए ऐप/मॉडल.py में व्यायाम मॉडल में एक अपडेट क्लास विधि जोड़ें।

def update(request):
    id = request.POST.get('id')
    title = request.POST.get('title')
    date = request.POST.get('date')

    exercise = Exercise.objects.filter(pk=id).update(title=title, date=date)

    return exercise

डेटाबेस में एक पंक्ति को अद्यतन करने के लिए, हम व्यायाम मॉडल पर उपलब्ध अद्यतन विधि का उपयोग कर सकते हैं। हालाँकि, अपडेट करने से पहले, हमें यह सुनिश्चित करना होगा कि हम सही अभ्यास अपडेट कर रहे हैं। ऐसा करने के लिए, हम अभ्यासों को प्राथमिक कुंजी, जो कि आईडी है, के आधार पर फ़िल्टर करते हैं और केवल उस विशिष्ट अभ्यास को अपडेट करते हैं।

व्यायाम हटाएँ

इसी तरह, हम एक्सरसाइज.एचटीएमएल टेम्पलेट में प्रत्येक अभ्यास के आगे एक डिलीट बटन जोड़ देंगे।

...

हम नाम विशेषता के मान के रूप में डिलीट सेट करेंगे, और view.py में, हम डिलीट ऑपरेशन को संभालने के लिए if...elif स्टेटमेंट का विस्तार करेंगे।

def index(request):
    if request.method == 'POST':
        create = 'create' in request.POST
        update = 'update' in request.POST
        delete = 'delete' in request.POST

        if create == True:
            models.Exercise.create(request)
        elif update == True:
            models.Exercise.update(request)
        elif delete == True:
            models.Exercise.delete(request)

        return redirect('/')

    exercises = (
        models.Exercise.objects.all().order_by("created_at")
    )
    return render(request, "index.html", context={'exercises': exercises})

और एक्सरसाइज मॉडल में, हम क्लास मेथड डिलीट जोड़ देंगे।

def delete(request):
    id = request.POST.get('id')
    is_deleted = Exercise.objects.filter(pk=id).delete()

    if is_deleted == 1:
        return True

    return False

इस अतिरिक्त के साथ, हमने अपने पायथन और डीजेंगो एप्लिकेशन में सीआरयूडी संचालन को सफलतापूर्वक कार्यान्वित किया है।

चाबी छीनना

  1. Django व्यू हैंडलर PUT और DELETE अनुरोधों का समर्थन नहीं करते हैं, क्योंकि वे उन HTTP तरीकों के लिए क्वेरी पैरामीटर या अनुरोध बॉडी को पार्स नहीं करते हैं। परिणामस्वरूप, हमें POST अनुरोधों पर भरोसा करना चाहिए और अनुरोध निकाय में एक अतिरिक्त फ़ील्ड पास करके उनके बीच अंतर करना चाहिए।
  2. ध्यान दिया कि मैं उसी मार्ग से POST अनुरोध कर रहा हूं जहां से मैं अभ्यास प्राप्त कर रहा हूं। यह महत्वपूर्ण है क्योंकि यदि आपको अनुरोधों को संभालने के लिए /एपीआई/एक्सरसाइज जैसा कोई समापन बिंदु बनाना है, तो आपको मैन्युअल रूप से पुनर्निर्देशन को प्रबंधित करने की आवश्यकता होगी। अन्यथा, अनुरोध के बाद
    टैग का व्यवहार उपयोगकर्ता को एक्शन विशेषता में निर्दिष्ट अंतिम बिंदु पर पुनर्निर्देशित करना है। इसलिए, आपको उपयोगकर्ता को मैन्युअल रूप से वांछित पृष्ठ पर रीडायरेक्ट करना होगा, या हमारे मामले में, उपयोगकर्ता को उसी पृष्ठ पर रखना होगा।
from django.http import HttpResponseRedirect

def index(request):
    ...

    return redirect('/')
    # or
    return HttpResponseRedirect(request.META['HTTP_REFERER'])

संक्षेप में, अपने POST अनुरोधों को प्रभावी ढंग से प्रबंधित करके और उचित पुनर्निर्देशन सुनिश्चित करके, हम अपने Django एप्लिकेशन में CRUD संचालन को लागू करते समय एक सहज उपयोगकर्ता अनुभव बना सकते हैं।

विज्ञप्ति वक्तव्य यह लेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/prvnbist/crud-operations-in-python-django-part-2-4fad?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.com से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3