জ্যাঙ্গো এবং সেলারি দিয়ে কীভাবে ওয়েবে অগ্রগতি বার তৈরি করবেন

হাস্যকরভাবে সহজ কিছু করার নজরে প্রথম নজরে

আনস্প্ল্যাশ-এ প্যাট্রিক ফোরের ছবি

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

এবং এখনও - একটি ভাল অগ্রগতি বার করা একটি আশ্চর্যজনক জটিল কাজ!

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

এই পোস্টটিতে আমার যা শিখতে হয়েছে তার সমস্ত কিছু বর্ণনা করা হয়েছে (এবং কিছু জিনিস আমি শিখিনি!) সিলারি প্রগ্রেস তৈরি করতে, এমন একটি লাইব্রেরি যা আশাবাদী আপনার জাজানো / সিলারি অ্যাপ্লিকেশানের জন্য নির্ভরতা-মুক্ত অগ্রগতি বারগুলি যুক্ত করা সহজ করে তোলে।

তবে এই পোস্টের বেশিরভাগ ধারণাগুলি সমস্ত ভাষা / পরিবেশে অনুবাদ করা উচিত। আপনি পাইথন ব্যবহার না করলেও আপনি সম্ভবত নতুন কিছু শিখতে পারেন।

অগ্রগতি কেন?

এটি সুস্পষ্ট হতে পারে তবে কেবল এটিকে বাইরে বের করার জন্য - আমরা কেন অগ্রগতি বারগুলি ব্যবহার করছি?

প্রধান কারণ হ'ল ব্যবহারকারীদের এমন কিছু সম্পর্কে প্রতিক্রিয়া জানানো যা তারা অপেক্ষা করতে অভ্যস্ত হওয়ার চেয়ে বেশি সময় নেয়। কিসমেট্রিক্স অনুসারে, 40% ব্যবহারকারী 3 সেকেন্ডেরও বেশি লোডিং সময়ের সাথে একটি ওয়েবসাইট ছেড়ে যান! এবং আপনি যখন অপেক্ষাটি হ্রাস করতে রোটারি নোবার মতো কিছু ব্যবহার করতে পারেন, তখন আপনার ব্যবহারকারীদের অবহিত রাখার চেষ্টা-ও-সত্য উপায় হ'ল তারা কিছু হওয়ার জন্য অপেক্ষা করে।

সাধারণত, যখন কিছু কিছু সেকেন্ডের চেয়ে বেশি সময় স্থায়ী হয় এবং আপনি সময়ের সাথে অগ্রগতিটি অনুমান করতে পারেন তখন অগ্রগতি বারগুলি সর্বদা ভাল।

অগ্রগতি বারগুলি কোনও কিছুর স্থিতি এবং এর ফলাফল প্রদর্শন করতে ব্যবহৃত হতে পারে

কয়েকটি উদাহরণ হ'ল:

  • যখন আপনার অ্যাপ্লিকেশনটি প্রথমবারের জন্য লোড হয় (যদি এটি লোড করতে দীর্ঘ সময় নেয়)
  • কোনও বৃহত ডেটা আমদানি প্রক্রিয়াকরণ করার সময়
  • ডাউনলোডের জন্য একটি ফাইল প্রস্তুত করার সময়
  • যখন ব্যবহারকারী কোনও কাতারে থাকে তাদের অনুরোধটি প্রক্রিয়া করার জন্য অপেক্ষা করে

একটি অগ্রগতি বারের উপাদান

ঠিক আছে তাই আমরা কীভাবে আসলে এই জিনিসগুলি তৈরি করব তা দিয়ে শুরু করতে পারি!

এটি কেবল একটি ছোট বার যা কোনও স্ক্রিনে ভরে যায়। এটা কতটা জটিল হতে পারে?

আসলে বেশ!

