জাজানো: "প্রকল্পগুলি" বনাম "অ্যাপস"


202

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

প্রকল্পগুলিতে অনেকগুলি অ্যাপ থাকতে পারে। অ্যাপ্লিকেশনগুলি অনেক প্রকল্পের মধ্যে ভাগ করা যায়। ফাইন।

আমি ব্লগ বা ফোরামে পুনর্নবীকরণ করছি না - আমার পণ্যটির কোনও অংশ কোনও প্রসঙ্গে পুনরায় ব্যবহারযোগ্য হতে দেখছি না। স্বজ্ঞাতভাবে, আমি এটিকে "অ্যাপ্লিকেশন" বলব। তারপরে আমি কি আমার সমস্ত কাজ একক "অ্যাপ" ফোল্ডারে করব?

যদি তাই হয় ... জাঙ্গোর project.appনেমস্পেসের নিরিখে আমার প্রবণতাটি ব্যবহার করা হবে myproduct.myproductতবে অবশ্যই এটি অনুমোদিত নয় (তবে আমি যে অ্যাপ্লিকেশনটি তৈরি করছি তা আমার প্রকল্প এবং আমার প্রকল্পটি একটি অ্যাপ্লিকেশন!)। তাই আমি বিশ্বাস করতে পারি যে সম্ভবত "উল্লেখযোগ্য" মডেল অনুসারে একটি অ্যাপ তৈরি করে জ্যাঙ্গোর কাছে যাওয়ার কথা, তবে অ্যাপগুলিতে আলাদা করার জন্য আমার স্কিমাতে সীমানাটি কোথায় আঁকতে হবে তা আমি জানি না - আমার অনেক কিছু আছে তুলনামূলকভাবে জটিল সম্পর্কযুক্ত মডেলগুলির।

আমি আশা করছি এটির একটি সাধারণ সমাধান আছে ...


1
দস্তাবেজগুলি এখানে "অ্যাপ্লিকেশন" এবং "প্রকল্প" এর মধ্যে পার্থক্য ব্যাখ্যা করে: ডকস.ডজ্যাঙ্গোপ্রজেক্ট
en

উত্তর:


56

আপনি ব্যবহার থামাতে কি myproduct.myproduct? মোটামুটি এটি করার জন্য আপনার কী অর্জন করতে হবে:

django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py

ইত্যাদি। আমি যদি বলি যে ফোন views.pyকরতে হবে না তবে এটি কি সহায়তা করবে views.py? অজগর পথে আপনি নাম উল্লেখ করতে পারেন তবে একটি ফাংশন (সাধারণত প্যাকেজ.প্যাকেজ.ভিউস.ফাংশন_নাম) এটি পরিচালনা করা হবে। যে হিসাবে সহজ। এই সমস্ত "প্রকল্প" / "অ্যাপ" স্টাফটি কেবল অজগর প্যাকেজ।

