জেঙ্গো →django dev to deployment
This article is from udemy course here
Tropics
- Project environment setup
- URL and TEMPLATES
- Models, Migrations and Admin
- View Methods, Display & Search
- Accounts & Authentication
- Contact Inquiries
- Deployment
- Social login with google
Project environment setup
কি কি প্যাকেজ ইন্সটল করা আছে আমাদের সিস্টেমে সেটা দেখার জন্য নিচের কমান্ডটি ইউজ করা হয় ।
pip freeze > requirements.txt
যদি ভার্চুয়াল environment এর বাহিরে থাকি তাহলে pip3 ব্যাবহার করতে হয় আর ভার্চুয়াল environment এর ভেতরে থাকলে pip ব্যাবহার করতে হয় ।
python package manager → pip ইন্সটল করার জন্য নিচের কমান্ডটি ইউজ করতে হয়
sudo python3 -m pip uninstall pip && sudo apt install python3-pip - reinstall
অথবা pip upgrade করার জন্য নিচের কমান্ড ইউজ করা হয় ।
python3 -m pip install --user --upgrade pip
virtual environment ক্রিয়েট করার জন্য python 3.3 র আগের ভার্সনের জন্য ইউজ করা হতো virtualenv কিন্তু python 3.3 ভার্সনের উপরের ভার্সনের জন্য venv ইউজ করা হয় । এটা python 3.3 থেকে introduce করা হয়েছে ।
venv install করার জন্য নিচের কমান্ড ইউজ করতে হয় →
sudo apt install virtualenv
virtual environment ক্রিয়েট করার জন্য নিচের কমান্ডটি ইউজ করা হয় ।
virtualenv env
virtual environment activate করার জন্য নিচের কমান্ড ইউজ করা হয় ।
source ./env/bin/activate
python virtual env official documentation is here
Django install করার জন্য নিচের কমান্ডটি ব্যাবহার করতে হয় ।
pip install django
নতুন একটা প্রজেক্ট ক্রিয়েট করার জন্য django-admin কমান্ড লাইন cli ব্যাবহার করতে হয় ।
django-admin startproject project_name .
শেষে . না দিলে ঐ directory র আন্ডারে আরেকটি ডিরেক্টরি তৈরি হয়ে প্রজেক্ট তৈরি হবে ।
প্রজেক্ট ক্রিয়েট হয়ে গেলে git initialize করতে হবে নিচের কমান্ডের মাধ্যমে
git init
এরপর .gitignore file ক্রিয়েট করতে হয় কারণ আমরা চাই যে কিছু কিছু ফাইল জেনো আমাদের git repository তে অ্যাড না হয় । সেজন্য আমাদেরকে gitignore এই সাইটে যেতে হবে এবং সার্চ অপশনে আমরা যে ফ্রেমওয়ার্ক নিয়ে কাজ করতে চাই সেই সেই ফ্রেমওয়ার্ক এর নাম লিখে (মাল্টিপল অপশন লিখা যায়) সার্চ দিলে সেগুলোর একটা gitignore text চলে আসবে । সেখান থেকে ঐ টেক্সট গুলো কপি করে আমাদের .gitignore ফাইলে pest করে সেভ করে দিলে হয়ে যাবে ।
এই ফাইলগুলার সাথে যদি আমরা চাই যে আমাদের virtual environment এর কোন ফাইল গিটে এড হবে না সেক্ষেত্রে .gitignore ফাইলটাতে জাস্ট এই লাইন টা অ্যাড করে দিতে হবে
env
এখন আমাদের প্রজেক্ট টি আমাদের লোকাল রিপো তে অ্যাড করার জন্য নিচের কমান্ডটি দিতে হবে
git add . && git commit -m 'Initial commit'
এখন প্রজেক্ট রান করার জন্য নিচের কমান্ডটি দিতে হয়
python manage.py runserver
django docmentation থেকে django র বেসিক structure এর ডেফিনিশন গুলো দেখে নেওয়া যেতে পারে ।
- __init__ এই ফাইল টা দিয়ে বোঝায় যে কোন একটা directory পাইথন প্যাকেজ হিশেবে গণ্য হবে ।
- settings file এ DEBUG= true সাধারণত developing level এ দেওয়া থাকে কারণ এর মাধ্যমে আমরা কোন প্রজেক্টের কোথায় ভুল আছে এইটা ডিবাগ করতে পারি কিন্তু production level এ এই অপশনটা false করে দেওয়া হয় ।
- settings file এ install apps অপশনটাতে আমরা যতবার নতুন কোন app ক্রিয়েট করবো সেটা এখানে এসে বলে দিতে হবে না হয় ঐ এপের অস্তিত্ব খুঁজে পাবে না Django.
- settings file এর templates array র DIRS অবজেক্টটাতে আমাদের বলে দিতে হবে টেম্পলেট ডিরেক্টরির নাম এবং লোকেশন ।
- settings file এর database object এর ভেতর আমাদের বলে দিতে হবে যে আমরা এই প্রজেক্টে কোন ডাটাবেজ ইঞ্জিন ইউজ করতেছি এবং সেই ইঞ্জিনের ডিফল্ট সেটিং ।
- settings file এর STATIC_URL অপশনে আমাদের static file location এর ডিরেক্টরি বলে দিতে হবে ।
আমরা এইরকম একটি প্রজেক্ট বানাতে চাচ্ছি । এই প্রজেক্টটি হচ্ছে একটি রিয়েল স্টেট কোম্পানির জন্য ওয়েব সাইট ।
এরজন্ন আমাদের প্রথমে একটি app ক্রিয়েট করতে হবে । এর জন্য নিচের কমান্ডটি দিতে হবে
python manage.py startapp pages
এখানে আমরা pages নামের একটি নতুন অ্যাপ ক্রিয়েট করলাম ।
আমাদের এই জেঙ্গো প্রজেক্টের জন্য front-end এর অংশ দেখাবো না শুধু back-end অংশটুকুই করবো । সেজন্য আমাদের কাছে front-end এর html, bootstrap এর কোড আছেই এবং এখন আমরা সেখান থেকে home page আর about page লোড করবো আমাদের নতুন তৈরি করা জেঙ্গো প্রজেক্টে ।
নতুন অ্যাপটিকে settings > INSTALLED_APPS এইখানে লিঙ্ক করে দিতে হবে
INSTALLED_APPS = [
....
'pages.apps.PagesConfig',
]
code ফরম্যাট করার জন্য autopep8 install করা যেতে পারে ।
pip install autopep8
খেয়াল রাখতে হবে যে এই কমান্ড দেওয়ার সময় যেন virtual environment একটিভেট থাকে ।
এরপর pip freeze > requirements.txtকমান্ড দিলে ইন্সটলড অ্যাপ গুলা দেখা যাবে ।
URL and TEMPLATES
জেঙ্গো কিভাবে কাজ করে ?
জেঙ্গোর রাউটিং এ যখন কোন রিকোয়েস্ট আসে তখন সেটা প্রথমে জেঙ্গোর প্রজেক্ট লেভেলে যে urls.py ফাইল আছে সেখানে হিট করে ।পরবর্তীতে ওইখান থেকে যখন কোন রিকোয়েস্ট অন্যকোন অ্যাপে রাউটিং করে দেওয়া হয় তখন সেই অ্যাপ এর urls.py ফাইলে চলে যায় ।
urls এ কোন particular routing এর জন্য view class এ ফাংশন এ হিট করে, সেখানে অর্থাৎ সেই ফাংশনের (function based view)
রিটার্ন সেকশনে ৩ জিনিশ দিতে হয় । প্রথমটাতে request object, দ্বিতীয়টাতে কোন টেম্পলেট এর html লোড করবে সেটা, তৃতীয়টাতে কনট্যাক্সট অবজেক্ট রিটার্ন করে । কনট্যাক্সট অবজেক্ট হচ্ছে মূলত ডাটা যেটা কিনা ডাটাবেজ থেকে ডাটা নিয়ে আসে এবং টেম্পলেটে পাঠিয়ে দেয় ।
url setup
এখন settings.py ফাইলে template directory setup করার জন্য নিচের কমান্ডটির মাধ্যমে সেটআপ করতে হয়
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR, 'templates')],
}
]
এরপর প্রজেক্টের রুট directory তে templates নামে একটা ডিরেক্টরি ক্রিয়েট করে যে app এর টেম্পলেট লোড করতে হবে সেই app এর নামে একটি ডিরেক্টরি ক্রিয়েট করতে হবে templates এর আণ্ডারে templates > app_name > fileName এভাবে ডিরেক্টরি ক্রিয়েট করতে হবে ।
একটি base HTML ফাইল বানাতে হবে, যেই ফাইলটাকে সকল HTML ফাইল extend করবে ।
in my case আমি এর নাম দিয়েছি base.html যেটা কিনা templates ফোল্ডারের আণ্ডারে থাকবে ।
vscode এ Django template syntax সাপোর্ট দেওয়ার জন্য আমাদেরকে Jinja install করতে হবে । এসময় অবশ্যই টার্মিনালে ভার্চুয়াল এনভাইরনমেন্ট একটিভ করে নিতে হবে যাতে করে ঐ প্যাকেজটি আমাদের ভার্চুয়াল এনভাইরনমেন্ট এই ইন্সটল হয় । এই প্যাকেজটি ইন্সটল করলে template syntax highlighter সাপোর্ট দিবে ।
static
css, javascript, image, font এগুলো হচ্ছে স্ট্যাটিক ফাইল । এই ফাইলগুলো ইউজ করতে হলে মেইন প্রজেক্ট ফোল্ডারের আণ্ডারে static নামে ফোল্ডার বানিয়ে ফাইল গুলো রাখতে হবে । পাশের ইমেজে মেইন প্রজেক্ট ফোল্ডার btre আর এর আণ্ডারে static ফোল্ডার আছে ।
দ্রষ্টব্যঃ ডাটাবেজে যে ইমেজ ফাইলগুলোর লিঙ্ক থাকবে সেই ইমেজ ফাইলগুলো media ফোল্ডারের মধ্যে থাকবে এটার সাথে static ইমেজ ফাইলগুলোর কোন সম্পর্ক নাই ।
python manage.py collectstatic
এই কমান্ড দিলে btrc/static ফোল্ডার থেকে স্ট্যাটিক ফাইল গুলো নিয়ে এসে প্রজেক্ট ফোল্ডারের আণ্ডারে stattic নামে ফোল্ডার ক্রিয়েট করে ফাইল গুলো জমা করে । সেটিং ফাইলে সেটা বলে দিতে হবে পাশের চিত্রের মতো কোড করে । STATIC_ROOT এর মধ্যে ফোল্ডারের নাম static না দিয়ে অনেকে asset নামেও লিখে । যতবার static ডিরেক্টরির কোন অংশে পরিবর্তন আনবো ততবারই collectstatic কমান্ডটি চালাতে হবে ।
স্ট্যাটিক ফাইল সেটিং এ অ্যাড করার জন্য পাশের চিত্রের মতো কোড লিখে লিঙ্ক করতে হয় ।
আর স্ট্যাটিক ফাইল অ্যাড করার জন্য প্রথমে ফাইলের উপড়ে {% load static %} এই লাইনটা অ্যাড করে নিতে হবে ।
partials ডিরেক্টরি টি সাধারণত ব্যাবহার করা হয় base ফাইল থেকে চাপ কমানোর জন্য অর্থাৎ base ফাইল যেন বেশী হিজিবিজি না হয় সেই জন্য ফাইলের সকল সেকশন গুলোকে আলাদা আলাদা করে partials ডিরেক্টরিতে রাখতে হবে এবং পরবর্তীতে সেই ফাইলগুলোকে base ফাইলে ইনক্লুড করে দিতে হবে । partials ফাইলগুলোর নাম প্রথমে underscore দিতে হয় (conventional rule ). এরপর যেখানে প্রয়োজন সেখানে শুধু include ট্যাগ দিয়ে insert করে নিতে হবে ।
static image অ্যাড করার জন্য নিচের মতো করে দেখানো সিনট্যাক্স ইউজ করতে হয় ।
<img src="{% static 'img/logo.png' %}" alt="logo">
এখন footer সেকশনের কোডগুলো footer partials এর মধ্যে রাখতে হবে, navbar এর কোডগুলো navbar এর মধ্যে রাখতে হবে । এভাবে বাকীগুলা রেখে মেইন base.html এর মধ্যে include করে দিতে হবে ।
{% extends 'base.html'%}
এই লাইন টা সবসময় ফাইলের প্রথমে লিখতে হয়, অর্থাৎ যে base file টাকে extend করবো সেই কোড টুকু ফাইলের প্রথমে লিখতে হয়
URL
<a class="nav-link" href="{% url 'about' %}">About</a>
url এভাবে Django template syntax অনুযায়ী সেটআপ করতে হয় । এখানে url এর পর ‘about’ দেওয়া হয়েছে । এই নাম টা এসেছে url.py সেকশনে ঐ পার্টিকুলার link এ name ট্যাগের ভেলু হিসেবে এই নামটি(‘about’) দেওয়া হয়েছে সেখান থেকে ।
add/remove dynamic bootstrap class in html
এরপর নতুন ২ টা অ্যাপ ক্রিয়েট করতে হবে যেগুলোর নাম হবে listings, realtors এবং এগুলোর জন্য স্পেসিফিক url সেটআপ করতে হবে ।
Models, Migrations and Admin
postgre sql installation and set up process
postgre sql ইন্সটল করার নিয়ম আমার আগের লিখা ব্লগ এখানে আছে
sudo -u postgres -i
এই কমান্ড দেওয়ার পড় psql
কমান্ড দিলে postgre sql সার্ভারে প্রবেশ করে ।
create user and password
\password postgres
password : droidjahangir
ডাটাবেজ ক্রিয়েট করা
CREATE DATABASE btredb OWNER postgres;
এরপর আমরা pgadmin4 এ user postgres
এবং password দিয়ে একটি নতুন সার্ভার ক্রিয়েট করে নিলেই কাজ করার জন্য প্রস্তুত হয়ে যাবে ।
এখন টার্মিনাল ওপেন করে প্রজেক্ট ডিরেক্টরিতে গিয়ে ভার্চুয়াল environment একটিভ করে নিচের কমান্ড দুটোর মাধ্যমে psycopg2
এবং psycopg2-binary
ইন্সটল করতে হবে
pip install psycopg2pip install psycopg2-binary
এরপর settings.py ফাইলে গিয়ে ডাটাবেজ সেকশনটি এডিট করতে হবে
ডাটাবেজ সেকশন সেটআপ হয়ে গেলে migration করতে হবে
python manage.py migrate
database model টা এভাবে ক্রিয়েট করতে হবে ।
listing, realtor এবং contact এর জন্য ডাটাবেজ বানাতে হবে ।
django model field documentation থেকে বিভিন্ন ধরনের ফিল্ড টাইপ দেখে নেওয়া যেতে পারে ।
এখন listings>model.py ফাইলে মডেল তৈরি করতে হবে ।
model তৈরি করা হয়ে গেলে আমাদেরকে আগে Pillo package টি ইন্সটল করতে হবে এজন্য নিচের কমান্ডটি চালাতে হবে ।
pip install Pillow
Pillow install হয়ে গেলে makemigrations কমান্ডটি চালাতে হবে ।
python manage.py makemigrations
ডাটাবেজের shell এ ঢুকার জন্য নিচের কমান্ড টি দিতে হয় ।
python manage.py dbshell
makemigrations কমান্ডটির মাধ্যমে ডাটাবেজের কোন পরিবর্তন হয় না । এই কমান্ডটি জাস্ট আমাদের মডেল কে sql ফাইলে কনভার্ট করে । এরপর যখন আমরা migrate কমান্ডটি দিবো তখন এই ফাইলের মাধ্যমে ডাটাবেজে পরিবর্তন হয় । তাই যখন ই ডাটাবেজের মডেলে কোন পরিবর্তন করবো তখনি প্রথমে makemigrations কমান্ড চালাবো এরপর migrate কমান্ড চালাবো ।
python manage.py sqlmigrate listings 0001
টার্মিনালে এই কমান্ড দিলে আমরা ঐ ফাইলের raw sql কুইরি দেখতে পাড়বো । 0001 হচ্ছে migrations ডিরেক্টরির মধ্যে ফাইল নাম্বার ।
এই মডেলে আমরা ইমেজ সেকশনে CharField ব্যাবহার করেছি কারণ কোন ডিরেক্টরিতে আমরা ইমেজ সেভ করবো সেটা জাস্ট বলে দিবো এখানে ।
Create super user and Register model with Admin
python manage.py createsuperuser
এই কমান্ডটির মাধ্যমে সুপার ইউজার বানানো যায় এডমিন সাইটের জন্য । suparuser ক্রিয়েট হয়ে গেলে এডমিন সাইটে গিয়ে username আর password দিয়ে login করবো । লগিন করার পড় বিভিন্ন ধরনের পারমিশন সেট করা যাবে । আমাদের নতুন বানানো সুপার ইউজারের stuff status এ টিক মার্ক দেওয়া থাকবে যার মানে হচ্ছে শুধুমাত্র স্টাফরাই এই এডমিন প্যানেলে ঢুকতে পারবে । এছাড়া আমরা নরমাল যেসব ইউজার বানাবো যেমন কেউ রেজিস্টার অপশনে গিয়ে রেজিস্টার করে লগিন করলেও এই এডমিন প্যানেলে ঢুকতে পারবে না । stuff status অপশনে টিক মার্ক তুলে দিলে আর সে এই এডমিন প্যানেলে ঢুকতে পারবে না ।
এডমিন প্যানেলে ডাটাবেজের কলাম গুলো দেখতে চাইলে এবং ভেলু এড করতে চাইলে admin.py file এ আমাদের নতুন বানানো মডেলটি রেজিস্টার করে দিতে হবে এর জন্য নিচের লাইনটি লিখতে হবে admin.py ফাইল এ
Listing এর মতো করে Realtor কেউ রেজিস্ট্রেশন করতে হবে ।
media directory
মিডিয়া ডিরেক্টরিতে সাধারণত ডাটাবেজের ইমেজ গুলো রাখা হয় । এই মিডিয়া ডিরেক্টরি ক্রিয়েট করার জন্য সেটিং ফাইলে গিয়ে সবার শেষে নিচের কোডগুলো লিখতে হয় এবং প্রজেক্ট ডিরেক্টরির url.py ফাইলে গিয়ে সেই ডিরেক্টরির পাথ ধরিয়ে দিতে হয় ।
এখন ডাটাবেজ ক্রিয়েট হয়ে গেলে ডাটা insert করে নিবো ।
Admin site Customization
admin সাইট কাস্টমাইজেশন করার জন্য আমাদেরকে সবসময় base.hml
ক্লাসকে extend করতে হবে । ব্রান্ডিং লোগো চেঞ্জ করার জন্য block branding
কে customize করতে হয় ।
css এর যেসব প্রপার্টিকে override করবো সেইগুলো একটা css ফাইলের মধ্যে রাখতে হবে । আর সেই ফাইলটাকে লিঙ্কাপ করবো সেই ফাইলাকে block extrastyle
ব্লকের মধ্যেে দিতে হবে ।
আর সেই ফাইলটাকে project directory > static > css > file_name এই ডিরেক্টরিতে রাখতে হবে ।
এডমিন সাইট কাস্টমাইজ করার জন্য আমরা একটি ক্লাস নিবো এবং পরবর্তীতে সেটা রেজিস্টার করে দিবো ।
সাধারণত ডিফল্ট হিসেবে শুধু __str__
এই
মেথডের মধ্যে যেটা ডিফাইন করা থাকে সেটাই শো করে এডমিন প্যানেলে মডেল ফিল্ডগুলো কিন্তু আমরা যদি চাই যে আরও কিছু ফিল্ড শো করতে তাহলে list_display
field এর মধ্যে বলে দিতে হবে ।
list_display_links
সাধারণত টাইটেলের উপড়ে ক্লিক করলেই ঐ particular field এর detail অপশনে চলে যায় কিন্তু আমার যদি আরও কয়েকটা কলামের উপড়ে এই ক্লিক একশন দিতে চাই তাহলে এইখানে বলে দিতে হবে ।
list_filter
ফিলটার অপশন side bar এ দিতে চাইলে এখানে বলে দিতে হয় ।
list_editable
সরাসরি এডিট করার জন্য এখানে বলে দিতে হয় ।
search_field
সার্চ অপশন এড করার জন্য এই ফিল্ড এড করতে হয়
View Methods, Display & Search
price এর মাঝে কমা ডিফল্টভাবে দেওয়া থাকে না । টাকার অঙ্কের মাঝে কমা দেওয়ার জন্য humanize
install করতে হবে, এটা django র build-in package. প্রজেক্ট ডিরেক্টরির settings file এ INSTALLED_APPS এর মধ্যে নিচের লাইন টি দিয়ে দিতে হবে এবং যে ফাইলে এই প্যাকেজ ব্যাবহার করবো সেই ফাইলের উপড়ে {% load humanize %} এই লাইনটি অ্যাড করে নিতে হবে ।
# humanize
'django.contrib.humanize',
<span class=”badge badge-secondary text-white”>${{ listing.price | intcomma}}</span>
এভাবে ইউজ করতে হয় |পাইপ ক্যারেক্টারের মাধ্যমে ।
pagination, order, filter
pagination এর জন্য অফিসিয়াল পেজ ফলো করা যেতে পারে
এখানে
listings = Listing.objects.order_by('-list_date').filter(is_published=True)
এই লাইনটাতে order_by
প্যারামিটারে -list_date
দ্বারা বোঝানো হয়েছে যে সর্বশেষ যে পোস্ট টি করা হয়েছে সেটি আগে দেখাতে হবে, আর filter মেথডের মধ্যে প্যারামিটার দ্বারা বোঝানো হয়েছে যে পোস্ট গুলা পাবলিশ করা হয়েছে সেগুলোই শুধু লিস্টে দেখাবে ।
এখানে আমরা ডাটাবেজ থেকে ডাটা এনে about page এ realtor ডাটাবেজের ইনফরমেশন ডাইন্যামিক্যালি দেখিয়েছি ।
এখানে ইনডেক্স পেজের ডাটা শো করিয়েছি । ডাটাবেজ থেকে শুধু ৩ টা রো এর ডাটা এনে হোম পেজে দেখিয়েছি । আর শুধুমাত্র যে ডাটাগুলো পাবলিশ হয়েছে সেই ডাটাগুলোই ফিলটার করে এনেছি ।
Single listing page
single listing page এর জন্য listing_id
প্যারামিটার এ ঐ পার্টিকুলার id র against এ ডাটা নিয়ে আসে এবং টেম্পলেটে সেই ডাটাগুলো dynamically insert করে দেয় ।
এভাবে ডাটাগুলো এক্সেস করে template এ insert করতে হয় , আর if-else condition দিয়ে চেক করে ডাটা আছে কি নাই ।
Search
index page অর্থাৎ হোম পেজে সার্চ অপশন আছে এখান থেকে অপশন সিলেক্টকরে সাবমিট বাটন ক্লিক করলে এটা <form action=”{% url ‘search’ %}”> এখান থেকে search
keyword খুঁজে url এ । এরপর সেটা listings এর url এ খুঁজে পেলে search মেথডে যেয়ে হিট করে । এই search মেথডেই সকল মেন্যুপুলেসন বলে দেওয়া হয় । এখান থেকেই ডাটা নিয়ে search.html
ফাইল ওপেন করে ফ্রন্ট-এন্ডে দেখায় ।
description_icontains=keywords
এর মানে হচ্ছে description প্যারাগ্রাফ থেকে keywords খুঁজে নিয়ে আসে ।
city__iexact=city মানে হচ্ছে এক্স্যাক্ট city value টাই নিয়ে আসে ।
bedrooms__lte=bedrooms মানে হচ্ছে bedrooms এর ভেলু lessthan or equal to
preserve search value
Accounts & Authentication
django তে ইউজারের জন্য আলাদা কোন মডেল বানাতে হয় না, build-in ইউজার মডেল বানানো থাকে ।
প্রথমে একটি app ক্রিয়েট করে url set-up করতে হবে । টেম্পলেটে যেয়ে account নামে directory বানিয়ে তিনটি html ফাইল বানাতে হবে login.html, register.html, dashboard.html. এই সবগুলোই base.html কে extend করবে ।
form বানাতে হবে এবং form এর নিচে {% csrf_token%} দিয়ে দিতে হবে ।
client side validation and alert message
client side validation এ আমরা username, email এগুলা চেক করবো ডাটাবেজের সাথে ।
messaging সম্পর্কে details যানতে অফিসিয়াল ডকুমেন্টেশন পড়তে হবে । INSTALLED_APPS এ messages নামে প্যাকেজ build-in এবং এটা import করাই থাকে ।
কাস্টম alerts বানানোর জন্য templates>partials ডিরেক্টরির মধ্যে alerts.html ফাইল বানিয়ে bootstrap এর alert code অ্যাড করে কিছু কাস্টমাইজ করতে হবে ।
এখন view file এ নিচের প্যাকেজটি import করতে হবে ।
from django.contrib import messages
এরপর যেখানে এই মেসেজটি ইউজ করবো সেখানে কল করে দিতে হবে নিচের নিয়মে
messages.error(request, 'That username is taken')
messages.success(request, 'You are now registered and can log in')
এখন টেম্পলেটের যেখানে মেসেজটি দেখাতে চাই সেখানে ঐ মেসেজটি include করে দিতে হবে ।
{% include 'partials/_alerts.html' %}
আমরা যদি চাই যে মেসেজটি ৩ সেকেন্ড পড় চলে যাবে , toast এর মতো তাহলে static> js> main.js ফাইল এর মধ্যে নিচের jQuery কোডগুলো লিখতে হবে ।
setTimeout(function() {
$('#message').fadeOut('slow');
}, 3000);
দ্রষ্টব্য: static ডিরেক্টরিতে কোন পরিবর্তন আনলে অবশ্যই collectstatic কমান্ড চালাতে হয় ।
উপরের এই কন্ডিশন গুলো ইউজ করে ফর্ম থেকে ডাটা কালেক্ট করে ডাটাবেজে নতুন একটি ইউজার ক্রিয়েট করা যায় এবং alert সেট করা যায় ।
redirect
করে যদি হোম পেজে পাঠিয়ে দেই তাহলে যেখানে alert টা দেখাতে চাই সেখানে {% include ‘partials/_alerts.html’ %} লাইনটা pest করে দিলে সেখানে alert দেখাবে ।
এই ইউজারে রেজিস্টার করলে is_stuff এবং is_super এ false দেখাবে কারণ এই ইউজার শুধুমাত্র আমাদের ওয়েবসাইটে ঘুরাঘুরি করতে পারবে কিন্তু admin panel
এ কোন কাজ করতে পারবে না ।
alert include করে দেওয়া থেকে ঠিকই কিন্তু এটা শুধুমাত্র তখন টি ট্রিগার হবে যখন কোন view ফাইলের কোন method থেকে কল করা হবে ।
login
রেজিস্টার হয়ে গেলে এখন লগিন করতে হবে ।
অন্য username আর password দিয়ে লগিন করার পড় আমার সুপার ইউজার লগ আউট হয়ে যাবে । তখন যদি আবার আমি admin panel এ ঢুকতে চাই তখন আবার super user এ লগিন করতে হবে ।
dashboard
dashboard এর জন্য এভাবে কোড লিখতে হয় navbar dynamic করার জন্য । এখানে লগিন করলে dashboard এ ইউজারের নাম দেখিয়ে welcome দেখাবে এবং logout অপশন দেখাবে । logout করার জন্য ফর্ম সাবমিট করতে হয় template এ এবং নিচের কোডের মতো করে auth.logout(request)
করতে হয় । আর alert message টেম্পলেটের যেখানে দেখাতে চাই সেখানে include করে view থেকে কল করলেই হয়ে যায় ।
Dynamic page title
এই লাইনটা দিতে হবে base.html পেজে ।
<title>BT Real Estate {% block title %}{% endblock %}</title>
আর এই লাইনটা দিতে হবে যে পেইজের টাইটেল চেঞ্জ করতে হবে ।
{% block title %} | Dashboard{% endblock %}
Contact Inquiries
contacts inquiry র জন্য প্রথমে একটি অ্যাপ বানাতে হবে এরপর একটি মডেল বানাতে হবে এবং contacts অ্যাপ কে রেজিস্টার করে দিতে হবে, সেটিং ফাইলের installed app সেকশনে ধরিয়ে দিতে হবে ।
python manage.py makemigrations contacts
এরপর makemigrations কমান্ড দিতে হবে মাইগ্রেসন হয়ে গেলে সেই মাইগ্রেসন ফাইল দিয়ে ডাটাবেজ বানাতে হবে migrate কমান্ড দিতে হবে ।
python manage.py migrate
admin customization
view file
form থেকে ডাটা নিয়ে প্রথমে চেক করছে user অথেন্টিকেট কিনা , এরপর অথেন্টিকেট হলে চেক করছে এর পূর্বে inquiry করেছে কিনা । inquiry করে থাকলে এরর দেখাবে আর না করে থাকলে ডাটাবেজে সেভ করে দিবে ।
Send email
ডাটাবেজে সেভ করার পড় যদি এডমিনকে মেইল করার প্রয়োজন হয় তখন সেখান থেকে ইমেইল পাঠানো যায় । অফিসিয়াল ডকুমেন্টেশন এখানে
HTML file
Dashboard
form validation
validate form
custom user model
নরমালি username আর password দিয়ে লগিন করতে হয় কিন্তু আমরা যদি চাই যে email আর password দিয়ে লগিন করতে তাহলে এই কোড টি ফলো করা যেতে পারে ।
এরপর সেটিং ফাইলে গিয়ে STATIC_URL
এর নিচে নিচের এই লাইনটি দিয়ে দিতে হবে
AUTH_USER_MODEL = 'app_name.UserProfile'
এরপর admin সেকশনে এই মডেলটি রেজিস্ট্রেশন করে দিতে হবে ।
put → আমরা যদি কোন ফাইলের সবগুলো ডাটা আপডেট করতে চাই তাহলে put ব্যাবহার করতে হয় ।
patch →আর যদি মাত্র একটা ফাইল আপডেট করতে চাই তাহলে patch ব্যাবহার করতে হয় ।
put request পুরো অবজেক্ট এর স্ট্যাটাস পরিবর্তন করে দেয় অন্যদিকে patch request শুধুমাত্র ফিল্ডের স্ট্যাটাস পরিবর্তন করে দেয় ।
Deployment
deployment এর জন্য প্রথমে গিটহাবে একটি রিপজিটরী বানায়ে হবে । এরপর নিচের কমান্ডগুলো দিতে হবে যেখানে প্রজেক্টের কোড গুলো আছে । এছাড়া গিটের জন্য SSH সেটআপ করে রাখতে হবে লোকাল পিসিতে ।
git init
git add .
git commit -m 'Initial commit'
এরপর SSH কি অ্যাড করে দিবো
git remote add origin git@github.com:droidjahangir/btre_real_estate_project.git
Social login with google
প্রথমে আমাদের django-allauth প্যাকেজটি ইন্সটল করে নিতে হবে ।
pip install django-allauth
এটার ডকুমেন্টেশন নিচে ।
django তে authentication এর জন্য অনেকগুলো প্যাকেজ আছে যেগুলো পাশের ছবিতে দেওয়া আছে ডকুমেন্টেশন থেকে যেটার জন্য authentication প্রয়োজন সেই প্যাকেজ টা installed app এ register করে দিলেই হয়ে যাবে ।
এরপর নিচের কোডগুলো দিয়ে দিতে হবে settings.py ফাইলে ।