নিম্নলিখিত উপাদানগুলি সাধারণত অগ্রগতি বার বাস্তবায়নের অংশ:

  1. একটি সম্মুখ প্রান্ত যা সাধারণত অগ্রগতির ভিজ্যুয়াল প্রতিনিধিত্ব এবং (বিকল্পভাবে) একটি পাঠ্য-ভিত্তিক স্থিতি অন্তর্ভুক্ত করে।
  2. একটি ব্যাকএন্ড যা প্রকৃতপক্ষে আপনি নিরীক্ষণ করতে চান সেই কাজটি করে।
  3. এক বা একাধিক যোগাযোগের চ্যানেলগুলি যা সম্মুখ-প্রান্তটি ব্যাক-এন্ডে প্রেরণে ব্যবহার করে।
  4. সামনের প্রান্তে অগ্রগতি জানাতে এক বা একাধিক যোগাযোগ চ্যানেল

তাত্ক্ষণিকভাবে আমরা জটিলতার একটি অন্তর্নিহিত উত্স দেখতে পাই। আমরা দুজনেই ব্যাকএন্ডে কাজ করতে চাই এবং দেখি যে কাজটি সম্মুখভাগে ঘটে takes এর সাথে সাথেই বোঝা যাচ্ছে যে একাধিক প্রক্রিয়া অবশ্যই একে অপরের সাথে সংশ্লেষপূর্ণভাবে ইন্টারঅ্যাক্ট করবে।

বেশিরভাগ জটিলতা এই যোগাযোগের চ্যানেলে রয়েছে lies অপেক্ষাকৃত সাধারণ জ্যাঙ্গো প্রকল্পে, সম্মুখ-প্রান্তের ব্রাউজারটি ব্যাক-এন্ড ওয়েব অ্যাপ্লিকেশন (জাঙ্গো) এজেজেট এইচটিটিপি অনুরোধ (জাভাস্ক্রিপ্ট) প্রেরণ করতে পারে। এর ফলে এই অনুরোধটি বার্তা ব্রোকারের মাধ্যমে (র্যাবিটএমকিউ / রেডিস) টাস্ক কাতারে (সেলারি) ফরোয়ার্ড করতে পারে। তারপরে পুরো জিনিসটি বিপরীতে চালাতে হবে যাতে তথ্যটি আবার সীমান্তে পৌঁছে!

পুরো প্রক্রিয়াটি এরকম কিছু দেখতে পেল:

একটি ভাল অগ্রগতি বার তৈরিতে যায় এমন প্রতিটি কিছুর বড় চিত্র

আসুন এই সমস্ত উপাদানগুলির মধ্যে ডুব দিন এবং দেখুন যে তারা ব্যবহারিক উদাহরণে কীভাবে কাজ করে।

সামনের প্রান্ত

সামনের প্রান্তটি অবশ্যই প্রগতি বারের সহজতম অংশ। এইচটিএমএল / সিএসএসের কয়েকটি কয়েকটি ছোট লাইন দিয়ে আপনি পটভূমির রঙ এবং প্রস্থের বৈশিষ্ট্যগুলি ব্যবহার করে দ্রুত একটি দুর্দান্ত লাগানো অনুভূমিক বার তৈরি করতে পারেন। এটি সামান্য জাভাস্ক্রিপ্ট দিয়ে আপডেট করুন এবং আপনি যেতে ভাল!

ব্যাকএন্ড

ব্যাকএন্ড ঠিক যেমন সহজ। এটি মূলত কোডটির একটি অংশ যা আপনার সার্ভারে চালিয়ে যায় সেই কাজটি করার জন্য যা আপনি ট্র্যাক রাখতে চান। আপনি যে অ্যাপ্লিকেশন স্ট্যাকটি ব্যবহার করছেন এটি এটি সাধারণত লেখা হয় (এই ক্ষেত্রে, পাইথন এবং জ্যাঙ্গো)। এখানে ব্যাকএন্ডের একটি বিস্তৃত সরল সংস্করণ রয়েছে:

Def do_work (স্ব, তালিকা_ উপরে_কাজ): কাজের তালিকায় কাজের আইটেমগুলির জন্য: do_work_item (work_item) ফেরত "কাজ শেষ হয়েছে"

কাজটি কর

ঠিক আছে, আমাদের সামনে অগ্রগতি বার আছে এবং আমরা আমাদের কাজটি শেষ করেছি। এরপর কি?

