জ্যাঙ্গো অ্যাডমিনে কীভাবে কাস্টম অ্যাকশন বোতাম যুক্ত করা যায়

আরও ভাল পড়ার অভিজ্ঞতার জন্য এই নিবন্ধটি আমার ওয়েবসাইটে পড়ুন।

আমরা জ্যাঙ্গো প্রশাসনের ইন্টারফেসের বড় ভক্ত। জাজানোর পক্ষে, এটি একটি বিশাল বিক্রয় যুক্তি, যেহেতু সমর্থন এবং প্রতিদিনের ক্রিয়াকলাপের জন্য "ব্যাক অফিস" এর বিকাশ উপশম হয়েছে।

শেষ পোস্টে, আমরা এমন একটি প্যাটার্ন চালু করেছি যা আমরা প্রায়শই আমাদের জ্যাঙ্গো মডেলগুলিতে ব্যবহার করি। আমরা কীভাবে সমান্তরালতা এবং বৈধতার মতো সাধারণ সমস্যাগুলি পরিচালনা করি তা দেখানোর জন্য আমরা অ্যাকাউন্ট এবং অ্যাকাউন্ট অ্যাকশন মডেল সহ একটি ব্যাংক অ্যাকাউন্ট অ্যাপ্লিকেশন ব্যবহার করেছি। ব্যাঙ্ক অ্যাকাউন্টের দুটি ক্রিয়াকলাপ ছিল যা আমরা প্রশাসনের ইন্টারফেসে উপলব্ধ করতে চেয়েছিলাম - আমানত এবং উত্তোলন।

একটি অ্যাকাউন্ট জমা বা প্রত্যাহার করতে আমরা জ্যাঙ্গো প্রশাসনের ইন্টারফেসে বোতাম যুক্ত করতে যাচ্ছি, এবং আমরা কোডের 100 টিরও কম লাইনে এটি করব!

দেখতে কেমন লাগে

কাস্টম অ্যাকশন বোতামগুলির সাথে জাজানো অ্যাডমিন ইন্টারফেস

আমাদের কাস্টম ক্রিয়াগুলি প্রতিটি অ্যাকাউন্টের পাশের আকর্ষক আমানত এবং প্রত্যাহারের বোতাম।

বিদ্যমান প্রশাসকের ক্রিয়াগুলি ব্যবহার করবেন না কেন?

অন্তর্নির্মিত প্রশাসক ক্রিয়াকলাপগুলি একটি ক্যোয়ারী সেটে সম্পাদিত হয়। এগুলি উপরের সরঞ্জামদণ্ডের একটি ড্রপবক্স মেনুতে লুকানো রয়েছে এবং বিশেষত বাল্ক ক্রিয়াকলাপ সম্পাদনের জন্য দরকারী। একটি ভাল উদাহরণ হ'ল স্ট্যান্ডার্ড মোছা ক্রিয়া: আপনি যতগুলি লাইন চান তা নির্বাচন করুন এবং "মুছুন" ক্লিক করুন। এটি আমাদের ক্ষেত্রে নয়।

জাজানো অ্যাকশনে তৈরি করেছে

জাজানো ক্রিয়া ব্যবহারের আর একটি অসুবিধা হ'ল ক্রিয়াটি বিশদ দৃষ্টিতে উপলভ্য নয়। বিস্তারিত দৃশ্যে বোতাম যুক্ত করতে আপনাকে টেমপ্লেটটি ওভাররাইট করতে হবে - এমন অনেক কাজ যা সাধারণত সার্থক হয় না।

আকার

সবার আগে আমাদের ক্রিয়াটি সম্পাদন করতে কিছু ব্যবহারকারীর ডেটা দরকার। অতএব আমাদের একটি ফর্মের দরকার - একটি আমানতের জন্য এবং একটি প্রত্যাহারের জন্য।

পদোন্নতি কার্যকর করার পাশাপাশি, আমরা অ্যাকাউন্ট ধারককে তাদের অ্যাকাউন্টে পদোন্নতির বিষয়ে অবহিত করার জন্য একটি বিজ্ঞপ্তি ইমেল প্রেরণের জন্য একটি নিমফ বিকল্প যুক্ত করব।

আমাদের সমস্ত ক্রিয়ায় সাধারণ যুক্তি রয়েছে (মন্তব্য, প্রেরণ_ ইমেল) এবং সাফল্য এবং ব্যর্থতার সাথে একইভাবে আচরণ করে।