এখন, আপনি এটি করার কথা? বা বরং, আমি এটি কিভাবে করতে পারি? ওয়েল, যদি আপনি পুনর্ব্যবহারযোগ্য কার্যকারিতা একটি উল্লেখযোগ্য টুকরা তৈরি করেন, মত একটি মার্কআপ সম্পাদক বলছি, যে যখন আপনি একটি "শীর্ষ স্তরের অ্যাপ্লিকেশন" তৈরি থাকতে পারে যা widgets.py, fields.py, context_processors.pyইত্যাদি - সব জিনিষ আপনি আমদানি করতে চাইতে পারেন।

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

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

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

  • জ্যাঙ্গোর ডিফল্ট সেটআপ এটি করে না।
  • প্রায়শই, আমি একটি প্রধান অ্যাপ্লিকেশন তৈরি করতে চাই, তাই আমি সাধারণত একটির মতো একটি তৈরি করি website। তবে পরবর্তী কোনও তারিখে আমি কেবল এই সাইটের জন্য মূল কার্যকারিতা বিকাশ করতে চাই। এটিকে অপসারণযোগ্য করার উদ্দেশ্যে (আমি কখনই করি বা করি না) তারপরে আমি আলাদা ডিরেক্টরি তৈরি করার প্রবণতা রাখি। এর অর্থ হ'ল আমি কোনও গ্লোবাল urls.py ফোল্ডার থেকে ডান url গুলিকে মুছে ফেলার পরিবর্তে কনফিগার থেকে সেই প্যাকেজটিকে লিঙ্কযুক্ত করে ফোল্ডারটি মুছে ফেলার মাধ্যমে বলি কার্যকারিতাটি ফেলে দিতে পারি।
  • খুব প্রায়শই, আমি যখন কিছু স্বাধীন করতে চাই তখনও এটিকে কোথাও বাঁচার দরকার হয় যখন আমি এটি দেখা / স্বতন্ত্র করে তুলি। মূলত উপরের কেস, তবে স্টাফের জন্য আমি জেনেরিক বানাতে চাইছি না।
  • আমার শীর্ষ স্তরের ফোল্ডারে প্রায়শই ডাব্লুএসজি স্ক্রিপ্টস, এসকিউএল স্ক্রিপ্টস ইত্যাদির মধ্যে সীমাবদ্ধ নয় তবে কয়েকটি অন্যান্য জিনিস থাকে
  • জ্যাঙ্গোর পরিচালনা এক্সটেনশনগুলি সাব-ডিরেক্টরিতে নির্ভর করে। সুতরাং প্যাকেজগুলির যথাযথ নামকরণ করা বোধগম্য।

সংক্ষেপে, একটি কনভেনশন হওয়ার কারণ অন্য কনভেনশনগুলির সমান - এটি যখন আপনার প্রকল্পের সাথে কাজ করা অন্যদের কথা আসে তখন তা সহায়তা করে। যদি আমি দেখি fields.pyআমি অবিলম্বে এতে সাবক্লাস জাঙ্গোর ক্ষেত্রের মধ্যে কোডের প্রত্যাশা করছি, অন্যদিকে যদি আমি দেখি তবে inputtypes.pyএটির দিকে না তাকিয়ে এর অর্থ কী তা সম্পর্কে আমি এতটা পরিষ্কার হতে পারি না।


24
+1 ... "মাইপ্রোডাক্ট.মাইপ্রোডাক্ট ব্যবহার করা আপনাকে থামাতে কী?" - জ্যাঙ্গোর "স্টার্টআপ" কমান্ডটি আপনাকে একটি কনভেনশন হিসাবে ধরে নিয়েছে convention আমি সম্মেলনগুলি পছন্দ করি, বিশেষত একটি দলের প্রচেষ্টার প্রসঙ্গে, তবে আমি তাদের পিছনে যুক্তি বুঝতে পছন্দ করি :)
ডলফ

@ ডলফ আহ, তাই না? আমি এটি প্রথমবার ব্যবহার করার পরে এটি ব্যবহার করি নি কারণ একটি প্রকল্প তৈরির জন্য আমার নিজস্ব কমান্ড রয়েছে যা প্রথমে মডেল তৈরি করে তারপরে এই মডেলগুলির জন্য সিআরইউডি স্টাফ তৈরি করে। তবুও, হ্যাঁ কনভেনশনগুলি ভাল। আমি জাঙ্গো কনভেনশনগুলি অনুসরণ করি যদি কেবলমাত্র কারণেই তারা বোঝা যায়।

1
আমি যুক্ত করব যে কোনও প্রকল্পের জন্য একই নাম এবং এর মধ্যে থাকা একটি অ্যাপ্লিকেশনও এতে সমস্যা manage.pyসৃষ্টি করে, যার ফলে এটি আপনার প্রকল্পের সেটিংস সঠিকভাবে আমদানি করতে অক্ষম হবে। এটি আমার সাথে ঘটেছিল এবং আমি অ্যাপটিকে পুনরায় ব্যবহারের মাধ্যমে এটিকে কার্যকর করেছি myproduct_app
বিএইচএসপিটমনকি