ঠিক আছে, এই কাজটি কীভাবে শুরু হবে সে সম্পর্কে আমরা এখনও কিছু বলিনি। সুতরাং সেখানে শুরু করা যাক।

ভুল উপায়: ওয়েব অ্যাপ্লিকেশন এ এটি করুন

একটি সাধারণ আজাক্স ওয়ার্কফ্লোতে, এটি নিম্নলিখিত হিসাবে কাজ করবে:

  1. সামনের প্রান্তটি ওয়েব অ্যাপ্লিকেশনটিতে একটি অনুরোধ শুরু করে
  2. ওয়েব অ্যাপ্লিকেশন অনুরোধ কাজ করে
  3. ওয়েব অ্যাপ্লিকেশন সম্পূর্ণ হয়ে গেলে একটি প্রতিক্রিয়া ফিরিয়ে দেবে

জ্যাঙ্গো দর্শনে এটি দেখতে এরকম কিছু দেখাবে:

ডিফ মাইভিউ (অনুরোধ): কাজ করা () এইচটিপিআরএসপোনস ('কাজ শেষ!') রিটার্ন করুন

ভুল উপায়: দৃষ্টিকোণ থেকে ফাংশন কল

এখানে সমস্যাটি হ'ল ডু-ওয়ার্ক ফাংশনটি অনেক বেশি কাজ করতে পারে যা অনেক বেশি সময় নেয় (অন্যথায় এটি কোনও অগ্রগতি সূচক যুক্ত করার কোনও মানে রাখে না)।

এক দৃষ্টিতে প্রচুর কাজ করা সাধারণত বিভিন্ন কারণে খারাপ অভ্যাস হিসাবে বিবেচিত হয়, যার মধ্যে রয়েছে:

  • তারা ব্যবহারকারীদের দুর্বল অভিজ্ঞতা তৈরি করে কারণ ব্যবহারকারীদের দীর্ঘ অনুরোধগুলি শেষ হওয়ার জন্য অপেক্ষা করতে হবে
  • আপনি দীর্ঘস্থায়ী বিভিন্ন কাজ করার অনুরোধগুলি (যা দূষিত বা দুর্ঘটনাক্রমে ট্রিগার হতে পারে) তৈরি করে সম্ভাব্য স্থিতিশীলতার সমস্যার জন্য আপনার সাইটটি খুলুন।

এই এবং অন্যান্য কারণে আমাদের আরও ভাল পদ্ধতির প্রয়োজন।

সর্বোত্তম উপায়: অ্যাসিনক্রোনাস টাস্ক কুইউস (ওরফে সেলারি)

বেশিরভাগ আধুনিক ওয়েব ফ্রেমওয়ার্কগুলি এই সমস্যার সমাধানের জন্য অ্যাসিনক্রোনাস টাস্ক সারি তৈরি করেছে। সেলারি সর্বাধিক পাইথনে পাওয়া যায়। অন্যান্য জিনিসের মধ্যে, রেলগুলিতে সাইডিকিক রয়েছে।

এগুলির মধ্যে বিশদগুলি পৃথক, তবে সেগুলির মূল নীতিগুলি একই। আপনি চাইলে যে কোনও দৈর্ঘ্য এবং সংখ্যা নিতে পারে এমন কোনও HTTP অনুরোধে কাজ করার পরিবর্তে, আপনাকে সেই কাজটি একটি সারিতে ধরে রাখতে হবে এবং পটভূমি প্রক্রিয়া চালাতে হবে - প্রায়শই শ্রমিক বলা হয় - কাজটি গ্রহণ করার জন্য।

এই অ্যাসিনক্রোনাস আর্কিটেকচারটি বিভিন্ন সুবিধা দেয়, যার মধ্যে রয়েছে:

  • ওয়েব প্রক্রিয়াগুলিতে কোনও ক্লান্তিকর কাজ নেই
  • সম্পন্ন কাজের গতি সীমা সক্ষম করে - উপলব্ধ কাজ প্রক্রিয়াগুলির সংখ্যা দ্বারা কাজ সীমাবদ্ধ হতে পারে
  • এই উদ্দেশ্যে অনুকূলিত মেশিনগুলিতে কাজ সক্ষম করুন, যেমন। বিপুল সংখ্যক সিপিইউযুক্ত মেশিনে বি