আসুন অ্যাকাউন্টে একটি সাধারণ ক্রিয়া করার জন্য একটি প্রাথমিক ফর্ম দিয়ে শুরু করুন:

# form.py
জাজানো থেকে ফর্মগুলি আমদানি করুন
সাধারণ থেকে। আমদানি ত্রুটি
ক্লাস অ্যাকাউন্টএকশনফর্ম (ফর্মস.ফর্ম): মন্তব্য = ফর্ম.চারিফিল্ড (প্রয়োজনীয় = ভুল, উইজেট = ফর্মস। টেক্সটরিয়া,) সেন্ড_ইমেল = ফর্ম.বুলিয়ানফিল্ড (প্রয়োজনীয় = ভুল,)
@ ওনারশিপ ডিএফ ইমেল_সুবজেক্ট_টেমপ্লেট (স্ব): প্রত্যাবর্তন 'ইমেল / অ্যাকাউন্ট / বিজ্ঞপ্তি_সুবজেক্ট.টেক্সট'
@ মালিকানা ডিএফ ইমেল_বাডি_প্যাম্পেট (স্ব): নোটইম্প্লিমেন্টেড এয়ার () বৃদ্ধি করুন
ডিফ ফর্ম_অ্যাকশন (স্ব, অ্যাকাউন্ট, ব্যবহারকারী): নোটইম্প্লিমেন্টেড এয়ার () বৃদ্ধি করুন
ডিফ সেভ (স্ব, অ্যাকাউন্ট, ব্যবহারকারী): চেষ্টা করুন: অ্যাকাউন্ট, ক্রিয়া = স্ব.ফর্ম_্যাকশন (অ্যাকাউন্ট, ব্যবহারকারী)
ভুল বাদে যেমন: ত্রুটি_মেসেজ = টিআর (ই) সেল্ফ অ্যাড_অরর (কোনওটি নয়, ত্রুটি_মেসেজ) এর মতো ত্রুটিগুলি শিক্ষিত করুন
যদি self.cleaned_data.get ('সেন্ড_ইমেল', মিথ্যা): ইমেল প্রেরণ করুন (to = [অ্যাকাউন্ট.user.email], সাবজেক্ট_টেম্পলেট = স্ব.সেইমেল_সুবজেক্ট_টেম্পলেট, বডি_টেম্পলেট = স্ব.ইমেল_বডি_প্লেট, প্রসঙ্গ = = "অ্যাকাউন্ট": অ্যাকাউন্ট, "ক্রিয়া": ক্রিয়া,})
অ্যাকাউন্ট, ক্রিয়া ফিরিয়ে দিন

সুতরাং আমাদের এখানে কি আছে:

  • প্রতিটি ক্রিয়াটির একটি মন্তব্য এবং একটি ক্রিয়াকলাপ সফলভাবে শেষ হলে বিজ্ঞপ্তি প্রেরণের বিকল্প রয়েছে।
  • একটি মডেলফর্মের অনুরূপ, আমরা সেভ ফাংশনে অপারেশনটি করি।
  • কলকারীকে অবশ্যই সেই ব্যবহারকারীকে সনাক্ত করতে হবে যা লগিং এবং পর্যবেক্ষণের উদ্দেশ্যে ক্রিয়াটি সম্পাদন করবে।
  • আমরা ওভাররাইট করতে ভুলে গিয়ে একটি দুর্দান্ত ত্রুটি বার্তা প্রদর্শিত হয় তা নিশ্চিত করার জন্য প্রয়োজনীয় বৈশিষ্ট্যগুলির জন্য আমরা নোটইম্প্লিমেটেড এরির বাড়িয়েছি।
  • আমরা আমাদের মডেলগুলিতে একটি বেসিক ব্যতিক্রম ব্যবহার করেছি যাতে আমরা অ্যাকাউন্ট সম্পর্কিত সমস্ত ব্যতিক্রম রেকর্ড করতে পারি এবং সে অনুযায়ী তাদের পরিচালনা করতে পারি।

এখন আমাদের একটি সাধারণ বেস শ্রেণি রয়েছে, আসুন একটি ফর্ম যুক্ত করুন যা আপনি কোনও অ্যাকাউন্ট থেকে প্রত্যাহার করতে ব্যবহার করতে পারেন। একমাত্র অতিরিক্ত ক্ষেত্রটি প্রদানের পরিমাণটি:

# form.py
django.utils সময় অঞ্চল থেকে আমদানি করুন
.মডেল অ্যাকাউন্ট থেকে আমদানি করুন, ক্রিয়া করুন
ক্লাস উইথড্রফর্ম (অ্যাকাউন্টএকশনফর্ম): পরিমাণ = ফর্ম.ইন্টেজারফিল্ড (min_value = অ্যাকাউন্ট.MIN_WITHDRAW, সর্বোচ্চ_মূল্য = অ্যাকাউন্ট.ম্যাক্স_উইটিএইচডিআরইউ, প্রয়োজনীয় = সত্য, সহায়তা_পাঠ্য = 'কত মূল্য দিতে হবে?',)
email_body_template = 'ইমেল / অ্যাকাউন্ট / প্রত্যাহার। টেক্সট'
ফিল্ড অর্ডার = ('পরিমাণ', 'মন্তব্য', 'ইমেল প্রেরণ করুন',)
ডিএফ ফর্ম_অ্যাকশন (স্ব, অ্যাকাউন্ট, ব্যবহারকারী): রিটার্ন অ্যাকাউন্ট.বিহীন উইকিপিডিয়া (আইডি = অ্যাকাউন্ট.pk, ব্যবহারকারী = অ্যাকাউন্ট.উজার, পরিমাণ = স্বতঃসিদ্ধ_ডাটা ['পরিমাণ'], টানা_বাই = ব্যবহারকারী, মন্তব্য = স্বতঃসিদ্ধ_ডেট ['মন্তব্য '], asof = টাইমজোন.নো (),)

খুব সহজ:

  • আমরা সংশ্লিষ্ট বৈধতাগুলির সাথে অতিরিক্ত ক্ষেত্র (পরিমাণ) যুক্ত করেছি।
  • প্রয়োজনীয় বৈশিষ্ট্যগুলি প্রবেশ করুন (ইমেল পাঠ্য টেম্পলেট)।
  • পূর্ববর্তী পোস্ট থেকে ক্লাস পদ্ধতিটি ব্যবহার করে ফর্ম ক্রিয়াটি বাস্তবায়ন করেছে। পদ্ধতিটি রেকর্ডটিকে লক করে, সমস্ত গণনা করা ক্ষেত্র আপডেট করে এবং লগটিতে সঠিক ক্রিয়া যুক্ত করে।

আমানত ক্রিয়াকলাপে অতিরিক্ত ক্ষেত্র রয়েছে - রেফারেন্স এবং রেফারেন্স প্রকার:

# form.py
ক্লাস ডিপোজিটফর্ম (অ্যাকাউন্টএকশনফর্ম): পরিমাণ = ফর্ম.ইন্টেজারফিল্ড (min_value = অ্যাকাউন্ট.MIN_DEPOSIT, সর্বোচ্চ_মূল্য = অ্যাকাউন্ট। MAX_DEPOSIT, প্রয়োজনীয় = সত্য, সহায়তা_পেক্স = পছন্দসমূহ = ক্রিয়া
email_body_template = 'ইমেল / অ্যাকাউন্ট / আমানত.txt'
ফিল্ড অর্ডার = ('পরিমাণ', 'রেফারেন্সের ধরণ', 'রেফারেন্স', 'মন্তব্য', 'ইমেল প্রেরণ করুন',)
ডিফ ফর্ম_অ্যাকশন (স্ব, অ্যাকাউন্ট, ব্যবহারকারী): রিটার্ন অ্যাকাউন্ট.ডেপোজিট (আইডি = অ্যাকাউন্ট.pk, ব্যবহারকারী = অ্যাকাউন্ট.উজার, পরিমাণ = স্বতঃসিদ্ধ_ডাটা ['পরিমাণ'], জমা দেওয়া_বাই = ব্যবহারকারী, রেফারেন্স = স্বতঃসিদ্ধ_ডাটা ['উল্লেখ '], রেফারেন্স_ টাইপ = স্ব-ক্লিনড_ডেটা [' রেফারেন্স_ টাইপ '], মন্তব্য = স্বাচ্ছন্দ্য_দেতা [' মন্তব্য '], আসফ = টাইমজোন.নো (),)

খুব সুন্দর!

অ্যাডমিন

অভিনব বোতামগুলি যুক্ত করার আগে আমাদের অ্যাকাউন্ট মডেলের জন্য একটি বেসিক প্রশাসনের পৃষ্ঠা সেটআপ করা দরকার:

# অ্যাডমিন.পি
django.contrib আমদানি প্রশাসক দ্বারা
.মডেল অ্যাকাউন্ট থেকে আমদানি করুন
@ অ্যাডমিন.রেজিস্টার (অ্যাকাউন্ট) শ্রেণি অ্যাকাউন্টএডমিন (অ্যাডমিন.মোডেলএডমিন): তারিখ_হিরারচি = ('পরিবর্তিত',) তালিকা_ডিসপ্লে = ('আমি থাকব', 'ব্যবহারকারী', 'পরিবর্তিত', 'ভারসাম্য', 'অ্যাকাউন্ট_অ্যাকশনস')) পঠনযোগ্য ক্ষেত্র = ('আমি', 'ব্যবহারকারীর', 'পরিবর্তিত', 'ভারসাম্য', 'অ্যাকাউন্ট_অ্যাকশনস',) তালিকা_চিকিত্সা_সম্পর্কিত = ('ব্যবহারকারী',) ডিফ অ্যাকাউন্ট_অ্যাকশনস (স্ব, আপত্তি): # টোডো: রেন্ডার অ্যাকশন বোতাম

