জ্যাঙ্গো পৃথিবীর অন্যতম জনপ্রিয় ওয়েব ডেভেলপমেন্ট ফ্রেমওয়ার্ক। ছোট থেকে বড়, যে কোন ধরণের ওয়েব এপলিকেশন তৈরীর জন্য জ্যাঙ্গো ব্যাবহার করা হয়। আপনার জ্যাঙ্গো শেখার পথকে সহজ করতে প্রজেক্টভিত্তিক অনলাইন জ্যাঙ্গো কোর্সের আয়োজন করেছি। প্রজেক্টের মাধ্যমে শিখতে থাকলে আপনার শেখাটা অনেক সহজ ও আনন্দদায়ক হবে ইনশাআল্লাহ। ৪ মাসের এই কোর্সে আমরা ২ টি প্রজেক্ট পূর্ণাঙ্গভাবে শেষ করার চেষ্টা করব।Agile Methodology অনুসরন করে সফটওয়ার বাজারে বিক্রয় উপযোগী একটি পুর্নাঙ্গ প্রজেক্টের MVP (Minimum Viable Product) তৈরী করা হবে। প্রতি সপ্তাহে বাড়ির কাজ দেয়া হবে।( ইনশাআল্লাহ)
সময়ঃ শুক্র, শনি সকাল ৮-১০ টা
মেয়াদঃ ৪ মাস , ৩২ টি ক্লাস, ৬৪ ঘন্টা
মাধ্যমঃ Skype
ক্লাস শুরুঃ ১লা মার্চ ২০১৯, শুক্রবার
রেজিষ্ট্রশন ৫০০০ টাকা, ১ মাস পর ২০০০, সর্বমোট ৭০০০
কোর্সটিতে অংশগ্রহন করতে হলে আপনাকে অবশ্যই পাইথন ব্যাসিক, ওওপি, এইচটিএমএল জানতে হবে।
যোগাযোগঃ ফেচবুক পেজ, , ফেচবুক গ্রুপ
জাওয়ালঃ 01715251562
বিঃদ্রঃ সুন্নাহ মোতাবেক দাড়িওয়ালাদের জন্য কোর্স ফি এর উপর বিশেষ ছাড়
রেজিষ্ট্রেশন ফি বিকাশে পাঠিয়ে নিচের ফর্মটি পূরণ করুন। বিকাশঃ 01715251562
ধরি আমাদের দুইটি url আছে এরকম
path('student/login', views.user_login, name='login'), path('student/logout', views.user_logout, name='logout'),
এখন আমরা চাই, কোন ইউজার লগআউট করলে তাকে আবার লগিন পেজে নিয়ে যাবে । তাহলে আমরা লগআউট ভিউ এ redirect() ফাংশনটিকে কয়েকভাবে লিখতে পারি
১। url এর নাম লিখে ( name=’login’)
from django.shortcuts import redirect from django.urls import reverse def user_logout(request): logout(request) return redirect('login')
২। সরাসরি url লিখে
from django.shortcuts import redirect from django.urls import reverse def user_logout(request): logout(request) return redirect('/student/login')
৩। reverse() ফাংশন ব্যাবহার করে
from django.shortcuts import redirect from django.urls import reverse def user_logout(request): logout(request) return redirect(reverse('login'))
reverse() ফাংশন URL এর নামকে সরাসরি URL স্টাইলে রূপান্তর করে
python manage.py shell
>>> from django.urls import reverse >>> reverse('login') '/student/login'
৪। redirect() ফাংশন মডেল অবজেক্টকেও গ্রহন করে। অবজক্টটি get_absolute_url() ফাংশনকে কল করে।
from django.shortcuts import redirect def my_view(request): ... obj = MyModel.objects.get(...) return redirect(obj)
বিস্তারিত দেখুন redirect(), reverse()
Python is now the best programming language to learn in 2018. Python is very easy to learn and you will find it in web application development, machine learning, data science, desktop app, hardware programming etc.
Time: Friday, Saturday at 9 P.M to 11 P.M
Total class: 16
Duration: 2 months ( 30 hours)
Class Started: 23 November 2018
Course Type: Online
Contact: Facebook Page, Facebook Group, Banglai-django Facebook group
Phone: 01715251562
Note: Class will be arranged via “Skype“. You must submit Home task and also attend group study regularly. If anyone failed to attend class, we will provide video of the class. You should fill up registration form and pay course fee before registration.
Register Now
কয়েকদিন আগে ফেসবুক ম্যাসেন্জারে একজন ভাই আমাকে প্রশ্ন করেছিলেন, “ফ্রেমওয়ার্ক কী?” তিনি কম্পিউটার সাইন্সের মানুষ নন, তাই তাঁর জানার কথাও না, ‘ফ্রেমওয়ার্ক কী’ ( যদিও অনেক CSE স্টুডেন্টরাও জানেনা )। অনেকেই আমার টাইমলাইনে জ্যাঙ্গো ফ্রেমওয়ার্ক নিয়ে অনেক লেখা দেখেন, কিন্তু বোঝেন না, ফ্রেমওয়ার্ক আবার কী! তাদের উপকারের সার্থে, জনৈক ভায়ের অনুমতি সাপেক্ষে, নাম গোপন রাখার শর্তে, আমাদের কথপোকথন তুলে ধরা হল।
জনৈক ভাইঃ আসসালামু আলাইকুম, ভাইয়া আপনার কাছে কিছু প্রশ্ন ছিল আমার, জাষ্ট জানার জন্য।
আমিঃ ওয়ালাইকুমুচ্ছালাম। জি ভাই, বলুন।
জনৈক ভাইঃ প্রোগ্রামিং সি, জাভা, পাইথন, এগুলোর নাম শুনেছি, সফটওয়্যার তৈরির হ্মেএে ব্যবহার হয় জানি, (আমার জানা মতে) কিন্তু জ্যাঙ্গো কি.? এটা দ্বারা কি কি করা যায়.? আর এটার শিখতে কি কি জানা লাগে.
আমিঃ এটাকে বলে ফ্রেমওয়ার্ক। যে কাজগুলো বার বার করতেই হয় সেগুলোকে একসাথে করে একটা ফ্রেম তৈরী করা হয়, যাতে কাজ করতে সুবিধা হয়। এটা পড়ে দেখুন।
জনৈক ভাইঃ জি আমি পড়তেছি কিন্তু কিছু প্রশ্ন ঘুরপাক খাচ্ছে।
আমিঃ কি প্রশ্ন ?
জনৈক ভাইঃ ফ্রেমওয়ার্ক জিনিসটাই বুঝলাম না, সেটা কী ?
আমিঃ আপনি কী প্রগ্রামিং জানেন ?
জনৈক ভাইঃ না ভাই
আমিঃ তাহলে আগে প্রগ্রামিং শিখুন, ধীরে ধীরে বুঝতে পারবেন।
জনৈক ভাইঃ সরি ভাই আসলে আমি মানছি আমি জানি না এটা, কিন্তু ফেমওয়ার্ক জিনিসটা আসলে কী, সেটার ক্লিয়ার কনসেপশন আপনার কাছ থেকে জানতে চাচ্ছিলাম।
আমিঃ আমরা অনেক কাজেই ফ্রেম ব্যাবহার করি, যেমন, ইট তৈরী করতে ফ্রেম ব্যাবহার করা হয়। কারন , প্রত্যেকটি ইটের জন্য তো আলাদাভাবে সাইজ, ডিজাইন, লেখা সম্ভব না।
তাই যে কাজগুলো সব ইটেই করতে হবে, সেই জিনিসগুলোর জন্য ফ্রেম তৈরী করা হয়
সফটওয়ারেও কিছু জিনিস আছে যা অধিকাংশ সফটওয়ারেই ব্যাবহার করতে হয়।যেমন আমরা ব্রাউজারে কোন লিঙ্ক দিলে সেটা সার্ভারে রিকুয়েষ্ট পাঠায়, সার্ভার সেটাকে গ্রহন করে, সেই অনুয়ায়ী হিসাব করে, সর্বশেষে একটা এইচটিএমএল কে আবার ব্রাউজারের কাছে পাঠায়।
জনৈক ভাইঃ
জনৈক ভাইঃ যাক ভাই বুঝেছি এখন। আরেকটু জালাবো ভাই, জ্যাঙ্গো শেখার জন্য প্রথম থেকে কি কি শিখতে হবে ?
আমিঃ প্রথমে পাইথন ভাল জানতে হবে, পাইথন দিয়ে কিছু প্রবলেম সলভ করতে হবে এবং কিছু ব্যাসিক এলগরিদম শেখার পর জ্যাঙ্গো শুরু করতে পারেন।
জনৈক ভাইঃ এসবের জন্য কী কনফিগারেশন এর পিসি লাগবে.?
আমিঃ মোটামুটি কনফিগারেশনের হলেই হবে।
জনৈক ভাইঃ জ্যাঙ্গোর কাজ শিখতে প্রথমে কি শিখতে হবে?
আমিঃ পাইথন।
জনৈক ভাইঃ কিভাবে শুরু করব, কি কি লাগবে.? আমার তো ভাই win7 /32bit Ram 2gb ।
আমিঃ সমস্যা নেই, শুরু করে দিন। http://hukush-pakush.com/ থেকে শুরু করতে পারেন।
এরপর আমাদের কথোপকথন অন্য দিকে মোড় নিলো …….
আসসালামুয়ালাইকুম,
গত পর্বে localhost:8000/hi ইউআরএল এ ব্রাউজ করলে “hello, how are you?” লেখাটি দেখেছিলাম। এখন আমরা response মেসেজটিকে বিভিন্নভাবে আপডেট করব।
banglaidj/banglaidj/views.py
def hello(request): name = "Harun" msg = "Hello {}, how are you?".format(name) return HttpResponse(msg)
এখন ম্যাসেজটি নাম সহ দেখাচ্ছে। কিন্তু এখনো নামটি স্ট্যাটিক আছে। আমরা চাই, নামটি url এর মাধ্যমে নিব। localhost:8000/hi/hasib দিলে আমাকে দেখাবে “hello hasib, how are you” ।
banglaidj/banglaidj/urls.py
urlpatterns = [ path('admin/', admin.site.urls), path('hi/<name>', hello) ]
এখানে url এ প্যারামিটার যুক্ত করা হয়েছে <> দ্বারা, যা প্যারামিটার বোঝায়। hi/ এর পর যে কোন স্ট্রিং দিলে তা name ভ্যারিয়েবলের মধ্যে initialize হবে এবং hello ফাংশনে প্যারামিটারের মান ( value) পাঠিয়ে দিবে। এখন আমরা hi/harun, hi/hasib, hi/abdullah, hi/abc এভাবে যে কোন url লিখতে পারব।
url যেহেতু অতিরিক্ত প্যারামিটারের ভ্যালু hello ফাংশনের কাছে পাঠিয়ে দিয়েছে, hello ফাংশনটিকে এখন ভ্যালুটি গ্রহন করতে হবে। def hello(request, name), এভাবে প্যারামিটারের মাধ্যমে ফাংশনের মধ্যে কোন ডাটা গ্রহন করা হয়।
মনে রাখতে হবে, ইউআরএল এবং ফাংশনের প্যারামিটার একই নামে হতে হবে।
banglaidj/banglaidj/views.py
def hello(request, name): msg = "Hello {}, how are you?".format(name) return HttpResponse(msg)
<name> সবসময় ইউআরএল এ স্ট্রিং ইনপুট নেবে, Integer ভ্যালু ইউআরএল এ ইনপুট নিতে চাইলে
<int: variable_name> দিতে হবে।
banglaidj/banglaidj/views.py
from django.http import HttpResponse def hello(request, name): msg = "Hello {}, how are you?".format(name) return HttpResponse(msg) def show_page(request, page_no): msg = "Page No: {}".format(page_no) return HttpResponse(msg)
banglaidj/banglaidj/urls.py
from django.contrib import admin from django.urls import path from .views import hello, show_page urlpatterns = [ path('admin/', admin.site.urls), path('hi/<name>', hello), path('page/<int:page_no>', show_page) ]
banglaidj/banglaidj/views.py
# store demo users data user = { 'user_name':'harun', 'password':'password123' } def check_user(request, username, password): if user['user_name'] == username: if user['password'] == password: return HttpResponse("Logged in successfully") else: return HttpResponse("Incorrect password! Try again.") else: return HttpResponse("Invalid username")
banglaidj/banglaidj/urls.py
from django.contrib import admin from django.urls import path from .views import hello, show_page, check_user urlpatterns = [ path('admin/', admin.site.urls), path('hi/<name>', hello), path('page/<int:page_no>', show_page), path('user/<username>/<password>', check_user) ]
<< আগের পোষ্ট পরের পোষ্ট >>
আসসালামুয়ালাইকুম,
গত পর্বে আমরা “localhost:8000”url এ একটি ড্যামো সাইট দেখেছিলাম। এখন থেকে আমরা নিজেরা নতুন নতুন url তৈরী করব যা ব্রাউজারে প্রবেশ করালে চমৎকার কিছু কাজ আমাদের সামনে হাজির করবে। তো, প্রথমে ছোট্ট একটি url তৈরী করা যাক…
বাংলায় জ্যাঙ্গো টিউটোরিয়াল সিরিজে আজকের পর্বে আমাদের লক্ষ, “localhost:8000/hi” ইউআরএল তৈরী করা যা ব্রাউজারে প্রবেশ করালে “Hello, how are you?” লেখাটি দেখাবে।
প্রজেক্ট ডিরেক্টরির মধ্যে একই নামে আরেকটি ডিরেক্টরী আছে যেখানে urls.py ফাইল আছে। প্রজেক্টের সকল Url এই ফাইলের মধ্যে লেখা হয়। এখনে urlpatterns নামে একটি লিষ্ট আছে যার মধ্যে সকল url এর প্যাটার্ন তৈরী করা হয়।
path() ফাংশনের প্রথম প্যারামিটারে url এর গঠন দেয়া হয়। অর্থাৎ, ইউআরএল এর চেহারা যদি হয় ‘localhost:8000/hi’ তাহলে path ফাংশন লেখা হবে, path(‘hi’), যদি চেহারা হয়
‘localhost:8000/home’ তাহলে path ফাংশন লেখা হবে, path(‘home’)।
ইউআরএল টি ব্রাউজারে প্রবেশ করালে যে কাজ সংঘটিত হবে, সার্ভার যে কাজ করবে, ব্রাউজার যা প্রদর্শণ করবে, সবকিছু একটি ফাংশনের মধ্যে লেখা হয়, যাকে জ্যাঙ্গো এর ভাষায় view ফাংশন বলে। path() ফাংশনের ২য় প্যারামিটারে ওই ফাংশনকে call করা হয়। যেমন, আমরা যদি hello ফাংশনের মধ্যে কাজগুলো করি তাহলে তাহলে path ফাংশন লেখা হবে, path(‘hi’, hello) অর্থাৎ, ব্রাউজারে ‘localhost:8000/hi’ প্রবেশ করালে hello ফাংশনটি কল হবে।
from django.contrib import admin from django.urls import path from django.http import HttpResponse def hello(request): return HttpResponse("Hello, how are you?") urlpatterns = [ path('admin/', admin.site.urls), path('hi/', hello) ]
ব্রাউজার, সর্ভারের কাছে একটি request পাঠাবে, যাকে বলে HttpRequest । Hello ফাংশনটি সেই request কে তার প্যারামিটারের মধ্যে দিয়ে গ্রহন করবে। এখন সার্ভার, ব্রাউজারের পাঠানো HttpRequest কে প্রসেস করে, একটি স্ট্রিং কে HttpResponse হিসেবে ব্রাউজারে পাঠাবে। HttpResponse একটি ফাংশন, যাকে ইম্পোর্ট করতে হবে django.http মডিউল থেকে।
এখন সার্ভার রান থাকা অবস্থায় ব্রাউজারে লিখুন ‘localhost:8000/hi’ এবং আপনার প্রত্যাশিত ফলাফল দেখে নিন।
আমরা সহজভাবে বোঝার জন্য view ফাংশন এবং url একই ফাইলে লিখেছি, কিন্তু এটা অনুচিত। ভিন্ন ধরণের কোড আলাদা আলাদা ফাইলে লেখা উত্তম।
তাই আমরা view ফাংশনটিকে( hello() ) views.py নামে ভিন্ন একটি ফাইলে নিখে ফেলি। যেখানে urls.py আছে, একই ডিরেক্টরিতে views.py নামে ফাইল তৈরী করি।
banglaidj/banglaidj/views.py
from django.http import HttpResponse def hello(request): return HttpResponse("Hello, how are you?")
banglaidj/banglaidj/urls.py
from django.contrib import admin from django.urls import path from .views import hello # import view function from views.py urlpatterns = [ path('admin/', admin.site.urls), path('hi/', hello) ]
আসসালামুয়ালাইকুম,
আশা করি আপনারা জ্যাঙ্গো বেশ ভালোই শিখে ফেলেছেন, এবং মজায় মজায় কিছু প্রজেক্ট ও করে ফেলেছেন।
আপনারা জানেন, জ্যাঙ্গো প্রজেক্ট করার সময়, প্রজেক্টের বিভিন্ন মডিউলের ভার্সন ম্যানেজ করার জন্য virtualenvironment ব্যাবহার করা হয়। কিন্তু যখন অনেকগুলো প্রজেক্ট করা হয়ে যায়, তখন ভিন্ন ভিন্ন প্রজেক্টের জন্য virtualenvironment ও হয় একাধিক। আলাদা আলাদা স্থানে থাকা virtualenvironment গুলো ম্যানেজ করা কিছুটা বিরক্তিকরও বটে। এই সমস্যা থেকে মুক্তি পাওয়ার জন্য চমৎকার একটি মডিউল হচ্ছে virtualenvwrapper । এর সাহায্যে আপনার সবগুলো virtualenvironment কে একটিমাত্র ডিরেক্টরীতে রাখতে পারবেন এবং খুবই সহজভাবে অল্প কিছু কমান্ডের সাহায্যে আপনি virtualenvironment তেরী ও ম্যানেজ করতে পারবেন।
আপনার PIP3 ইন্সটল করা না থাকলে করে ফেলুন
sudo apt-get install python3-pip
একইসাথে virtualenvwrapper ও ইন্সটল করুন
sudo pip3 install virtualenvwrapper
এখন shell startup ফাইলে ( .bashrc ) কিছু কমান্ড লিখে দিতে হবে । .bashrc ফাইলটি টার্মিনাল এডিটরে খুলুন। ( আমি nano এডিটর ব্যাবহার করব )
nano ~/.bashrc
আপনার টার্মিনালে .bashrc ফাইলটি খুলবে। একেবারে শেষে নিচের লাইনগুলো যোগ করুন
export WORKON_HOME="$HOME/.virtualenvs" export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh
nano এডিটরে ফাইল সেভ করে বের হয়ে আসতে Ctrl + X অতঃপর Y চাপুন ।
.bashrc ফাইলটি রিলোড লিতে লিখুন
source ~/.bashrc
তৃতীয় লাইনে virtualenvwrapper.sh এর লোকেশন যুক্ত করা হয়েছে। অনেকের এই লাইনে ইরর দেখাতেও পারে ( সম্ভাবনা খুব কম ) । যদি ফাইলটি পাচ্ছে না এমন কোন ইরর দেখায় তাহলে আপনার virtualenvwrapper.sh কোন লোকেশনে আছে দেখতে লিখুন,
which virtualenvwrapper.sh
ব্যাস, আপনার virtualenvwrapper ইন্সটল শেষ, এখন মনের সুখে ব্যাবহার করুন।
virtual environment তৈরী করতে টার্মিনালে লিখুন,
mkvirtualenv testenv1
testenv1 নামে একটি virtualenvironment তৈরী হবে যটি থাকবে আপনার হোম এর .virtualenvs ডিরেক্টরীতে।
আপনার তৈরী করা ভার্চুয়ার এনভাইরনমেন্ট গুলো দেখতে লিখুন
workon
কোন নির্দিষ্ট এনভাইরনমেন্ট একটিভ করতে লিখুন workon your_env_name. যেমন,
workon testenv1
deactivate করতে লিখুন
deactivate
কোন একটি Environment মুছে ফেলতে লিখুন rmvirtualenv env_name
rmvirtualenv testenv1
Python is now the best programming language to learn in 2018. Python is very easy to learn and you will find it in web application development, machine learning, data science, desktop app, hardware programming etc.
Khidmah It, leading software training company in Dhaka, is offering web application development course with complete project. Are you beginner in programming ? no problem, if you have passion, dedication, you can learn from scratch .
Time: Friday, Saturday 3 P.M
Total class: 32
Duration: 4 month ( 96 hours)
Free Class: 3 August 2018
Main class: 4 August 2018
Course Fee: 10,000 tk
Address: O-23, Muslim sweets goli, Nur-Jahan road, Mohammadpur, Dhaka
** To enroll this course, Fill up registration form and join to our free class on 3 August
Contact: Facebook Page, Facebook Group, Banglai-django Facebook group
Phone: 01715251562, 01753163092
2. Women should maintain hizab as Islamic shariah
3. We have no lab setup. You have to bring your own laptop with Linux OS.
4. If someone fail to attend some class, backup class will available.
5. Our class assistant will support you to solve any problem.
পাইথনের turtle মডিউল ব্যাবহার করে চমৎকার গ্রাফিক্সের কাজ করা যায়। নিচের কোড টুকু প্রথমে কপি পেষ্ট করে টার্মিনালে রান করুন। এরপর পড়ে বোঝার চেষ্টা করুন
import turtle def draw_square(): window = turtle.Screen() window.bgcolor("red") brad = turtle.Turtle() brad.shape("turtle") brad.color("yellow") brad.speed(5) counter = 0 while counter < 36: brad.forward(100) brad.right(90) brad.forward(100) brad.right(90) brad.forward(100) brad.right(90) brad.forward(100) brad.right(100) counter += 1 window.exitonclick() if __name__ == "__main__": draw_square()
আসসালামুয়ালাইকুম,
আপনার জ্যাঙ্গো শেখা কেমন চলছে ? আশা করি আপনি জ্যাঙ্গো নিয়ে ছোটখাট অনেক কাজ করতে শিখেছেন। এখন আমরা একটি প্রজেক্ট করার মাধ্যমে আমাদের পূর্বের শেখাকে আরো মজবুত করব। কিভাবে একটি প্রজেক্ট শুরু করতে হয় তা আমি আগের পোষ্টে আলোচনা করেছি। আশা করি আপনার কাছে বিষয়টি বোধগম্য হয়েছে।
আমরা বর্তমান প্রজেক্টটি Django 2 এবং Python 3 ভার্সনে কোড করব। সম্পুর্ন প্রজেক্টের প্রতিটি ধাপে KanBan Board অনুসরন করার চেষ্টা করব ইনশাআল্লাহ।
গত পর্বে KanBan Board এ TODO লিষ্ট তৈরী করেছিলাম
সর্বপ্রথম আমাদের দোকানে যে পন্যগুলো থাকবে তার লিষ্ট তৈরী করা দরকার। এজন্য Items কে In Progress এ নিয়ে গিয়ে আমাদের কাজ শুরু করব
আমাদের চেকলিষ্টের প্রথম কাজ start project and app শুরু করি।
প্রজেক্টের মডিউলের ভার্সন ম্যানেজ করার জন্য virtual environment তৈরী করি।
virtualenv dokan-env --python=python3
“dokan-env” হচ্ছে virtual environment এর নাম এবং –python=python3 দ্বারা বলে দেয়া হয়েছে যে আমরা python3 ব্যাবহার করব। আপনার পিসিতে অবশ্যই python3 ইন্সটল করা থাকতে হবে।
Activate virtualenv
source dokan-env/bin/activate
install Django
pip install django==2
প্রজেক্ট শুরু করি
django-admin startproject dokan
app তৈরী করি
python manage.py startapp inventory
settings.py এ installed_apps এ ‘inventory’ যুক্ত করি।
আমাদের দোকানে কি কি পন্য থাকবে তার ডাটা ডাটাবেজে রাখার জন্য মডেল ক্লাস তৈরী করি।
inventory/models.py
from django.db import models class Category(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Item(models.Model): name = models.CharField(max_length=150) category = models.ForeignKey(Category, on_delete=None) is_active = models.BooleanField(default=True) def __str__(self): return self.name
এডমিন প্যানেলে রেজিষ্টার করি
inventory/admin.py
from django.contrib import admin from .models import Category, Item admin.site.register(Category) admin.site.register(Item)
মাইগ্রেট করি
python manage.py makemigrations python manage.py migrate
superUser তৈরী করে এডমিন প্যানেলে লগিন করি এবং Category ও Item তৈরী করি।
সবগুলো আইটেমের তালিকা দেখার জন্য একটি ভিউ তৈরী করি।
inventory/views.py
from django.shortcuts import render from .models import Item def item_list(request): all_items = Item.objects.all() context = {'all_items':all_items} return render(request, 'inventory/item_list.html', context)
settings.py এ TEMPLATES এর ‘DIRS’: [‘templates’] যুক্ত করি। ( বিস্তারিত )
প্রজেক্ট ডিরেক্টরীতে templates নামে একটি ডিরেক্টরী তৈরী করি এবং এর মধ্য আরেকটি inventory নামে ডিরেক্টরী তৈরী করি।
templates/inventory/item_list.html
{% for item in all_items %} <p>{{item }}</p> {% endfor %}
inventory/urls.py
from django.urls import path from .views import item_list urlpatterns = [ path('items/', item_list, name='item-list'), ]
এখন localhost:8000/inventory/items এ গিয়ে সকল আইটেমগুলো দেখতে পাবেন।
[ style যোগ করার বিস্তারিত টিউটোরিয়াল দেখুন এখানে ]
Bootstrap SB Admin 2 থিম ব্যাবহার করে আমরা আমাদের প্রজেক্ট ডিজাইন করব।
রুট ডিরেক্টরীতে ( যেখানে manage.py রয়েছে) static নামে একটি ডিরেক্টরী তৈরী করি। settings.py ফাইলে বলে দিই যে, আমাদের সকল static ফাইল ( html, css, js ) এই ডিরেক্টরীতে থাকবে।
settings.py
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ]
templates/base.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <title>My dokan</title> {% load staticfiles %} <!-- Bootstrap Core CSS --> <link href="{% static 'vendor/bootstrap/css/bootstrap.min.css' %}" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="{% static 'vendor/metisMenu/metisMenu.min.css' %}" rel="stylesheet"> <!-- Custom CSS --> <link href="{% static 'dist/css/sb-admin-2.css' %}" rel="stylesheet"> <!-- Morris Charts CSS --> <link href="{% static 'vendor/morrisjs/morris.css' %}" rel="stylesheet"> <!-- Custom Fonts --> <link href="{% static 'vendor/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css"> </head> <body> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="http://www.banglai-django.com/">বাংলায় জ্যাঙ্গো</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <!-- /.dropdown --> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="#"><i class="fa fa-user fa-fw"></i> User Profile</a> </li> <li><a href="#"><i class="fa fa-gear fa-fw"></i> Settings</a> </li> <li class="divider"></li> <li><a href="login.html"><i class="fa fa-sign-out fa-fw"></i> Logout</a> </li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> <li> <a href="{% url 'item-list' %}"><i class="fa fa-dashboard fa-fw"></i> Item List</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Tables</a> </li> <li> <a href="#"><i class="fa fa-edit fa-fw"></i> Forms</a> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <!-- Title Block --> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">{% block pagetitle %}{% endblock %}</h1> </div> <!-- /.col-lg-12 --> </div> <!-- Container Block --> <div class="row"> {% block container %} {% endblock %} </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </div> <!-- /#wrapper --> <!-- jQuery --> <script src="{% static 'vendor/jquery/jquery.min.js' %}"></script> <!-- Bootstrap Core JavaScript --> <script src="{% static 'vendor/bootstrap/js/bootstrap.min.js' %}"></script> <!-- Metis Menu Plugin JavaScript --> <script src="{% static 'vendor/metisMenu/metisMenu.min.js' %}"></script> <!-- Morris Charts JavaScript --> <script src="{% static 'vendor/raphael/raphael.min.js' %}"></script> <script src="{% static 'vendor/morrisjs/morris.min.js' %}"></script> <script src="{% static 'data/morris-data.js' %}"></script> <!-- Custom Theme JavaScript --> <script src="{% static 'dist/js/sb-admin-2.js' %}"></script> </body> </html>
এখন item_list.html কে পরিবর্তন করে সুন্দর কাঠামো দান করি
templates/inventory/item_list.html
{% extends 'base.html' %} {% block pagetitle %} All Items {% endblock %} {% block container %} <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-body"> <div class="table-responsive"> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th>#</th> <th>Name</th> <th>Category</th> <th>Is Active</th> </tr> </thead> <tbody> {% for item in all_items %} <tr> <td>{{ forloop.counter }}</td> <td>{{ item.name }}</td> <td>{{ item.category }}</td> <td>{{ item.is_active }}</td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </div> {% endblock %}
localhost:8000/inventory/items/ এ গেলে নিচের চেহারা দেখতে পাবেন
আমরা আমাদের ১ম টার্গেট পূরন করতে পেরেছি। trello.com এ গিয়ে বোর্ড আপডেট করুন
[ git এবং GitHub সম্পর্কে জানতে জাকির হোসেন ভায়ের লেখাটি দেখুন ]
আমাদের এই প্রজেক্টটি গিটহাবে পুশ করব। github.com এ গিয়ে নতুন রিপজিটরী খুলুন
এখন কি করতে হবে, গিটহাব আমাদেরকে তা লিখেই দিয়েছে খুব সহজে
git init git add . git commit -m "Item list completed" git remote add origin https://github.com/harunurkst/dokan.git git push origin master
git remote add origin https://github.com/harunurkst/dokan.git এই লাইনটিতে আপনার রিপজিটরী url বাসান
কেমন লাগলো প্রজেক্টটি করতে? আশা করি ভাল লেগেছে। কমেন্টে আপনার অনুভুতি জানান। আগামি পর্বে প্রজেক্টের ২য় পর্ব দেখাবো ইনশাআল্লাহ।
বাংলায় জ্যাঙ্গো
Design by ThemeShift.