Check python version
python --version
Check PIP version
pip --version
Check Django install or not
django-admin --version
Install Django in Separate Environment
Install Virtual Environment Wrapper
pip install virtualenv
Create Virtual Environment (VE)
virtualenv env
Active Virtual Environment (VE)
cd env/Scripts
activate
Install Django in Created VE
pip install django
OR
*You can also specify version*
pip install django==2.0
Create Django Project
django-admin startproject projectname
Uninstall Django from Separate Environment
Active Virtual Environment (VE)
workon envname
Uninstall Django from VE
pip uninstall django
Remove Virtual Environment
rmvirtualenv envname
Uninstall Virtual Environment Wrapper
pip uninstall virtualenvwrapper-win
How to run server
python manage.py runserver
Server Started Visit http://127.0.0.1:8000 or http://localhost:8000
You can specify Port number python manage.py runserver 5555 Visit http://127.0.0.1:5555 or http://localhost:5555
ctrl + c is used to stop Server
Note – Sometime when you make changes in your project you may need to restart the server.
How to Start/Create Application
Creating One Application inside Project:-
Go to Project Folder
pip freeze
Install All requirement
pip install -r requirements.txt -v
create requirements.txt file using freeze
pip freeze > requirements.txt
Views.py
urls.py
Url inside Application
views.py
fees/urls.py
urls.py
We create templates folder inside Project Folder
settings.py
views.py
Messages Framework
INSTALLED_APPS = [ 'django.contrib.messages' ]
MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.messages.middleware.MessageMiddleware' ]
‘context_processors’: ['django.contrib.messages.context_processors.messages’]
Message Tag:-
from django.contrib import admin
from .models import User
# Register your models here.
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'email', 'password')
from django.db import models
# Create your models here.
class User(models.Model):
name=models.CharField(max_length=70)
password=models.CharField(max_length=70)
email=models.EmailField(max_length=70)
from django import forms
from .models import User
class StudentRegistration(forms.ModelForm):
class Meta:
model = User
fields = ['name', 'email', 'password']
from django.shortcuts import render
from .forms import StudentRegistration
from django.contrib import messages
# Create your views here.
def regi(request):
messages.add_message(request, messages.SUCCESS, 'Your Account has been created !!!')
messages.info(request, 'Now You can Login')
messages.warning(request, 'This is warning')
messages.error(request, 'This is an error')
fm = StudentRegistration()
return render(request, 'enroll/userregistration.html', {'form':fm})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.alert-info {
color: blue;
}
.alert-success{
color:green;
}
.alert-warning{
color:orange;
}
.alert-danger{
color:red;
}
</style>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Submit">
</form>
{% if messages %}
{% for message in messages %}
<p {% if message.tags %} class="alert-{{message.tags}}" {% endif %}>{{message}}</p>
{% endfor %}
{% endif %}
</body>
</html>
Message Tag Change
MESSAGE_TAGS = {messages_s.ERROR:'danger'}
User Authtication(gs66,67)
from django.contrib.auth.models import User
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class SignUpForm(UserCreationForm):
password2 = forms.CharField(label='Confirm Password (again)', widget=forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'first_name', 'last_name', 'email']
labels = {'email': 'Email'}
class EditUserProfileForm(UserChangeForm):
password = None
class Meta:
model = User
fields = ['username', 'first_name', 'last_name', 'email', 'date_joined', 'last_login']
labels = {'email': 'Email'}
class EditAdminProfileForm(UserChangeForm):
password = None
class Meta:
model = User
fields = '__all__'
labels = {'email': 'Email'}
from django.contrib import admin
from django.urls import path
from enroll import views
urlpatterns = [
path('admin/', admin.site.urls),
path('signup/', views.sign_up, name='signup'),
path('login/', views.user_login, name='login'),
path('dashboard/', views.user_dashboard, name='dashboard'),
path('logout/', views.user_logout, name='logout'),
]
from django.shortcuts import render, HttpResponseRedirect
from .forms import SignUpForm, EditUserProfileForm, EditAdminProfileForm
from django.contrib import messages
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm, SetPasswordForm
from django.contrib.auth import authenticate, login, logout, update_session_auth_hash
from django.contrib.auth.models import User
# Signup View Function
def sign_up(request):
if request.method == "POST":
fm = SignUpForm(request.POST)
if fm.is_valid():
messages.success(request, 'Account Created Successfully !!')
fm.save()
else:
fm = SignUpForm()
return render(request, 'enroll/signup.html', {'form':fm})
# Login View Function
def user_login(request):
if not request.user.is_authenticated:
if request.method == "POST":
fm = AuthenticationForm(request=request, data=request.POST)
if fm.is_valid():
uname = fm.cleaned_data['username']
upass = fm.cleaned_data['password']
user = authenticate(username=uname, password=upass)
if user is not None:
login(request, user)
messages.success(request, 'Logged in successfully !!')
return HttpResponseRedirect('/profile/')
else:
fm = AuthenticationForm()
return render(request, 'enroll/userlogin.html', {'form':fm})
else:
return HttpResponseRedirect('/profile/')
# Profile
def user_profile(request):
if request.user.is_authenticated:
if request.method == "POST":
if request.user.is_superuser == True:
fm = EditAdminProfileForm(request.POST, instance=request.user)
users = User.objects.all()
else:
fm = EditUserProfileForm(request.POST, instance=request.user)
users = None
if fm.is_valid():
messages.success(request, 'Profile Updated !!!')
fm.save()
else:
if request.user.is_superuser == True:
fm = EditAdminProfileForm(instance=request.user)
users = User.objects.all()
else:
fm = EditUserProfileForm(instance=request.user)
users = None
return render(request, 'enroll/profile.html', {'name': request.user.username, 'form':fm, 'users':users})
else:
return HttpResponseRedirect('/login/')
# Logout
def user_logout(request):
logout(request)
return HttpResponseRedirect('/login/')
# Change Password with old Password
def user_change_pass(request):
if request.user.is_authenticated:
if request.method == "POST":
fm = PasswordChangeForm(user=request.user, data=request.POST)
if fm.is_valid():
fm.save()
update_session_auth_hash(request, fm.user)
messages.success(request, 'Password Changed Successfully')
return HttpResponseRedirect('/profile/')
else:
fm = PasswordChangeForm(user=request.user)
return render(request, 'enroll/changepass.html', {'form':fm})
else:
return HttpResponseRedirect('/login/')
def user_detail(request, id):
if request.user.is_authenticated:
pi = User.objects.get(pk=id)
fm = EditAdminProfileForm(instance=pi)
return render(request, 'enroll/userdetail.html', {'form':fm})
else:
return HttpResponseRedirect('/login/')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User Registration</title>
<style>
.success{
color:red;
}
</style>
</head>
<body>
<form action="" method="post" novalidate>
{% csrf_token %}
{% if form.non_field_errors %}
{% for error in form.non_field_errors %}
<p class="er">{{error}}</p>
{% endfor %}
{% endif %}
{% for fm in form %}
{{fm.label_tag}} {{fm}} {{fm.errors|striptags}} <br><br>
{% endfor %}
<input type="submit" value="Submit">
</form>
{% if messages %}
{% for message in messages %}
<small {% if message.tags %} class="{{message.tags}}" {% endif %}> {{message}} </small>
{% endfor %}
{% endif %}
<a href="{% url 'login' %}">Login</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User Login</title>
<style>
.er{
color:red;
}
</style>
</head>
<body>
<form action="" method="post" novalidate>
{% csrf_token %}
{% if form.non_field_errors %}
{% for error in form.non_field_errors %}
<p class="er">{{error}}</p>
{% endfor %}
{% endif %}
{% for fm in form %}
{{fm.label_tag}} {{fm}} {{fm.errors|striptags}} <br><br>
{% endfor %}
<input type="submit" value="Login">
</form>
<a href="{% url 'signup' %}">Signup</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard</title>
</head>
<body>
<h1>Dashboard Page</h1>
<h2>Welcome {{name}}</h2>
{% if perms.enroll.delete_blog %}
<input type="button" value="Delete"> <br><br>
{% else %}
<h3>No Delete Permission</h3>
{% endif %}
{% if perms.enroll.add_blog %}
<input type="button" value="Add"> <br><br>
{% else %}
<h3>No Add Permission</h3>
{% endif %}
<a href="{% url 'logout' %}">Logout</a>
</body>
</html>
cookie(gs68)
less data store into the client machan, if we are not set expires, after close browser cookie will expire. In cookie we can store data, but in session we can store session id in cookie
from django.shortcuts import render
from datetime import datetime, timedelta
# Create your views here.
def setcookie(request):
reponse = render(request, 'student/setcookie.html')
reponse.set_cookie('lname', 'Jha', expires=datetime.utcnow()+timedelta(days=2))
return reponse
def getcookie(request):
# name = request.COOKIES['lname']
# name = request.COOKIES.get('name')
name = request.COOKIES.get('name', "Guest")
return render(request, 'student/getcookie.html', {'name':name})
def delcookie(request):
reponse = render(request, 'student/delcookie.html')
reponse.delete_cookie('name')
return reponse
set_signed_cookie and get_signed_cookie:(gs69)set_signed_cookie and get_signed_cookie "salt='nm'" sould be same ---> this is one of the squre feature
from django.shortcuts import render
from datetime import datetime, timedelta
# Create your views here.
def setcookie(request):
reponse = render(request, 'student/setcookie.html')
reponse.set_signed_cookie('name', 'Sonam', salt='nm', expires=datetime.utcnow()+timedelta(days=2))
return reponse
def getcookie(request):
name = request.get_signed_cookie('name', default="Guest", salt='nm')
return render(request, 'student/getcookie.html', {'name':name})
def delcookie(request):
reponse = render(request, 'student/delcookie.html')
reponse.delete_cookie('name')
return reponse
Session(gs71, 72, 74)
# In Session data store into the server(Database) not in client machan, here cookies contain session id
# By default session expire in 2 week
# Session data store into the server so, we have run migrate for create table
# In cookie we can store simple text data, but in session we can store session id in cookie
Session Type:
1. database-backed sessions(By default)
2. file-based sessions(gs76)
3. cookie-based sessions
4. cached sessions
from django.shortcuts import render
# Create your views here.
def setsession(request):
request.session.set_expiry(10)
request.session['name'] = 'Sonam'
request.session['lname'] = 'Jha'request.session['dicts'] = {'name':'Sonam', 'roll':101}
return render(request, 'student/setsession.html')
def getsession(request):
name = request.session.get('name', default="puspendu")
keys = request.session.keys()
items = request.session.items()
# age = request.session.setdefault('age', '26')
dicts = request.session['dicts']
print(request.session.get_session_cookie_age())
print(request.session.get_expiry_age())
print(request.session.get_expiry_date())
print(request.session.get_expire_at_browser_close())
return render(request, 'student/getsession.html', {'name':name, 'keys':keys, 'items':items})
def delsession(request):
request.session.flush()
request.session.clear_expired()
return render(request, 'student/delsession.html')
Set session expire age:
# SESSION_COOKIE_AGE 400 Sec a used hoy
SESSION_COOKIE_AGE = 400
# We can define session name, by default sessionId thaka
SESSION_COOKIE_NAME = 'sessionname'
# we can set path, By default only / thaka
SESSION_COOKIE_PATH = '/home'
Caching:
prathama data search korba cach ta, jodi data na pai tahola database thaka search kora niba.
A Cache is an information technology for the temporary storage (caching) of Web documents, such as Web pages, images, and other types of Web multimedia, to reduce server lag.
Caching is one of those methods which a website implements to become faster. It is cost efficient and saves CPU processing time.
Following are the options of caching:-
- Database Caching
- File System Caching
- Local Memory Caching
We can do Caching our application:
- The per-site cache - Once the cache is set up, the simplest way to use caching is to cache your entire site. gs78
- The per-view cache - A more granular way to use the caching framework is by caching the output of individual views. gs81
- Template fragment caching – This gives you more control what to cache. gs84
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware’,
]
The per-site cache(Database Caching)(gs78)
Before using the database cache, you must create the cache table with this command: python manage.py createcachetable (same to same run korta hoba)
CACHE_MIDDLEWARE_SECONDS = 30
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'enroll_cache',
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Course 1</h1>
<h1>Course 2</h1>
<h1>Course 3</h1>
<h1>Course 4</h1>
</body>
</html>
The per-view cache(File System Caching)(gs81, gs83)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': 'C:\DjangoCode\gs83\cache',
}
}
from django.shortcuts import render
from django.views.decorators.cache import cache_page
# Create your views here.
@cache_page(60)
def home(request):
return render(request, 'enroll/course.html')
def contact(request):
return render(request, 'enroll/contact.html')
from django.contrib import admin
from django.urls import path
from enroll import views
from django.views.decorators.cache import cache_page
urlpatterns = [
path('admin/', admin.site.urls),
path('', cache_page(30)(views.home)),
path('home/', views.home),
path('contact/', views.contact),
]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Course 1</h1>
<h1>Course 2</h1>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Contact 1</h1>
<h1>Contact 2</h1>
<h1>Contact 3</h1>
<h1>Contact 4</h1>
</body>
</html>
Template fragment caching(Local Memory Caching)(gs84)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request, 'enroll/course.html')
from django.contrib import admin
from django.urls import path
from enroll import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home),
]
<!DOCTYPE html>
{% load cache %}
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Course 1</h1>
<h1>Course 2</h1>
{% cache 30 course %}
<h1>Course 3</h1>
<h1>Course 4</h1>
{% endcache course %}
</body>
</html>
Signals(gs89)
from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed
from django.contrib.auth.models import User
from django.dispatch import receiver
from django.db.models.signals import pre_init, pre_save, pre_delete, post_init, post_save, post_delete, pre_migrate, post_migrate
from django.core.signals import request_started, request_finished, got_request_exception
from django.db.backends.signals import connection_created
@receiver(user_logged_in, sender=User)
def login_success(sender, request, user, **kwargs):
print("----------------------------")
print("Logged-in Signal... Run Intro..")
print("Sender:", sender)
print("Request:", request)
print("User:", user)
print("User Password:", user.password)
print(f'Kwargs: {kwargs}')
# user_logged_in.connect(login_success, sender=User)
@receiver(user_logged_out, sender=User)
def log_out(sender, request, user, **kwargs):
print("----------------------------")
print("Logged-out Signal... Run Outro..")
print("Sender:", sender)
print("Request:", request)
print("User:", user)
print(f'Kwargs: {kwargs}')
# user_logged_out.connect(log_out, sender=User)
@receiver(user_login_failed)
def login_failed(sender, credentials, request, **kwargs):
print("----------------------------")
print("Login Failed Signal...")
print("Sender:", sender)
print("Credentials:", credentials)
print("Request:", request)
print(f'Kwargs: {kwargs}')
# user_login_failed.connect(login_failed)
@receiver(pre_save, sender=User)
def at_beginning_save(sender, instance, **kwargs):
print("----------------------------")
print("Pre Save Signal...")
print("Sender:", sender)
print("Instance:", instance)
print(f'Kwargs: {kwargs}')
# pre_save.connect(at_beginning_save, sender=User)
@receiver(post_save, sender=User)
def at_ending_save(sender, instance, created, **kwargs):
if created:
print("----------------------------")
print("Post Save Signal...")
print("New Record")
print("Sender:", sender)
print("Instance:", instance)
print("Created:", created)
print(f'Kwargs: {kwargs}')
else:
print("----------------------------")
print("Post Save Signal...")
print("Update")
print("Sender:", sender)
print("Instance:", instance)
print("Created:", created)
print(f'Kwargs: {kwargs}')
# post_save.connect(at_ending_save, sender=User)
@receiver(pre_delete, sender=User)
def at_beginning_delete(sender, instance, **kwargs):
print("-----------------------------------------")
print("Pre Delete Signal......")
print('Sender:', sender)
print('Instance:', instance)
print(f'Kwargs: {kwargs}')
# pre_delete.connect(at_beginning_delete, sender=User)
@receiver(post_delete, sender=User)
def at_ending_delete(sender, instance, **kwargs):
print("-----------------------------------------")
print("Post Delete Signal......")
print('Sender:', sender)
print('Instance:', instance)
print(f'Kwargs: {kwargs}')
# post_delete.connect(at_ending_delete, sender=User)
@receiver(pre_init, sender=User)
def at_beginning_init(sender, *args, **kwargs):
print("-----------------------------------------")
print("Pre Init Signal......")
print('Sender:', sender)
print(f'Args: {args}')
print(f'Kwargs: {kwargs}')
# pre_init.connect(at_beginning_init, sender=User)
@receiver(post_init, sender=User)
def at_ending_init(sender, *args, **kwargs):
print("-----------------------------------------")
print("Post Init Signal......")
print('Sender:', sender)
print(f'Args: {args}')
print(f'Kwargs: {kwargs}')
# post_init.connect(at_ending_init, sender=User)
@receiver(request_started)
def at_beginning_request(sender, environ, **kwargs):
print("-----------------------------------------")
print("At Beginning Request......")
print('Sender:', sender)
print('Environ:', environ)
print(f'Kwargs: {kwargs}')
# request_started.connect(at_beginning_request)
@receiver(request_finished)
def at_ending_request(sender, **kwargs):
print("-----------------------------------------")
print("At Ending Request......")
print('Sender:', sender)
print(f'Kwargs: {kwargs}')
# request_finished.connect(at_ending_request)
@receiver(got_request_exception)
def at_req_exception(sender, request, **kwargs):
print("-----------------------------------------")
print("At Request Exception......")
print('Sender:', sender)
print('Request:', request)
print(f'Kwargs: {kwargs}')
# got_request_exception.connect(at_req_exception)
@receiver(pre_migrate)
def before_install_app(sender, app_config, verbosity, interactive, using, plan, apps, **kwargs):
print("-----------------------------------------")
print("before_install_app......")
print('Sender:', sender)
print('App_config:', app_config)
print('Verbosity:', verbosity)
print('Interactive:', interactive)
print('Using:', using)
print('Plan:', plan)
print('App:', apps)
print(f'Kwargs: {kwargs}')
# pre_migrate.connect(before_install_app)
@receiver(post_migrate)
def at_end_migrate_flush(sender, app_config, verbosity, interactive, using, plan, apps, **kwargs):
print("-----------------------------------------")
print("at_end_migrate_flush......")
print('Sender:', sender)
print('App_config:', app_config)
print('Verbosity:', verbosity)
print('Interactive:', interactive)
print('Using:', using)
print('Plan:', plan)
print('App:', apps)
print(f'Kwargs: {kwargs}')
# post_migrate.connect(at_end_migrate_flush)
@receiver(connection_created)
def conn_db(sender, connection, **kwargs):
print("-----------------------------------------")
print("Initial connection to the database......")
print('Sender:', sender)
print('Connection:', connection)
print(f'Kwargs: {kwargs}')
# connection_created.connect(conn_db)
from django.apps import AppConfig
class BlogConfig(AppConfig):
name = 'blog'
def ready(self):
import blog.signals
default_app_config = 'blog.apps.BlogConfig'
Custom Signals(gs90)
from django.shortcuts import render, HttpResponse
from blog import signals
# Create your views here.
def home(request):
signals.notification.send(sender=None, request=request, user=['Geeky', 'Shows'])
print("*******************")
return HttpResponse("This is Home Page")
from django.dispatch import Signal, receiver
# Creating Signals
notification = Signal(providing_args=["request", "user"])
# Receiver Function
@receiver(notification)
def show_notification(sender, **kwargs):
print(sender)
print(f'{kwargs}')
print("Notification")
Middleware
Function based Middleware (gs91)
def my_middleware(get_response):
print("One Time Initialization")
def my_function(request):
print("This is before view")
response = get_response(request)
print("This is after view")
return response
return my_function
MIDDLEWARE = [
...
'blog.middlewares.my_middleware',
]
from django.shortcuts import render, HttpResponse
# Create your views here.
def home(request):
print("I am View")
return HttpResponse("This is Home Page")
Middleware
- Built in Middleware
- Custom Middleware
- Function based Middleware
- Class based Middleware
Real life Ex1
Class based Middleware(gs92)
Example-1
Used single middlewares
class MyMiddleware:
def __init__(self, get_response):
self.get_response = get_response
print("One Time Initialization")
def __call__(self, request):
print("This is before view")
response = self.get_response(request)
print("This is after view")
return response
Example-2
Used multiple middlewares
from django.shortcuts import HttpResponse
class BrtoherMiddleware:
def __init__(self, get_response):
self.get_response = get_response
print("One Time Brtoher Initialization")
def __call__(self, request):
print("This is Brother before view")
response = self.get_response(request)
print("This is Brother after view")
return response
class FatherMiddleware:
def __init__(self, get_response):
self.get_response = get_response
print("One Time Father Initialization")
def __call__(self, request):
print("This is Father before view")
# response = self.get_response(request)
response = HttpResponse("Nikal lo")
# print("This is Father after view")
return response
class MummyMiddleware:
def __init__(self, get_response):
self.get_response = get_response
print("One Time Mummy Initialization")
def __call__(self, request):
print("This is Mummy before view")
response = self.get_response(request)
print("This is Mummy after view")
return response
Output 1 (With out return HttpResponse)
One Time Mummy Initialization
One Time Father Initialization
One Time Brtoher Initialization
This is Brother before view
This is Father before view
This is Mummy before view
I am View
This is Mummy after view
This is Father after view
This is Brother after view
Output 2 (return HttpResponse in FatherMiddleware)
One Time Mummy Initialization
One Time Father Initialization
One Time Brtoher Initialization
This is Brother before view
This is Father before view
This is Brother after view
MIDDLEWARE = [
.....
'blog.middlewares.BrtoherMiddleware',
'blog.middlewares.FatherMiddleware',
'blog.middlewares.MummyMiddleware',
]
Check once middleware gs94
QuerySet API
from django.db import models
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=70)
roll = models.IntegerField(unique=True, null=False)
city = models.CharField(max_length=70)
marks = models.IntegerField()
pass_date = models.DateField()
class Teacher(models.Model):
name = models.CharField(max_length=70)
empnum = models.IntegerField(unique=True, null=False)
city = models.CharField(max_length=70)
salary = models.IntegerField()
join_date = models.DateField()
from django.shortcuts import render
from .models import Student, Teacher
from django.db.models import Q
# Create your views here.
def home(request):
student_data = Student.objects.all()
student_data = Student.objects.filter(marks=70)
student_data = Student.objects.exclude(marks=70)
student_data = Student.objects.order_by('marks')
student_data = Student.objects.order_by('-marks')
student_data = Student.objects.order_by('?') # random
student_data = Student.objects.order_by('name')
student_data = Student.objects.order_by('id').reverse()
student_data = Student.objects.order_by('id').reverse()[0:5]
student_data = Student.objects.values()
student_data = Student.objects.values('name', 'city')
student_data = Student.objects.values_list()
student_data = Student.objects.values_list('id', 'name')
student_data = Student.objects.values_list('id', 'name', named=True)
student_data = Student.objects.using('default')
student_data = Student.objects.dates('pass_date', 'month')
############## Second Tables 'Teacher' Started ################
qs1 = Student.objects.values_list('id', 'name', named=True)
qs2 = Teacher.objects.values_list('id', 'name', named=True)
student_data = qs2.union(qs1)
qs1 = Student.objects.values_list('id', 'name', named=True)
qs2 = Teacher.objects.values_list('id', 'name', named=True)
student_data = qs2.union(qs1, all=True)
qs1 = Student.objects.values_list('id', 'name', named=True)
qs2 = Teacher.objects.values_list('id', 'name', named=True)
student_data = qs1.intersection(qs2)
qs1 = Student.objects.values_list('id', 'name', named=True)
qs2 = Teacher.objects.values_list('id', 'name', named=True)
student_data = qs2.difference(qs1)
############ AND OR operator ###############
student_data = Student.objects.filter(id=6) & Student.objects.filter(roll=106)
student_data = Student.objects.filter(id=6, roll=106)
student_data = Student.objects.filter(Q(id=6) & Q(roll=106))
student_data = Student.objects.filter(id=6) | Student.objects.filter(roll=107)
student_data = Student.objects.filter(Q(id=6) | Q(roll=108))
print("Return:", student_data)
print()
print("SQL Query:", student_data.query)
return render(request, 'school/home.html', {'students':student_data})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Student Information</title>
<style>
table, th, tr, td {
border: 1px solid black
}
</style>
</head>
<body>
<table>
<h3>Student Information</h3>
<th>ID</th>
<th>Name</th>
<th>Roll</th>
<th>City</th>
<th>Marks</th>
<th>Passing Year</th>
{% for student in students %}
<tr>
<td>{{student.id}}</td>
<td>{{student.name}}</td>
<td>{{student.roll}}</td>
<td>{{student.city}}</td>
<td>{{student.marks}}</td>
<td>{{student.pass_date}}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
from django.shortcuts import render
from .models import Student
# Create your views here.
def home(request):
student_data = Student.objects.get(pk=1)
student_data = Student.objects.first()
student_data = Student.objects.order_by('name').first()
student_data = Student.objects.last()
student_data = Student.objects.latest('pass_date')
student_data = Student.objects.earliest('pass_date')
student_data = Student.objects.all()
print(student_data.exists())
one_data = Student.objects.get(pk=1)
print(student_data.filter(pk=one_data.pk).exists())
student_data = Student.objects.create(name='Sameer', roll=114, city='Bokaro', marks=60, pass_date='2020-5-4')
student_data, created = Student.objects.get_or_create(name='Anisa', roll=115, city='Bokaro', marks=60, pass_date='2020-5-4')
print(created)
student_data = Student.objects.filter(id=12).update(name='Kabir', marks=80)
student_data = Student.objects.filter(marks=70).update(city='Pass')
student_data, created = Student.objects.update_or_create(id=14, name='Sameer', defaults={'name':'Kohli'})
print(created)
objs = [
Student(name='Atif', roll=116, city='Dhanbad', marks=70, pass_date='2020-5-4'),
Student(name='Sahil', roll=117, city='Bokaro', marks=50, pass_date='2020-5-6'),
Student(name='Kumar', roll=118, city='Dhanbad', marks=30, pass_date='2020-5-9'),
]
student_data = Student.objects.bulk_create(objs)
all_student_data = Student.objects.all()
for stu in all_student_data:
stu.city = 'Dhanbad'
student_data = Student.objects.bulk_update(all_student_data, ['city'])
student_data = Student.objects.in_bulk([1, 2])
print(student_data[2].name)
student_data = Student.objects.in_bulk([])
student_data = Student.objects.in_bulk()
student_data = Student.objects.get(pk=18).delete()
student_data = Student.objects.filter(marks=50).delete()
student_data = Student.objects.all().delete()
student_data = Student.objects.all()
print(student_data.count())
print("Return:", student_data)
return render(request, 'school/home.html', {'student':student_data})
from django.shortcuts import render
from .models import Student
from datetime import date, time
# Create your views here.
def home(request):
student_data = Student.objects.all()
student_data = Student.objects.filter(name__exact='Sonam')
student_data = Student.objects.filter(name__iexact='sonam')
student_data = Student.objects.filter(name__contains='u')
student_data = Student.objects.filter(name__icontains='U')
student_data = Student.objects.filter(id__in = [1, 5, 7])
student_data = Student.objects.filter(marks__in = [60, 70])
student_data = Student.objects.filter(marks__gt = 60)
student_data = Student.objects.filter(marks__gte = 60)
student_data = Student.objects.filter(marks__lt = 60)
student_data = Student.objects.filter(marks__lte = 60)
student_data = Student.objects.filter(name__startswith='S')
student_data = Student.objects.filter(name__istartswith='s')
student_data = Student.objects.filter(name__endswith='L')
student_data = Student.objects.filter(name__iendswith='L')
student_data = Student.objects.filter(passdate__range=('2020-04-01', '2020-05-03'))
student_data = Student.objects.filter(admdatetime__date=date(2020, 1, 2))
student_data = Student.objects.filter(admdatetime__date__gt=date(2020, 1, 4))
student_data = Student.objects.filter(passdate__year=2019)
student_data = Student.objects.filter(passdate__year__gte=2019)
student_data = Student.objects.filter(passdate__month=4)
student_data = Student.objects.filter(passdate__month__gte=4)
student_data = Student.objects.filter(passdate__day=2)
student_data = Student.objects.filter(passdate__day__gt=2)
student_data = Student.objects.filter(passdate__week=14)
student_data = Student.objects.filter(passdate__week__gt=14)
student_data = Student.objects.filter(passdate__week_day=5)
student_data = Student.objects.filter(passdate__week_day__gt=5)
student_data = Student.objects.filter(passdate__quarter=2)
student_data = Student.objects.filter(admdatetime__time__gt=time(21,17))
student_data = Student.objects.filter(admdatetime__hour__gt=5)
student_data = Student.objects.filter(admdatetime__minute__gt=20)
student_data = Student.objects.filter(admdatetime__second__gt=20)
student_data = Student.objects.filter(roll__isnull=False)
print("Return:", student_data)
print()
print("SQL Query:", student_data.query)
return render(request, 'school/home.html', {'students':student_data})
from django.shortcuts import render
from .models import Student
from django.db.models import Avg, Sum, Min, Max, Count
# Create your views here.
def home(request):
student_data = Student.objects.all()
average = student_data.aggregate(Avg('marks'))
total = student_data.aggregate(Sum('marks'))
minimum = student_data.aggregate(Min('marks'))
maximum = student_data.aggregate(Max('marks'))
totalcount = student_data.aggregate(Count('marks'))
context = {'students':student_data, 'average':average, 'total':total, 'minimum':minimum, 'maximum':maximum, 'totalcount':totalcount}
print(average)
print("Return:", student_data)
print()
print("SQL Query:", student_data.query)
return render(request, 'school/home.html', context)
from django.shortcuts import render
from .models import Student
from django.db.models import Q
# Create your views here.
def home(request):
student_data = Student.objects.filter(Q(id=6) & Q(roll=106))
student_data = Student.objects.filter(Q(id=6) | Q(roll=107))
student_data = Student.objects.filter(~Q(id=6))
print("Return:", student_data)
print()
print("SQL Query:", student_data.query)
return render(request, 'school/home.html', {'students':student_data })
from django.shortcuts import render
from .models import Student
# Create your views here.
def home(request):
student_data = Student.objects.all()[:5]
student_data = Student.objects.all()[5:10]
student_data = Student.objects.all()[:11:2]
print("Return:", student_data)
print()
print("SQL Query:", student_data.query)
return render(request, 'school/home.html', {'students':student_data })
Model Inheritance
Three type model inheritance
- Abstract Base Classes
- Multi-table Inheritance
- Proxy Models
from django.db import models
# Create your models here.
class CommonInfo(models.Model):
name = models.CharField(max_length=70)
age = models.IntegerField()
date = models.DateField()
class Meta:
abstract = True
class Student(CommonInfo):
fees = models.IntegerField()
date = None
class Teacher(CommonInfo):
salary = models.IntegerField()
class Contractor(CommonInfo):
date = models.DateTimeField()
payment = models.IntegerField()
from django.shortcuts import render
from .models import Student, Teacher, Contractor
# Create your views here.
def home(request):
student_data = Student.objects.all()
teacher_data = Teacher.objects.all()
contractor_data = Contractor.objects.all()
return render(request, 'school/home.html', {'students':student_data, 'teachers':teacher_data, 'contractors':contractor_data})
Multi-table Inheritance(gs103)
In this inheritance each model have their own database table, which means base class and child class will have their own table.
The inheritance relationship introduces links between the child model and each of its parents (via an automatically-created OneToOneField).
from django.db import models
# Create your models here.
class ExamCenter(models.Model):
cname = models.CharField(max_length=70)
city = models.CharField(max_length=70)
class Student(ExamCenter):
name = models.CharField(max_length=70)
roll = models.IntegerField()
from django.shortcuts import render
from .models import ExamCenter, Student
# Create your views here.
def home(request):
exam_center = ExamCenter.objects.all()
student_data = Student.objects.all()
return render(request, 'school/home.html', {'centers':exam_center, 'students':student_data})
All of the fields of ExamCenter will also be available in Student, although the data will reside in a different database table.
Proxy Models(gs104)
Sometimes, however, you only want to change the Python behavior of a model.
Two database table created.
If we insert data one table reflect another table, other table data visible behavior wise.
from django.db import models
# Create your models here.
class ExamCenter(models.Model):
cname = models.CharField(max_length=70)
city = models.CharField(max_length=70)
class MyExamCenter(ExamCenter):
class Meta:
proxy = True
ordering = ['city']
from django.shortcuts import render
from .models import ExamCenter, MyExamCenter
# Create your views here.
def home(request):
exam_center = ExamCenter.objects.all()
my_exam_center = MyExamCenter.objects.all()
return render(request, 'school/home.html', {'centers':exam_center, 'mycenters':my_exam_center})
Model Manager
Example-1(gs105)
from django.db import models
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=70)
roll = models.IntegerField()
students = models.Manager()
from django.shortcuts import render
from .models import Student
# Create your views here.
def home(request):
student_data = Student.students.all()
return render(request, 'school/home.html', {'students':student_data })
Example-2(gs106)
from django.db import models
from .managers import CustomManager
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=70)
roll = models.IntegerField()
objects = models.Manager()
students = CustomManager()
from django.shortcuts import render
from .models import Student
# Create your views here.
def home(request):
student_data = Student.students.all()
# student_data = Student.objects.all()
return render(request, 'school/home.html', {'students':student_data })
Custom Model Manager(gs107)
Example-1
from django.shortcuts import render
from .models import Student
# Create your views here.
def home(request):
# student_data = Student.objects.all()
student_data = Student.students.get_stu_roll_range(103, 109)
return render(request, 'school/home.html', {'students':student_data })
from django.db import models
class CustomManager(models.Manager):
def get_stu_roll_range(self, r1, r2):
return super().get_queryset().filter(roll__range=(r1, r2))
from django.db import models
from .managers import CustomManager
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=70)
roll = models.IntegerField()
objects = models.Manager()
students = CustomManager()
Example-2
from django.shortcuts import render
from .models import Student, ProxyStudent
# Create your views here.
def home(request):
student_data = Student.objects.all()
# student_data = ProxyStudent.students.all()
# student_data = ProxyStudent.students.get_stu_roll_range(103, 109)
return render(request, 'school/home.html', {'students':student_data })
from django.db import models
class CustomManager(models.Manager):
def get_stu_roll_range(self, r1, r2):
return super().get_queryset().filter(roll__range=(r1, r2)).order_by('id')
from django.db import models
from .managers import CustomManager
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=70)
roll = models.IntegerField()
class ProxyStudent(Student):
students = CustomManager()
class Meta:
proxy = True
ordering = ['name']
Model Relationship
- One to One Relationship
- Many to One Relationship
- Many to Many Relationships
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Page(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
# user = models.OneToOneField(User, on_delete=models.PROTECT, primary_key=True)
# user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, limit_choices_to={'is_staff':True})
page_name = models.CharField(max_length=70)
page_cat = models.CharField(max_length=70)
page_publish_date = models.DateField()
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Page(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
page_name = models.CharField(max_length=70)
page_cat = models.CharField(max_length=70)
page_publish_date = models.DateField()
class Like(Page):
panna = models.OneToOneField(Page, on_delete=models.CASCADE, primary_key=True, parent_link=True)
likes = models.IntegerField()
2. Many to One Relationship(gs111)
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Post(models.Model):
# user = models.ForeignKey(User, on_delete=models.CASCADE)
# user = models.ForeignKey(User, on_delete=models.PROTECT)
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
post_title = models.CharField(max_length=70)
post_cat = models.CharField(max_length=70)
post_publish_date = models.DateField()
3. Many to Many Relationship(gs112)
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Song(models.Model):
user = models.ManyToManyField(User)
song_name = models.CharField(max_length=70)
song_duration = models.IntegerField()
def written_by(self):
p= ",".join([str(p) for p in self.user.all()])
# print(p)
return p
Model Relationship with queryset(gs113)
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Page(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, related_name='mypage')
page_name = models.CharField(max_length=70)
page_cat = models.CharField(max_length=70)
page_publish_date = models.DateField()
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='mypost')
post_title = models.CharField(max_length=70)
post_cat = models.CharField(max_length=70)
post_publish_date = models.DateField()
class Song(models.Model):
user = models.ManyToManyField(User)
song_name = models.CharField(max_length=70)
song_duration = models.IntegerField()
def written_by(self):
return ",".join([str(p) for p in self.user.all()])
from django.shortcuts import render
from .models import Page, Post, Song, User
def home(request):
return render(request, 'myapp/home.html')
def show_user_data(request):
data1 = User.objects.all()
data2 = User.objects.filter(email='contact@geekyshows.com')
# data3 = User.objects.filter(page__page_cat='Programming')
data3 = User.objects.filter(mypage__page_cat='Programming')
data4 = User.objects.filter(mypost__post_publish_date='2020-05-28')
data5 = User.objects.filter(song__song_duration=3)
return render(request, 'myapp/user.html', {'data1':data1, 'data2':data2, 'data3':data3, 'data4':data4, 'data5':data5})
def show_page_data(request):
data1 = Page.objects.all()
data2 = Page.objects.filter(page_cat='Programming')
data3 = Page.objects.filter(user__email='contact@geekyshows.com')
return render(request, 'myapp/page.html', {'data1':data1, 'data2':data2, 'data3':data3})
def show_post_data(request):
data1 = Post.objects.all()
data2 = Post.objects.filter(post_publish_date='2020-05-28')
data3 = Post.objects.filter(user__username='sonam')
return render(request, 'myapp/post.html', {'data1':data1, 'data2':data2, 'data3':data3})
def show_song_data(request):
data1 = Song.objects.all()
data2 = Song.objects.filter(song_duration=3)
data3 = Song.objects.filter(user__username='sonam')
return render(request, 'myapp/song.html', {'data1':data1, 'data2':data2, 'data3':data3})
Type of Views
- Function Based View
- Class Based View
- Base Class-Based Views / Base View
- Generic Class-Based Views / Generic View
- View
- TemplateView
- RedirectView
2. Generic Class-Based Views / Generic View
- Display View – ListView, DetailView
- Editing View – FormView, CreateView, UpdateView, DeleteView
ListView
Return all(multipule object) data
Example-1(gs18)
from django.db import models
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=70)
roll = models.IntegerField()
course = models.CharField(max_length=70)
from django.shortcuts import render
from django.views.generic.list import ListView
from .models import Student
# Create your views here.
class StudentListView(ListView):
model = Student
###############################################################
# stud=Student.objects.all()
# contex={'student_list':stud}
# return render(request,'school/student_list.html',context)
from django.contrib import admin
from django.urls import path
from school import views
urlpatterns = [
path('admin/', admin.site.urls),
path('student/', views.StudentListView.as_view(), name='student')
]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
{% for student in student_list %}
{{student.name}}
{{student.roll}}
{{student.course}} <br>
{% endfor %}
</body>
</html>
Example-2(gs119)
from django.shortcuts import render
from django.views.generic.list import ListView
from .models import Student
# Create your views here.
class StudentListView(ListView):
model = Student
template_name_suffix = '_get'
ordering = ['name']
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
{% for student in student_list %}
{{student.name}}
{{student.roll}}
{{student.course}} <br>
{% endfor %}
</body>
</html>
Example-3(gs120)
from django.shortcuts import render
from django.views.generic.list import ListView
from .models import Student
# Create your views here.
class StudentListView(ListView):
model = Student
template_name = 'school/student.html'
context_object_name = 'students'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
{% for student in students %}
{{student.name}}
{{student.roll}}
{{student.course}} <br>
{% endfor %}
</body>
</html>
Example-4(gs121)
from django.shortcuts import render
from django.views.generic.list import ListView
from .models import Student
# Create your views here.
class StudentListView(ListView):
model = Student
template_name = 'school/student.html'
context_object_name = 'students'
def get_queryset(self):
return Student.objects.filter(course='Django',roll=105)
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['freshers'] = Student.objects.all().order_by('name')
return context
# def get_template_names(self):
# if self.request.COOKIES['user'] == 'sonam':
# template_name = 'school/sonam.html'
# else:
# template_name = self.template_name
# return [template_name]
# def get_template_names(self):
# if self.request.user.is_superuser:
# template_name = 'school/superuser.html'
# elif self.request.user.is_staff:
# template_name = 'school/staff.html'
# else:
# template_name = self.template_name
# return [template_name]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
{% for student in students %}
{{student.name}}
{{student.roll}}
{{student.course}} <br>
{% endfor %}
<hr>
{% for fresher in freshers %}
{{fresher.name}}
{{fresher.roll}}
{{fresher.course}} <br>
{% endfor %}
</body>
</html>
DetailView(gs123, gs124, gs125)
Return singal data(object), so, we have to specify in url
from django.shortcuts import render
from .models import Student
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
# Create your views here.
class StudentDetailView(DetailView):
model = Student
template_name = 'school/student.html'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['all_student'] = self.model.objects.all().order_by('name')
return context
class StudentListView(ListView):
model = Student
from django.contrib import admin
from django.urls import path
from school import views
urlpatterns = [
path('admin/', admin.site.urls),
path('student/', views.StudentListView.as_view(), name='studentlist'),
path('student/', views.StudentDetailView.as_view(), name='studentdetail'),
]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Student_detail Page</h1>
{{student.id}}
{{student.name}}
{{student.roll}}
{{student.course}}
<hr>
{% for stu in all_student %}
<li><a href="{% url 'studentdetail' stu.id %}">{{stu.name}}</a></li>
{% endfor %}
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Student List</h1>
{% for stu in student_list %}
<li><a href="{% url 'studentdetail' stu.id %}">{{stu.name}}</a></li>
{% endfor %}
</body>
</html>









No comments:
Post a Comment