পার্শ্ব দ্রষ্টব্য: আমরা তালিকাটি ভিউটিতে উল্লেখযোগ্যভাবে উন্নতি করতে পারি - ব্যবহারকারী এবং অ্যাকাউন্ট ক্রিয়াকলাপগুলিতে একটি লিঙ্ক যুক্ত করুন, অনুসন্ধানের ক্ষেত্রগুলি যুক্ত করুন এবং আরও অনেক কিছু করতে পারেন, তবে এই পোস্টটি সেটির পক্ষে নয়। আমি এর আগে অ্যাডমিন ইন্টারফেসে পারফরম্যান্স সম্পর্কিত সমস্যাগুলি সম্পর্কে লিখেছিলাম যখন আমি কয়েক হাজার হাজার ব্যবহারকারীর কাছে একটি জ্যাঙ্গো অ্যাপ্লিকেশনকে মাপিয়েছি এবং এমন কিছু ঝরঝরে কৌশল রয়েছে যা এই সাধারণ দৃশ্যটিকে আরও সুন্দর করে তুলতে পারে।

ক্রিয়া বোতাম যুক্ত করুন

আমরা প্রতিটি অ্যাকাউন্টে অ্যাকশন বোতাম যুক্ত করতে এবং ফর্মের সাথে একটি পৃষ্ঠায় লিঙ্ক করতে চাই। ভাগ্যক্রমে, জাঙ্গোতে ইউআরএল যুক্ত করার জন্য একটি ফাংশন রয়েছে। সুতরাং রুট এবং সংশ্লিষ্ট বোতাম যুক্ত করতে এই ফাংশনটি ব্যবহার করুন:

# অ্যাডমিন.পি
django.utils.html format_html থেকে django.core.urlresolvers থেকে বিপরীতে আমদানি করুন
ক্লাস অ্যাকাউন্টএডমিন (অ্যাডমিন.মোডেলএডমিন): ... ডিফ গেট_আরলস (স্ব): ইউআরএলস = সুপার ()। get_urls () কাস্টম_আরলস = [ইউআরএল (র '^ (? পি , +) / জমা / $ ', স্ব.অ্যাডমিন_সাইট.এডমিন_ভিউ (স্ব.প্রসেস_ডেপোজিট), নাম =' অ্যাকাউন্ট-জমা ',), ইউআরএল (আর' ^ (? পি , +) / আঁকুন / $ ', স্ব.অ্যাডমিন_সাইট.এডমিন_ভিউ (স্ব.প্রসেস_উইথড্র), নাম =' একাউন্ট স্টেটমেন্ট ',),] কাস্টম_আরলস + ইউআরএল ফেরান
ডিফ অ্যাকাউন্ট_জেক্টস (স্ব, আপত্তি): ফিরতি ফরম্যাট_এইচটিএমএল (" আমানত " " প্রত্যাহার ", বিপরীত ('অ্যাডমিন: অ্যাকাউন্ট-ডিপোজিট', আর্গস = [জেজ.পি কে]), বিপরীত ('অ্যাডমিন: অ্যাকাউন্ট-ড্র', আরগস = [ obj.pk]),) অ্যাকাউন্ট_জ্যাকশনসঅর্ট_ডেসিফিকেশন = 'অ্যাকাউন্টের ক্রিয়াকলাপ' একাউন্ট_অ্যাকশনসিল_ট্যাগ = সত্য