89

একবার আপনি ব্যবহার থেকে স্নাতক startprojectএবং startapp, একটি "প্রকল্পটি" এবং একই পাইথন প্যাকেজের মধ্যে "অ্যাপ্লিকেশন" মিশ্রন থেকে আপনি বন্ধ করার কিছুই নেই। একটি প্রকল্প আসলেই settingsমডিউল ছাড়া আর কিছুই নয় , এবং একটি অ্যাপ্লিকেশন আসলে modelsমডিউল ছাড়া আর কিছুই নয় else সমস্ত কিছুই alচ্ছিক।

ছোট সাইটগুলির জন্য, এর মতো কিছু থাকা সম্পূর্ণ যুক্তিসঙ্গত:

site/
    models.py
    settings.py
    tests.py
    urls.py
    views.py

18
+1 সংক্ষিপ্তসার: প্রকল্পের সেটিংস.পি রয়েছে, অ্যাপটিতে মডেল.পি রয়েছে। তারা একই স্তরের কাঠামো। আমি ভাবতাম প্রকল্পটি অ্যাপের চেয়ে এক স্তর উচ্চতর, অনুমান করি আমি ভুল ছিলাম
ফিলিপ 007

2
@ ক্লাইমেশন, 'পাইথন ম্যানেজ.পি মেকমাইগ্রেশনস' বা 'পাইথন ম্যানেজ.পি মাইগ্রেট' কে 'আমার প্রোডাক্ট' ডিরেক্টরিতে 'মডেল.পাই' ফাইলটি দেখার অনুমতি দেওয়ার জন্য সেটিংসে (অ্যাপ হিসাবে) কী অন্তর্ভুক্ত করা উচিত?
mlwn

1
@MLWn আমি বুঝতে পারি যে আমি এর উত্তর দিতে দেরি করে ফেলেছি তবে আমি নিজেও একই পরিস্থিতিতে আছি এবং আমি অনেক উত্তর খুঁজছি। আপনার প্রশ্নের উত্তর দেওয়ার জন্য আপনাকে যা করতে হবে তা হ'ল আপনার প্রকল্পটিকে INSTALLED_APPSতালিকায় অন্তর্ভুক্ত করা । এখানে একটি উদাহরণ রয়েছে: stackoverflow.com/a/59739912/399435
কার্তিক রঘুপতি

@ কার্থিকরঘুপাঠি, ধন্যবাদ .. :) চার বছর পরে মন্তব্যের জবাব দেওয়া দেখে ভাল
লাগলো

69

প্রশ্নের উত্তর দেওয়ার চেষ্টা করুন: "আমার অ্যাপ্লিকেশনটি কী করে?"। আপনি যদি একটি বাক্যে উত্তর না দিতে পারেন তবে ক্লিনার যুক্তি দিয়ে আপনি এটি কয়েকটি অ্যাপে বিভক্ত করতে পারেন।

আমি জাঙ্গো নিয়ে কাজ শুরু করার পরপরই এই চিন্তাটি পড়েছি এবং আমি দেখতে পাচ্ছি যে আমি নিজের সম্পর্কে এই প্রশ্নটি প্রায়শই জিজ্ঞাসা করি এবং এটি আমাকে সাহায্য করে।

আপনার অ্যাপ্লিকেশনগুলি পুনরায় ব্যবহারযোগ্য হতে হবে না, তারা একে অপরের উপর নির্ভর করতে পারে তবে তাদের একটি কাজ করা উচিত।


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

15

আমি নীচের ব্লগ পোস্টগুলি জাঙ্গো অ্যাপ্লিকেশন এবং প্রকল্পগুলি সম্পর্কে খুব দরকারী খুঁজে পেয়েছি:

