Django Web Framework
What is Django Framework
Framework কি?
একজন ডেভেলপার হিসেবে আমরা শুধু একটিমাত্র Website/Web Application তৈরি করে বসে থাকিনা! অবশ্যই আমরা আমাদের জীবনে অনেক অনেক Website/Web Application তৈরি করব! কিন্তু আপনি লক্ষ্য করবেন, আমাদের তৈরি প্রতিটি ওয়েবসাইট বা ওয়েবঅ্যাপ এর মধ্যে কিছু কিছু কাজ সব সময়ই কমন থাকে, এবং প্রতিটি ওয়েবসাইট তৈরি করার সময় বার বার কিছু বিষয়ে একই কোড লিখা লাগে! যেমন User Registration এবং Login , Database Connectivity , Security এর মতো বিষয় গুলো , এছাড়াও Admin Panel তৈরি করা ইত্যাদি। প্রতিবারই এগুলো করা একেতো খুবই বিরক্তিকর কাজ তার উপর একজন চৌকুষ ডেভেলপারের কর্মপন্থার সাথে সাংঘর্ষিক!
Web Framework হল এমন একটি Tools যেটাতে এ সকল কমন বিষয়েগুলো বিল্টইন থাকে, তাই Framework ব্যবহার করলে একই কোড বার বার লিখতে হয়না, এতে একজন ডেভেলপারের সময় যেমন বেঁচে যায় , এবং ডেভেলপমেন্ট ও দ্রুততর হয় ! একজন ডেভেলপার হিসেবে আমাদের কাজ হলো শুধু প্রয়োজনীয় ফ্রেমওয়ার্কটা আমাদের নিজেদের প্রোজেক্টে ব্যবহার করা।
https://blog.w3programmers.com/trainings/python-beginning-to-advance/
Django Framework এর ইতিহাস
২০০৩ সালের শুরুর দিকে Lawrence Journal-World পত্রিকার তিনজন ওয়েব ডেভেলপার অ্যাড্রিয়ান হলোভাটি,সাইমন উইলিসন,জ্যাকব কাপলান-মোস পত্রিকাটির বিভিন্ন ওয়েব অ্যাপ্লিকেশন তৈরি করতে পাইথন ব্যবহার শুরু করে। এবং তারা খেয়াল করে দেখল যে তাদের তৈরি করা প্রতিটি নিউজ অ্যাপ্লিকেশনরই প্রায় ৯০ ভাগ কোড একই রকম, তারা আসলে প্রতিটা ওয়েব অ্যাপ্লিকেশন একই কোড বার বার লিখছে! তখন তারা সকল কমন কোডগুলো, যা সবগুলো সাইটেই দরকার হয়, সেগুলো একসাথে করে একটা ফ্রেমওয়ার্ক তৈরি করল, জ্যাঙ্গো!
তাদের মধ্যে অ্যাড্রিয়ান হলোভাটি ছিলেন Django Reinhardt নামক একজন গিটার বাদকের বড় অনুরাগী। গিটার বাদক Django Reinhardt এর নামেই পরবর্তীতে Django Framework টির নামকরণ করা হয়। অবশ্য অ্যাড্রিয়ান হলোভাটি নিজেও একজন গিটার বাদক ছিলেন।
Django দিয়ে তৈরি এরকম কিছু পরিচিত ওয়েবসাইট হলঃ
- http://instagram.com/
- https://www.pinterest.com/
- https://www.nasa.gov/
- https://www.spotify.com/
- https://support.mozilla.org/
- https://disqus.com/
- http://www.theguardian.com/
- http://www.nationalgeographic.com/
- https://bitbucket.org/
- https://www.dropbox.com/
- https://www.quora.com/
- https://www.udemy.com/
উপরের Website গুলোর লিস্ট দেখে এতক্ষনে নিশ্চয় এটা বুঝতে পারছেন, আপনি যত বড় আর যত কমপ্লেক্স ওয়েব অ্যাপলিকেশন তৈরি করতে চান না কেন, Django অলটাইম পারফেক্ট চয়েস!
Django Framework কেন শিখবেন?
Django Web Framework কেন আপনি শিখবেন? এটি একটি গুরুত্বপূর্ণ প্রশ্ন। তার আগে জেনে নেওয়া যাক কেন Disqus, Instagram, Youtube, The Washington Post এবং Dropbox এর মতো শীর্ষ কোম্পানি গুলো এই framework টি ব্যবহার করছে? এবং কেন আপনার পরবর্তী প্রজেক্টের জন্য এই framework টি বেছে নেওয়া উচিত তা নিয়ে আলোচনা করা যাক।
১. এটি Python দিয়ে তৈরি করা, যার ফলে এটি সহজে শেখা যায় :
আমরা সবাই জানি যে পাইথন কতটা সহজ একটা ল্যাংগুয়েজ। Python Programming Language যেমন পড়া সহজ এবং এটি শেখাও অনেক সহজ। অনেক শিক্ষানবিস এই Programming Language টিকে কোডিংয়ের জন্য তাদের প্রথম Programming Language হিসাবে বেছে নেয় কারণ এর সরলতা এবং easy learning curve এর কারণে। কলেজ ও বিশ্ববিদ্যালয়গুলো শিক্ষার্থীদের কোডিং শেখানোর জন্য এই Programming Language ব্যবহার করছে। শুধু নতুনরা নয়, প্রযুক্তি বিশেষজ্ঞরাও ডেটা সায়েন্স, মেশিন লার্নিং এবং অন্যান্য বিভিন্ন ক্ষেত্রে এই Programming Language ব্যবহার করছেন।
পাইথন একটি বেশ স্থিতিশীল ভাষা এবং জ্যাঙ্গো পাইথনের অনেক মূল সুবিধা উত্তরাধিকার সূত্রে পায়। আমরা যদি জ্যাঙ্গোর মূল জিনিসগুলি দেখি তবে সমস্ত ব্যতিক্রম ফাইল এবং কোডগুলি পাইথনে লেখা আছে। তাই জ্যাঙ্গো শেখাও সহজ যদি আপনি জানেন কিভাবে পাইথনে কোড করতে হয়।
২. Cross-Platform
Django একটি portable framework এবং আপনি এটির কোড PC, Mac, Windows, Linux ইত্যাদি সহ যেকোনো প্ল্যাটফর্মে চালাতে পারেন। এই ফ্রেমওয়ার্কের ক্রস-প্ল্যাটফর্ম প্রকৃতি ডেভেলপারদের সমস্ত development এবং production environment সমর্থন করতে দেয়। জ্যাঙ্গোতে developer এবং ডাটাবেসের মধ্যে ORM (object-relational mapper) নামে একটি layer রয়েছে। এই layer টির সাহায্যে, আপনি কোডে কয়েকটি পরিবর্তনের মাধ্যমে পুরো project টিকে অন্যান্য major যেকোনো ডেটাবেসে স্থানান্তর করতে পারেন।
৩. Open Source এবং প্রচুর Community Support
Django হলো একটি ফ্রি এবং ওপেনসোর্স framework যা গিটহাবে সবার জন্য উম্মুক্ত। যেখানে প্রায় দুই হাজারে ও বেশি contributors এবং আরও অনেকে এর উন্নয়নের জন্য প্রতিদিন যোগ দিচ্ছেন। এটি developer দের বিশাল community দ্বারা সমর্থিত এবং সর্বদা ডেভেলপাররা এটি ব্যবহার করে আপডেট করে। কোডিং সম্পর্কিত সমস্যাগুলি সমাধান করার জন্য এর কমিউনিটি দ্বারা প্রচুর নতুন লাইব্রেরি যুক্ত করা হয়েছে যা ডেভেলপাররা প্রায়শই একটি প্রজেক্ট তৈরি করার সময় সম্মুখীন হয়।
আপনি যদি এমন কিছু অনুসন্ধান করেন যে কীভাবে একটি নির্দিষ্ট জিনিস জ্যাঙ্গোতে কাজ করতে পারে, সম্ভাবনা বেশি যে আপনার সমস্যাটি ইতিমধ্যেই কমিউনিটির অন্য কোনও ডেভেলপার দ্বারা সমাধান করা হয়েছে এবং আপনার সমস্যা দেখা দেওয়ার সাথে সাথে আপনি সহজেই সমাধানটি পেয়ে যাবেন। এই ফ্রেমওয়ার্কের জন্য প্রচুর mailing lists, blogs, documentation, Slack channels, meetups, workshops, এবং অন্যান্য অনলাইন resources বিদ্যমান রয়েছে।
৪. Batteries Included
একটি পূর্ণাঙ্গ ওয়েব এপ্লিকেশন ডেভেলপ করার জন্য জ্যাঙ্গোতে সব ধরণের ব্যাটারি ইতিমধ্যে রয়েছে। যার মানে আপনি একটি পূর্ণাঙ্গ অ্যাপ্লিকেশন ডেভেলপের জন্য প্রয়োজনীয় সবকিছুই খুঁজে পেতে পারেন। এই ব্যাটারির মধ্যে রয়েছে ORM, Authentication, HTML templating, session management support, URL routing, Middlewares, HTTP libraries, Multi-site support, i18n, template engine, forms, view layers, model layers, python compatibility ইত্যাদি। এই ফ্রেমওয়ার্ক টি common use case গুলোর ক্ষেত্রে অসংখ্য লাইব্রেরি এবং টুলস এর সুবিধা দেয় । এই ধরনের বিশাল সুবিধা ডেভেলপারদের সবকিছুর জন্য নতুন করে চিন্তা এবং উদ্ভাবনের পরিবর্তে সবচেয়ে গুরুত্বপূর্ণ জিনিসটিতে ফোকাস করতে সুযোগ দেয়।
https://blog.w3programmers.com/trainings/python-beginning-to-advance/
৫. Security
জ্যাঙ্গোর সেরা সুবিধা গুলির মধ্যে একটি হল যে আপনি একটি দ্রুত গতিতে অ্যাপ্লিকেশনটি তৈরি করতে পারেন এবং অ্যাপ্লিকেশনটির নিরাপত্তার সাথে আপস না করে এটি ডেলিভার করতে পারেন। এই ফ্রেমওয়ার্ক এ ডিফল্টরূপে Security feature বিদ্যমান। এটিতে কিছু সাধারণ নিরাপত্তা সমস্যা সমাধান যেমন cross-site scripting, request forgery, clickjacking, এবং SQL injection এর জন্য বিল্টইন সুরক্ষা রয়েছে। জ্যাঙ্গো প্রায়শই নতুন নিরাপত্তা security patches release করে এবং এটি অবিলম্বে security vulnerabilities গুলোর প্রতি সাড়া দেয় এবং অন্যান্য framework গুলোকে সতর্ক করে।
৬. Built-in Admin UI
বেশিরভাগ ফ্রেমওয়ার্কে আপনাকে নিজেরাই admin panel তৈরি করতে হবে এবং এতে আপনার অনেক সময় নষ্ট হয়। জ্যাঙ্গো একটি fully-featured web interface অফার করে যা আপনার তৈরি করা প্রতিটি অ্যাপের জন্য স্বয়ংক্রিয়ভাবে তৈরি হয়। admin panel টি well structured থাকে এবং এটি ডেভেলপারদের অ্যাপের জন্য খুব সহজেই যেকোনো কিছুর জন্য Database এর create/Read/update/delete এর মতো কাজগুলো করার সুযোগ দেয়। আপনার প্রয়োজন অনুযায়ী, আপনি অ্যাডমিন প্যানেল এর ইন্টারফেস কাস্টমাইজ বা পরিবর্তন করতে পারেন এবং third-party application এবং wrappers ব্যবহার করে dashboard এ যোগ করতে পারেন।
এছাড়াও আপনি out of the box বিভিন্ন permission এবং authentication modules এখানে পাবেন । যেকোনো Apps একদম scratch থেকে তৈরি করতে আপনাকে সপ্তাহ বা দিন ব্যয় করতে হবে না। user profiles তৈরির জন্য বেশিরভাগ অ্যাপে, আপনার username, email, address, phone number ইত্যাদির মতো বিভিন্ন বিশদ বিবরণের প্রয়োজন। জ্যাঙ্গোতে user profile এর জন্য আপনার প্রয়োজনীয় বেশিরভাগ প্রয়োজনীয়তা সরবরাহ করে। এই ধরনের বিশাল সাপোর্ট অনেক ফ্রেমওয়ার্ক বা লাইব্রেরিতে পাওয়া যায় না।
৭. ORM (Object-relational mapper)
জ্যাঙ্গো একটি সম্পূর্ণ functional ORM অফার করে, যা অনেকগুলি ডেটাবেসের সাথে compatible । মূলত ORM হল একটি লাইব্রেরি যা ডেভেলপারদের ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে সাহায্য করে এবং তাদের ডেটাবেস থেকে (যেমন MySQL এবং PostgreSQL) objects এ স্বয়ংক্রিয়ভাবে ডেটা স্থানান্তর করতে দেয়। আপনি একসাথে একাধিক ডাটাবেস নিয়ে কাজ করতে পারেন।
কিছু প্রযুক্তি যেমন Eloquent, greenDAO, Yii AR, ইত্যাদি basic querie গুলি খুব ভালভাবে পরিচালনা করে কিন্তু কিছু সময়ে, যদি ORM কিছু use case এর ক্ষেত্রে সমাধান করতে ব্যর্থ হয় তবে আপনাকে raw queries গুলি লিখতে হবে। এটি জ্যাঙ্গোর ক্ষেত্রে দরকারনেই। এটি well-built এবং এটি ডাটাবেস queries গুলি খুব ভালভাবে পরিচালনা করে।
jango ORM example: # gets top 5 results where rank = 15 and age <= 35 top_young_employees = Employee.objects.filter(rank=15, age__lte=35)[:5] # inserts a record with specified values employee = Employee.objects.create(name=’Smith’, age=40, country=’IN’) # prints field value print(employee.name)
Django ORM এর ডেটা বের করার ক্ষমতা অ্যাপ্লিকেশন ডেভেলপমেন্ট প্রক্রিয়াকে ত্বরান্বিত করে। ডেটা ম্যানিপুলেট করার জন্য আপনাকে ডেটাবেস যোগাযোগের জন্য ব্যবহৃত language জানার দরকার নেই। এছাড়াও, আপনি অতিরিক্ত কোডের কম লাইন সহ একাধিক রিলেশনাল ডাটাবেসের মধ্যে স্যুইচ করতে পারেন। সুতরাং একটি প্রজেক্টের জন্য, আপনি যদি local development এর জন্য SQLite ব্যবহার করেন, আপনি production এ MySQL-এ স্যুইচ করতে পারেন।
৮. DRY (Don’t Repeat Yourself)
প্রোগ্রামিং এ code-reusability বা DRY নীতি অনুসরণ করা সত্যিই গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি নিয়মিত কোড আপডেট করছেন। আপনি যখন DRY নীতি অনুসরণ করেন তখন আপনি বিদ্যমান কোডটি ব্যবহার করেন না, আপনি কোডের অপ্রয়োজনীয় লাইন, বাগ বা অ্যাপ্লিকেশনে error গুলিও এড়িয়ে যান। DRY নীতির সাহায্যে, আপনি খুব কম কোড থেকে বেশি আউটপুট পেতে পারেন এবং এটি আপনার কোডকে কাজ করতে বা যেকোন কারণে কোড পরিবর্তন করার ক্ষেত্রে অনেক সময় বাঁচাবে।
বেশিরভাগ ফ্রেমওয়ার্কে, আপনাকে আপনার কোড DRY-এর সাথে compliant করার জন্য প্রচেষ্টা করতে হবে এবং প্রতিবার আপনার কোড চেক করা সম্ভব নয়, বিশেষ করে যখন আপনি একটি টিম এ কাজ করছেন। জ্যাঙ্গো DRY নীতি অনুসরণ করে এবং এটি এমনভাবে ডিজাইন করা হয়েছে যে আপনাকে DRY নীতি লঙ্ঘন করতে আপনার পথের বাইরে যেতে হবে। এই সুবিধাটি আপনাকে বিদ্যমান কোডটি পুনরায় ব্যবহার করতে এবং অনন্য একটিতে ফোকাস করতে দেয়।
class Customers(models.Model): name = models.CharField(max_length=130) email = models.EmailField(null=True, blank=True) created_at = models.DateTimeField(blank=True, null=True, auto_now_add=True) updated_at = models.DateTimeField(blank=True, null=True, auto_now=True)
উপরের কোডে, যদি আপনার ক্ষেত্রটি `max_length` বা অন্য কিছু পরিবর্তন করতে হয়, আপনি এটি এখানে করতে পারেন এবং পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে সমস্ত routes, validation, এবং database এ প্রতিফলিত হবে।
৯. Scalable এবং Reliable
বর্তমান সময়ে প্রতিটি স্টার্টআপ বা কোম্পানি অ্যাপ্লিকেশনের স্কেলিং নিয়ে উদ্বিগ্ন। যদি ওয়েবসাইটটি স্কেল হিট করে এবং এটিকে ভারী ট্র্যাফিক এবং প্রচুর পরিমাণে তথ্য হ্যান্ডেল করতে হয়? অবশ্যই আপনাকে এমন ফ্রেমওয়ার্ক ব্যবহার করতে হবে যা বিপুল পরিমাণ ডেটা পরিচালনা করতে পারে। আর ঠিক এই জায়গায়, জ্যাঙ্গো যেকোন আকারের প্রজেক্ট , সেটা ছোট আকারের ওয়েব অ্যাপ্লিকেশন বা এটি একটি হাই লোডেড ওয়েব অ্যাপ্লিকেশন ট্যাকল করতে সক্ষম।
১০. Good Documentation
কুইক রেফারেন্সের জন্য, যে কোনও framework বা language এর জন্য ভাল ডকুমেন্টেশন অনেক গুরুত্বপূর্ণ, বিশেষ করে যখন আমরা কোনও প্রজেক্টের ডেভেলপমেন্ট পেজ এ কোথাও আটকে যাই। জ্যাঙ্গো উদাহরণ কোড সহ সুসংগঠিত ডকুমেন্টেশন সরবরাহ করে যা বিভিন্ন ধরণের real-world অ্যাপ্লিকেশন তৈরিতে খুব সহায়ক। ডকুমেন্টেশনটি দ্রুত রেফারেন্সের জন্য ভাল যদি আপনি আপনার অ্যাপ্লিকেশনে কিছু বৈশিষ্ট্য তৈরি করেন বা আপনি আপনার কোডে কিছু সমস্যায় আটকে থাকেন।
https://blog.w3programmers.com/trainings/python-beginning-to-advance/
কিভাবে Django Framework Install করবেন?
Django Install করা অন্যান্য Python Package Install করার মতই সহজ, এর জন্য আপনাকে নিম্নোক্ত ধাপ গুলো অনুসরণ করতে হবে:
Install Django package
প্রথমে নিম্নোক্ত কম্যান্ড এর মাধ্যমে django এর Latest Version টি ইনস্টল করে ফেলুন :
pip install django
এবার নিম্নোক্ত কম্যান্ড এর মাধ্যমে django দিয়ে inventory নামে একটি প্রজেক্ট তৈরি করব :
django-admin startproject inventory
এখন আপনি আপনার drive এ inventory নামে একটি ফোল্ডার দেখতে পাবেন। যার ভিতরে নিম্নোক্ত ফোল্ডার এবং ফাইল গুলো থাকবে:
এখন আপনি চাইলে এই প্রজেক্টের জন্য আর কি কি কমান্ড গুলোর আপনি সহযোগিতা নিতে চান , তা নিম্নোক্ত কমান্ডের মাধ্যমে অনায়াসেই দেখতে পারেন। তবে এর জন্য প্রথমে আপনাকে “cd inventory” command দিয়ে আপনার প্রজেক্ট ফোল্ডারে ঢুকতে হবে।
python manage.py help
Run Django Server
এবার django এর লিস্টেড command গুলোর মধ্যে “runserver” কম্যান্ডটি ব্যবহার করে , আমরা আমাদের django সার্ভারটি রান করব :
python manage.py runserver
এখন আপনি আপনার ব্রাউজারে http://localhost:8000 ব্যবহার করে অনায়াসেই আপনার project টি দেখতে পারেন :
Changing the django development derver port
ডিফল্টরূপে, runserver command পোর্ট 8000-এ internal IP-তে development server start করে।
আপনি যদি সার্ভারের port পরিবর্তন করতে চান তবে command-line argument হিসাবে ওই পোর্ট টি ও আপনাকে পাস করতে হবে । উদাহরণস্বরূপ, এই কমান্ডটি পোর্ট 8080 এ সার্ভার শুরু করে:
py manage.py runserver 8080
এছাড়াও আপনি যদি সার্ভারের আইপি পরিবর্তন করতে চান তবে পোর্টের সাথে আপনাকে আপনার সার্ভার IP ও পাস করতে হবে :
py manage.py runserver 0.0.0.0:8000