অ্যাসিক্রোনাস টাস্কগুলির মেকানিক্স

একটি অ্যাসিনক্রোনাস আর্কিটেকচারের প্রাথমিক প্রক্রিয়াগুলি তুলনামূলকভাবে সহজ এবং তিনটি প্রধান উপাদান অন্তর্ভুক্ত: ক্লায়েন্ট (গুলি), কর্মী (গুলি) এবং বার্তা ব্রোকার।

গ্রাহক নতুন কাজ তৈরির জন্য প্রাথমিকভাবে দায়বদ্ধ। আমাদের উদাহরণে, ক্লায়েন্টটি জ্যাঙ্গো অ্যাপ্লিকেশন যা কোনও ওয়েব অনুরোধের মাধ্যমে ব্যবহারকারী ইনপুটের উপর ভিত্তি করে কাজগুলি তৈরি করে।

শ্রমিকরা প্রকৃত প্রক্রিয়া যা কাজ করে। এরা আমাদের সেলারি কর্মী। যে কোনও সংখ্যক কর্মচারী যে কোনও সংখ্যক কম্পিউটারে চলতে পারে, যা উচ্চ প্রাপ্যতা এবং টাস্ক প্রসেসিংয়ের অনুভূমিক স্কেলিং সক্ষম করে।

ক্লায়েন্ট এবং কাজের সারি একটি বার্তা ব্রোকারের মাধ্যমে একে অপরের সাথে যোগাযোগ করে, যা ক্লায়েন্টদের কাছ থেকে কাজ গ্রহণ এবং কর্মীদের হাতে তাদের সরবরাহের জন্য দায়ী। সেলারিগুলির জন্য সর্বাধিক সাধারণ বার্তা ব্রোকার হ'ল রাব্বিটএমকিউ, যদিও রেডিস একটি বহুল ব্যবহৃত পূর্ণ বৈশিষ্ট্যযুক্ত বার্তা ব্রোকারও।

একটি তাত্পর্যপূর্ণ কর্মী প্রক্রিয়াতে বার্তা জমা দেওয়ার জন্য প্রাথমিক কর্মপ্রবাহ work

সাধারণত, যখন আপনি একটি স্ট্যান্ডার্ড সেলারি অ্যাপ্লিকেশন তৈরি করেন, তখন আপনি ক্লায়েন্ট এবং কর্মী কোডটি বিকাশ করতে পারেন, তবে বার্তা ব্রোকারটি আপনার অবকাঠামোগত একটি অংশ যা আপনাকে কেবল সহ্য করতে হবে (এবং [বেশিরভাগ ক্ষেত্রে] উপেক্ষাও করতে হবে) করতে পারা).

একটি উদাহরণ

যদিও এগুলি সমস্ত জটিল বলে মনে হচ্ছে, সিলারি একটি ভাল কাজ করে, যা দুর্দান্ত প্রোগ্রামিং বিমূর্ততার সাথে আমাদের পক্ষে এটি বেশ সহজ করে তোলে।

আমাদের কাজের কাজকে এমন কিছুতে রূপান্তর করতে যা সংযোজনীয়ভাবে করা যায়, আমাদের কেবল একটি বিশেষ সজ্জা যুক্ত করতে হবে:

সেলারি আমদানি টাস্ক
# এই সাজসজ্জারটি সেলারিটিকে জানাতে প্রয়োজনীয় যে এটি একটি # কর্মী টাস্ক @ টাস্ক ডিএফ ডু-ওয়ার্ক (স্ব, তালিকা_আফ_কর্ম): কাজের তালিকায় কাজের আইটেমগুলির জন্য: ডু ওয়ার্ক_টাইট (ওয়ার্ক_াইটেম) রিটার্ন "কাজ শেষ হয়েছে"

সেলারি থেকে ডাকা একটি কাজের ফাংশন এনটেট করুন