আমরা দুটি বোতাম রেন্ডার করছি, প্রত্যেকটি একটি দৃশ্যের সাথে লিঙ্কযুক্ত যা সংশ্লিষ্ট প্রসেস ড্রপ / প্রত্যাহার কার্য সম্পাদন করে। দুটি মতামত একই ফর্ম সহ মধ্যবর্তী পৃষ্ঠায় ফলাফল দেয়। ফর্মটি জমা দেওয়ার পরে, ভিউটি আমাদের বিশদ পৃষ্ঠায় পুনর্নির্দেশ করা হয় বা ব্যবহারকারীকে একটি ত্রুটি সম্পর্কে অবহিত করা হয়।

অ্যাকাউন্ট_জেক্টস ক্ষেত্রটি ব্যবহারের একটি দরকারী বৈশিষ্ট্য এটি প্রশাসকের একটি নিয়মিত ক্ষেত্র হওয়ায় এটি বিশদ বিবরণ এবং তালিকার উভয় ক্ষেত্রেই উপলব্ধ।

আসল ক্রিয়াটি পরিচালনা করে এমন ফাংশন:

# অ্যাডমিন.পি
django.http থেকে আমদানি htpResponse reddirect from django.template.response আমদানি টেম্পলেটরেস্পনস
.foros ডিপোজিটফর্ম, উইথড্রফর্ম থেকে আমদানি করুন
একাউন্টএডমিন ক্লাস (অ্যাডমিন.মোডেলএডমিন): ... ডিফ প্রসেস_ডেপোজিট (স্ব, অনুরোধ, একাউন্ট_আইডি, * আরগস, ** কোয়ার্গস): ফেরত স্ব.প্রসেস_অ্যাকশন (অনুরোধ = অনুরোধ, অ্যাকাউন্ট_আইডি = অ্যাকাউন্ট_আইডি, অ্যাকশন_ফর্ম = ডিপোজিটফর্ম, অ্যাকশন_শিরোনাম = 'আমানত' ,)
ডিফ প্রক্রিয়া_বিধ্বংসী (স্ব, অনুরোধ, অ্যাকাউন্ট_আইডি, * আরগস, ** কোয়ার্গস): ফেরত স্ব.প্রসেস_অ্যাকশন (অনুরোধ = অনুরোধ, অ্যাকাউন্ট_আইডি = অ্যাকাউন্ট_আইডি, অ্যাকশন_ফর্ম = প্রত্যাহার, ক্রিয়া_শিরোনাম = 'প্রত্যাহার',) ডিফ প্রক্রিয়া_অ্যাকশন (স্ব, অনুরোধ, অ্যাকাউন্ট_আইডি, ক্রিয়া_রফর্ম, ক্রিয়া_সংশ্লিষ্ট): অ্যাকাউন্ট = স্ব.জেট_বজেক্ট (অনুরোধ, অ্যাকাউন্ট_আইডি)
অনুরোধ.মহাদকাল! = 'পোস্ট': ফর্ম = অ্যাকশন_ফর্ম ()
অন্য: ফর্ম = অ্যাকশন_রফর্ম (অনুরোধ.পোস্ট) যদি form.is_ માન્ય (): চেষ্টা করুন: form.save (একাউন্ট, অনুরোধ.উজার)
ভুল বাদে ই এর মতো ত্রুটি: # যদি সংরক্ষণ () সংরক্ষণ করা হয় তবে ফর্মটিতে একটি তথ্যমূলক বার্তা সহ # ক্ষেত্রবিহীন ত্রুটি রয়েছে। গঠিত
অন্য: স্ব.ম্যাসেজ_উসার (অনুরোধ, 'সাফল্য') ইউআরএল = বিপরীত ('অ্যাডমিন: অ্যাকাউন্ট_অ্যাকউন্টাউন্ট_চেঞ্জ', আরগস = [অ্যাকাউন্ট.pk], কারেন্ট_এপ = স্ব.এডমিন_সাইট.নেম,) রিটার্ন এইচটিটিপিআরএসপ্রেস রিরেক্টার্ট (ইউআরএল)
প্রসঙ্গ = স্ব.এডমিন_সাইট.আচ_কন্টেক্সট (অনুরোধ) প্রসঙ্গ ['অপ্টস'] = স্ব.মোডেল._মেটা প্রসঙ্গে ['ফর্ম'] = ফর্ম প্রসঙ্গ ['অ্যাকাউন্ট'] = অ্যাকাউন্টের প্রসঙ্গ ['শিরোনাম'] = ক্রিয়া_শালা
টেম্পলেট রিসপনস (অনুরোধ, "প্রশাসক / অ্যাকাউন্ট / অ্যাকাউন্ট_অ্যাকশন html", প্রসঙ্গ,)