নীতিগতভাবে, আপনার পণ্যটির উত্স কোডটি সংগঠিত করার জন্য জাঙ্গো দিয়ে আপনার প্রচুর স্বাধীনতা রয়েছে।


8

যদি তাই হয় ... জ্যাঙ্গোর প্রজেক্ট.অ্যাপ নেমস্পেসের নিরিখে, আমার প্রবণতাটি মাইপ্রড্রোডাক্ট.মাইপ্রোডাক্টের দিকে, তবে অবশ্যই এটি অনুমোদিত নয়

অনুমতি নেই এমন কিছুই নেই। এটি আপনার প্রকল্প, কেউ আপনাকে সীমাবদ্ধ করছে না। যুক্তিযুক্ত নাম রাখার পরামর্শ দেওয়া হচ্ছে।

আমি আমার পণ্যের কোনও অংশ কোনও প্রসঙ্গে পুনরায় ব্যবহারযোগ্য হতে দেখছি না। স্বজ্ঞাতভাবে, আমি এটিকে "অ্যাপ্লিকেশন" বলব। তারপরে আমি কি আমার সমস্ত কাজ একক "অ্যাপ" ফোল্ডারে করব?

একটি সাধারণ জ্যাঙ্গো প্রকল্পে অনেকগুলি অ্যাপ (সহযোগী অ্যাপস) রয়েছে যা প্রতিটি প্রকল্পে সত্যই ব্যবহৃত হয়।

আমাদের বলুন যে আপনার প্রকল্পটি কেবল একটি কাজ করে এবং কেবলমাত্র একটি একক অ্যাপ্লিকেশন রয়েছে (আমি এটির নামকরণ করি mainকারণ এটি প্রকল্পটির চারপাশে ঘোরে এবং খুব সহজেই প্লাগযোগ্য)। এই প্রকল্পটি এখনও এখনও কিছু অন্যান্য অ্যাপ্লিকেশন ব্যবহার করে।

এখন আপনি যদি বলেন যে আপনার প্রকল্পটি কেবলমাত্র একটি অ্যাপ্লিকেশন ব্যবহার করছে ( INSTALLED_APPS='myproduct'তাই) projectপ্রকল্পটিকে সংজ্ঞায়িত করার জন্য কী ব্যবহার করা হচ্ছে project.app, আমার মনে হয় আপনার কয়েকটি বিষয় বিবেচনা করা উচিত:

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

যতদূর অ্যাপটিতে বেশিরভাগ কাজ করা সম্পর্কিত, আমি মনে করি এটি বেশিরভাগ জাজানো প্রকল্পের ক্ষেত্রেই।


1
+1, mainসম্মেলনের জন্য এসএসপি - এটি আমার মত একটি মূল প্রকল্পের জন্য অনেক কিছু বোঝায়। আমি পরে "পুনরায় ব্যবহারযোগ্য" অ্যাপ্লিকেশনগুলি যুক্ত করার পরিকল্পনা করি তবে এখনই আমার ফোকাসের বাইরে।
ডলফ 21

2

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

কল্পনা করুন যে আপনি জাভাস্ক্রিপ্টের উপর ভিত্তি করে একটি বড় গতিশীল ওয়েব অ্যাপ তৈরি করছেন ।

এরপরে আপনি জাজানো অ্যাপ্লিকেশন তৈরি করতে পারেন যেমন "ফ্রন্টএন্ড" <- থিংস অ্যাপে আপনি সামগ্রী প্রদর্শন করবেন display

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

এই ভাবে আপনি সর্বদা আপনার "মন্তব্য" অ্যাপ্লিকেশন পুনরায় ব্যবহার করতে পারেন। পুরো প্রকল্পের উত্স না খোলার মাধ্যমে আপনি ওপেন সোর্স তৈরি করতে পারেন। এবং আপনি আপনার প্রকল্পের পরিষ্কার যুক্তি রাখেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.