জ্যাঙ্গো ক্লায়েন্টের কাছ থেকে অবিচ্ছিন্নভাবে ফাংশনটি কল করা ঠিক তত সহজ:

ডিফ মাইভিউ (অনুরোধ): # অ্যাসিঙ্ক্রোনাসলি ডু-ওয়ার্ক ডেল্ক (ডেল্ক) বলে ডাকা ফাংশনটি রূপান্তর করতে এখানে ডেলিকে () ডায়াল করার জন্য প্রয়োজনীয় সমস্ত কিছু এখানে রয়েছে # আমরা আর বলতে পারি না যে কাজটি হয়েছে # কারণ সব কিছু আমরা কী করেছিলাম, প্রেরণা ছিল HTTPPesponse ('কাজ শুরু হয়েছে!') ফিরিয়ে দেওয়া হয়েছিল

কাজের ফাংশনটিকে অবিচ্ছিন্নভাবে কল করা

কোডের কয়েকটি অতিরিক্ত লাইন দিয়ে আমরা আমাদের কাজটি একটি অ্যাসিক্রোনাস আর্কিটেকচারে সরিয়ে নিয়েছি! যতক্ষণ আপনার নিজের কর্মী এবং ব্রোকার প্রক্রিয়া কনফিগার করা এবং চলমান থাকে ততক্ষণ এটি কেবল কাজ করা উচিত।

অগ্রগতি ট্র্যাক করুন

ঠিক আছে, অবশেষে আমরা আমাদের কাজ পটভূমিতে সম্পন্ন করেছি। তবে এখন অগ্রগতি অনুসরণ করা যাক। এটি ঠিক কীভাবে কাজ করে?

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

শ্রমিকের অগ্রগতি ট্র্যাক করতে একটি পর্যবেক্ষক অবজেক্ট ব্যবহার করুন

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

বিষয় এবং পর্যবেক্ষককে সংযুক্ত করার বিভিন্ন উপায় রয়েছে। তবে সহজ উপায় হ'ল পর্যবেক্ষককে কাজটি করা ফাংশনের পক্ষে যুক্তি হিসাবে পাস করা।

এটি দেখতে এমন কিছু দেখাচ্ছে:

@ টাস্ক ডিএফ ডু-ওয়ার্ক (স্ব, তালিকা_ফর্ম_সামগ্রী, অগ্রগতি_সেবক): মোট_কর্ম_ট_ডো_ডো = লেন (তালিকা_ উপরে_কর্ম) গণনার ক্ষেত্রে (তালিকা_ ওফর্ম): do_work_item (work_item) # সম্পূর্ণ প্রবন্ধের মধ্যে কতটি রয়েছে তা প্রগতি পর্যবেক্ষককে বলুন # আমরা অগ্রগতি_বসবারের প্রক্রিয়া করেছি .set_progress (i, total_work_to_do) ফেরত "কাজ শেষ হয়েছে"

কাজের অগ্রগতি নিরীক্ষণের জন্য পর্যবেক্ষক

এখন আমাদের যা করতে হবে তা হল একটি বৈধ অগ্রগতি_সেবক এবং ভয়েলি, আমাদের অগ্রগতি ট্র্যাক করা হবে!

ক্লায়েন্টের কাছে ফিরে অগ্রগতি পান

আপনি হয়ত ভাবছেন, "এক মিনিট অপেক্ষা করুন ... আপনি কেবল সেট_প্রেস্রেস নামে একটি ফাংশন ডাকলেন, কিন্তু কিছুই করেন নি!"

সত্য! এটা আসলে কিভাবে কাজ করে?

মনে রাখবেন - আমাদের লক্ষ্য হল এই অগ্রগতি তথ্য ওয়েবসাইটে পৌঁছে দেওয়া যাতে আমরা আমাদের ব্যবহারকারীদের কী ঘটছে তা দেখাতে পারি। তবে, পুরো কাজ প্রক্রিয়া চলাকালীন অগ্রগতি ট্র্যাকিং ঘটে! অ্যাসিক্রোনাস টাস্ক জমা দেওয়ার ক্ষেত্রে আমাদের এখন একই সমস্যা।

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