আমরা প্রক্রিয়া_অ্যাকশন নামে একটি ফাংশন লিখেছি যা ফর্মটি, ক্রিয়াটির শিরোনাম এবং অ্যাকাউন্ট আইডি গ্রহণ করে এবং ফর্মটি জমা দেয়। দুটি ক্রিয়া প্রসেস_বিহীন এবং প্রসেস_ডোপসিট প্রতিটি ক্রিয়াকলাপের জন্য প্রাসঙ্গিক প্রসঙ্গ নির্ধারণ করে।

একটি জ্যাঙ্গো অ্যাডমিন বয়লারপ্লেট রয়েছে যা জ্যাঙ্গো অ্যাডমিন সাইট দ্বারা প্রয়োজনীয়। এটি বর্তমানে আমাদের সাথে প্রাসঙ্গিক নয় বলে এটি খুব বেশি মোকাবেলা করার কোনও মানে হয় না।

আপনাকে যা করতে হবে তা হ'ল ফর্মটি সহ মধ্যবর্তী পৃষ্ঠায় টেমপ্লেট যুক্ত করতে হবে। আবার, আপনাকে খুব বেশি পরিশ্রম করতে হবে না - জ্যাঙ্গোর ইতিমধ্যে একটি বিশদ পৃষ্ঠার টেমপ্লেট রয়েছে যা আমরা প্রসারিত করতে পারি:

# টেম্পলেট / প্রশাসক / অ্যাকাউন্ট / অ্যাকাউন্ট_অ্যাকশন html t
extended% প্রসারিত "অ্যাডমিন / চেঞ্জ_ফর্ম html"%} load% লোড i18n অ্যাডমিন_স্ট্যাটিক অ্যাডমিন_মাডিফাই%
content%%% ব্লক করুন
c% csrf_ টোকেন%
form% যদি form.non_field_erferences | দৈর্ঘ্য> 0% "দয়া করে নীচের ত্রুটিগুলি সংশোধন করুন।" end {form.non_field_erferences}} {% শেষ%}
%} ফর্মের ক্ষেত্রে for% । {Field.erferences}} {{Field.label_tag}} {{Field.help_text% if ফিল্ড}} {% । {Field.field.help_text | নিরাপদ}} end% শেষ% % end%% এর জন্য
  
end% এন্ডব্লক%

এটাই!

কর্মচারীরা এখন সরাসরি প্রশাসনের ইন্টারফেসের মাধ্যমে সহজেই আমানত এবং উত্তোলন করতে পারবেন। আপনাকে সার্ভারের জন্য কোনও ব্যয়বহুল ড্যাশবোর্ড বা এসএসএস তৈরি করতে হবে না।

আমি প্রতিশ্রুতি দিয়েছিলাম যে আমরা এটি 100 টি লাইনে করব এবং আমরা এটি কম করেছিলাম!

বেনিফিট!

ক্রেডিট

বাস্তবায়নের বেশিরভাগ অংশ আসে দুর্দান্ত (দুর্দান্ত!) প্যাকেজ জ্যাঙ্গো-আমদানি-রফতানি থেকে। এটি আমাদের কয়েক ঘন্টা বাঁচিয়েছিল "আপনি কী আমাকে কেবল এক্সেলের ডেটা প্রেরণ করতে পারেন?" এবং আমরা এটির জন্য এটি ভালবাসি। আপনি যদি এর সাথে পরিচিত না হন তবে আপনার অবশ্যই এটি চেষ্টা করে দেখা উচিত।

আমরা এখান থেকে এটি কোথায় নিতে পারি

এই কৌশলটি প্রয়োগ করার পরে, আমরা আমাদের যা কিছু চাই তা করতে পারি - আমাদের রুট এবং রেন্ডারিংয়ের উপর সম্পূর্ণ নিয়ন্ত্রণ রয়েছে। ক্রিয়াকলাপের জন্য বোতাম যুক্ত করাও সম্ভব যার জন্য মধ্যবর্তী পৃষ্ঠা ব্যতীত কোনও অতিরিক্ত ডেটার প্রয়োজন হয় না।

পরবর্তী পদক্ষেপটি হ'ল এই কার্যকারিতাটি বিমূর্ত করা এবং একটি মিশ্রণ sertোকানো, তবে সেখানে পৌঁছে আমরা সেই সেতুটি পেরিয়ে যাব।