দালালদের মতো, আপনি মোটামুটি উন্নত কিছু না করা অবধি বিশদগুলি সাধারণত প্রদর্শিত হয় না। তবে মুল বক্তব্যটি হ'ল আপনি কার্যের ফলাফলটি কোথাও রেকর্ড করুন (কাজের অনন্য আইডি সহ)। অন্যান্য প্রক্রিয়াগুলি তারপরে ব্যাকএন্ড জিজ্ঞাসা করে আইডির উপর ভিত্তি করে কাজগুলি সম্পর্কে তথ্য পেতে পারে।

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

রাজ্য সেট করুন

টাস্ক.আপডেট_স্টেট (রাজ্য = PROGPress_STATE, মেটা = {'বর্তমান': বর্তমান, 'মোট': মোট})

রাষ্ট্র পড়ুন

সেলারি থেকে.অম্পোর্ট ফলাফল AsyncResult ফলাফল = AsyncResult (টাস্ক_আইডি) মুদ্রণ (রেজাল্ট.স্টেট) # সেট করা আছে প্রোগ্রিপসেটে। মুদ্রণ (ফলাফল.info) # মেটাডেটা এখানে প্রদর্শিত হবে

সামনের প্রান্তের জন্য অগ্রগতি আপডেটগুলি পান

এখন আমরা কর্মী / কার্য এবং অন্য যে কোনও ক্লায়েন্টের কাছ থেকে অগ্রগতি আপডেটগুলি পেতে পারি, চূড়ান্ত পদক্ষেপটি কেবল সামনের প্রান্তে এই তথ্যটি প্রেরণ করা এবং এটি ব্যবহারকারীর কাছে প্রদর্শন করা।

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

জ্যাঙ্গো ভিউ:

Def get_progress (অনুরোধ, টাস্ক_আইডি): ফলাফল = AsyncResult (টাস্ক_আইডি) প্রতিক্রিয়া_ডাটা = state 'স্টেট': রেজাল্ট.স্টেট, 'বিশদ': self.result.info, H HTTPResponse (json.dumps (প্রতিক্রিয়া_ডাটা), কন্টেন্ট_ টাইপ = 'অ্যাপ্লিকেশন / জেসন ')

জেএসওএন হিসাবে অগ্রগতি ফিরে আসতে জ্যাঙ্গো দর্শন।

জাভাস্ক্রিপ্ট কোড:

ফাংশন আপডেটপ্রোগ্রেস (প্রগ্রেসআরল) ch আনুন (অগ্রগতি) r তারপর (ফাংশন (প্রতিক্রিয়া) {প্রতিক্রিয়া.জসন ()। তারপর (ফাংশন (ডেটা) {// সম্পর্কিত ইউআই উপাদানগুলি সেট করুনপ্রেসেস (ডেটা.স্টেট, ডেটাডেটেলস) আপডেট করুন; // এবং এটি প্রতি অর্ধেক দ্বিতীয় সেটটাইমআউট (আপডেটপ্রোগ্রেস, 500, প্রগতি ইউআরএল);});}); }

জাভাস্ক্রিপ্ট কোড অগ্রগতি জিজ্ঞাসা এবং ব্যবহারকারীর ইন্টারফেস আপডেট।

সব একসাথে রাখুন

এটি - যা প্রথম নজরে - আমাদের কম্পিউটার জীবনের একটি খুব সাধারণ এবং নিত্যপ্রয়োজনীয় অংশে এটির বিশদ ছিল! আমি আশা করি আপনি কিছু শিখেছি

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

পড়ার জন্য আপনাকে ধন্যবাদ! পাইথন এবং জ্যাঙ্গো দিয়ে জিনিস তৈরির বিষয়ে আমি যখন এই জাতীয় সামগ্রী পোস্ট করি তখন আপনি যদি অবহিত হতে চান তবে নীচের আপডেটগুলি পেতে সাইন আপ করুন!

মূলত buildwithdjango.com এ প্রকাশিত।