Django
Django
Django
1) Terminal Installation:
File->Settings->Install->in the searchbox just type terminal-->platform-ide-terminal
2) Python AutoCompletion:
File->Settings->Install->in the searchbox just type python-->autocomplete-python
3) django:
File->Settings->Install->in the searchbox just type djanngo-->atom-django
C:\Windows\System32\cmd.exe
DJango:
⚽ Django is a free and open-source web framework.
⚽ It is written in Python.
⚽ It follows the Model-View-Template (MVT) architectural pattern.
⚽ It is maintained by the Django Software Foundation (DSF)
⚽ https://www.shuup.com/blog/25-of-the-most-popular-python-and-django-websites/
⚽ Django was created in 2003 as an internal project at Lowrence Journal-World News Paper for
their web development.
⚽ The Original authors of Django Framework are: Adrian Holovaty, Simon Willison
⚽ After Testing this framework with heavy traffics, Developers released for the public as open
source framework on July 21st 2005.
1 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Top 5 Features of Django Framework:
Django was invented to meet fast-moving newsroom deadlines, while satisfying the tough
requirements of experienced Web developers.
1) Fast:
Django was designed to help developers take applications from concept to completion as
quickly as possible.
2) Fully loaded:
Django includes dozens of extras we can use to handle common Web development tasks.
Django takes care of user authentication, content administration, site maps, RSS feeds, and
many more tasks.
3) Security:
Django takes security seriously and helps developers avoid many common security mistakes,
such as SQL injection, cross-site scripting, cross-site request forgery and clickjacking. Its user
authentication system provides a secure way to manage user accounts and passwords.
4) Scalability:
Some of the busiest sites on the planet use Django’s ability to quickly and flexibly scale to
meet the heaviest traffic demands.
5) Versatile:
Companies, organizations and governments have used Django to build all sorts of things —
from content management systems to social networks to scientific computing platforms.
Note:
1) As Django is specially designed web application framework, the most commonly required
activities will takes care automatically by Django and Hence Developer's life will be simplified
and we can develop applications very easily.
3) https://docs.djangoproject.com/en/2.1/contents/
2 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
How to install django:
1. Make sure Python is already installed in our system
python --version
py -m django --version
A Dango Application is responsible to perform a particular task in our entire web application.
Eg: loan app
registration app
polling app etc
Diagram
3 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Project = Several Applications + Configuration Information
Note:
1) The Django applications can be plugged into other projects.ie these are reusable.
(Pluggable Django Applications)
2) Without existing Django project there is no chance of existing Django Application. Before
creating any application first we required to create project.
D:\>mkdir djangoprojects
D:\>cd djangoprojects
D:\djangoprojects>
|
+---firstProject
¦
¦---manage.py
¦
+---firstProject
¦---settings.py
¦---urls.py
¦--wsgi.py
¦-- __init__.py
__init__.py:
It is a blank python script.Because of this special file name, Django treated this folder as python
package.
Note: If any folder contains __init__.py file then only that folder is treated as Python package.But
this rule is applicable until Python 3.3 Version.
settings.py:
In this file we have to specify all our project settings and and configurations like
4 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
installed applications, middileware configurations, database configurations etc
urls.py:
Here we have to store all our url-patterns of our project.
For every view (web page), we have to define separate url-pattern. End user can use url-patterns
to access our webpages.
wsgi.py:
wsgi Web Server Gateway Interface.
We can use this file while deploying our application in production on online server.
manage.py:
The most commonly used python script is manage.py
It is a command line utility to interact with Django project in various ways like to run development
server, run tests, create migrations etc.
py manage.py runserver
You have 13 unapplied migration(s). Your project may not work properly until you apply the
migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate'
to apply them.
August 03, 2018 - 15:38:59
Django version 1.11, using settings 'firstProject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
http://127.0.0.1:8000/
5 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Congratulations on your first Django-powered page.
Next, start your first app by running python manage.py startapp [app_label].
You're seeing this message because you have DEBUG = True in your Django settings file and you
haven't configured any URLs. Get to work!
-----------------------------------------------------------
Note: Once we started Server a special database related file will be generated in our project
folder structure.
db.sqlite3
D:\djangoprojects>
└───firstProject
│ db.sqlite3
│ manage.py
│
├───firstApp
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └───migrations
│ __init__.py
6 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
│
└───firstProject
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py
│
Note: Observe that Application contains 6 files and project contains 4 files+ one special file:
manage.py
1) __init__.py:
It is a blank Python script. Because of this special name,Python treated this folder as a package.
2) admin.py:
We can register our models in this file. Django will use these models with Django's admin
interface.
3) apps.py:
In this file we have to specify application's specific configurations.
4) models.py:
In this file we have to store application's data models.
5) tests.py:
In this file we have to specify test functions to test our code.
6) views.py:
In this file we have to save functions that handles requests and return required responses.
7) migrations folder:
This directory stores database specific information related to models.
Note: The most important commonly used files in every project are views.py and models.py
In settings.py:
1) INSTALLED_APPS = [
2) 'django.contrib.admin',
3) 'django.contrib.auth',
4) 'django.contrib.contenttypes',
5) 'django.contrib.sessions',
7 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
6) 'django.contrib.messages',
7) 'django.contrib.staticfiles',
8) 'firstApp'
9) ]
views.py:
Note:
1. Each view will be specified as one function in views.py.
In the above example display is the name of function which is nothing but one view.
2. Each view should take atleast one argument (request)
3. Each view should return HttpResponse object with our required response.
Diagram
View can accept request as input and perform required operations and provide proper response to
the end user.
8 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
urls.py:
Whenever end user sending the request with urlpattern: greeting then disply() function will be
executed and provide required response.
py manage.py runserver
http://127.0.0.1:8000/greetings
Diagram
1. Whenever end user sending the request first Django development server will get that request.
2. From the Request django will identify urlpattern and by using urls.py, the corresponding view
will be identified.
3. The request will be forwared to the view. The corresponding function will be executed and
provide required response to the end user.
9 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
2) Creation of Application in that project
py manage.py startapp firstApp
6) Start Server
py manage.py runserver
http://127.0.0.1:7777/greetings/
http://127.0.0.1:8000/time/
We can solve this problem by defining url-patterns at application level instead of project level. For
every application we have to create a separate urls.py file and we have to define all that
application specific urls in that file. We have to link this application level urls.py file to project
level urls.py file by using include() method.
Demo Application:
1. Creation of Project
django-admin startproject urlProject
10 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
2. Creation of Application
py manage.py startapp urlApp
INSTALLED_APPS=[
.........
'urlApp'
]
6. Include this application level urls.py inside project level urls.py file.
from django.conf.urls. import include
urlpatterns=[
....
url(r'^urlApp/',include('urlApp.urls'),
]
6. Run Server
py manage.py runserver
7. Send Request
http://127.0.0.1:8000/urlApp/test
Advantages:
The main advantages of defining urlpatterns at application level instead of project level are
11 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Django Templates:
It is not recommended to write html code inside python script (views.py file) because:
2. No seperation of roles. Python developer has to concentrate on both python code and html
code.
We can overcome these problems by seperating html code into a seperate html file.This html file
is nothing but template.
From the Python file (views.py file) we can use these templates based on our requirement.
We have to write templates at project level only once and we can use these in multiple
applications.
Output: D:\durgaclasses\test.py
4. Inside D:\durgaclasses there is one folder named with templates. To know its absolute path
import os
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
TEMPLATE_DIR=os.path.join(BASE_DIR,'templates')
print(TEMPLATE_DIR)
Output: D:\durgaclasses\templates
Note: The main advantage of this approach is we are not required to hard code system specific
paths(locations) in our python script.
2. Creation of Application
py manage.py startapp testApp
3. Add this application to the project in settings.py file,so that Django aware of application
5. Add templates folder to settings.py file so that Django can aware of our templates.
TEMPLATES = [
{
...,
'DIRS': ['D:\djangoprojects\templateProject\templates'],
},]
It is not recommended to hard code system specific locations in settings.py file. To overcome this
problem, we can generate templates directory path programatically as follows.
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIR=os.path.join(BASE_DIR,'templates')
TEMPLATES = [
{
...,
'DIRS': [TEMPLATE_DIR,],
},]
6. Create html file inside templateProject/templates/testApp folder. This html file is nothing but
template.
wish.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title>First Template Page</title>
6) </head>
13 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
7) <body>
8) <h1>Hello welcome to Second Hero of MVT: Templates</h1>
9) </body>
10) </html>
Template Tags:
From Python views.py we can inject dynamic content to the template file by using template tags.
Take special care about Template tag syntax it is not python syntax and not html syntax. Just it is
special syntax.
This template tag we have to place inside template file (ie html file) and we have to provide
insert_date value from python views.py file.
Diagram
Demo Application to send date and time from views.py to template file:
wish.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title>First Template Page</title>
14 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
6) <style >
7) h1{
8) color:white;
9) background: red;
10) }
11) </style>
12) </head>
13) <body>
14) <h1>Hello Server Current Date and Time : <br>
15) {{insert_date}}
16) </h1>
17) </body>
18) </html>
views.py:
Note: The values to the template variables should be passed from the view in the form of
dictionary as argument to context.
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title>First Template Page</title>
6) <style >
7) #h11{
8) color:red;
9) }
10) #h12{
11) color:green;
12) }
13) </style>
14) </head>
15) <body>
16) <h1 id=h11>{{insert_msg}}</h1>
17) <h1 id=h12>Current Date and Time : {{insert_date}}</h1>
18) </body>
15 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
19) </html>
views.py:
But sometimes our requirement is to insert static files like images,css files etc inside template file.
2. Add static directory path to settings.py file, so that Django can aware of our images.
settings.py:
1) STATIC_DIR=os.path.join(BASE_DIR,'static')
2)
3) ..
4) STATIC_URL = '/static/'
5)
6) STATICFILES_DIRS=[
7) STATIC_DIR,
8) ]
16 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
3. Make sure all paths are correct or not
http://127.0.0.1:8000/static/images/divine3.jpg
{% load staticfiles %}
wish.html:
1) <!DOCTYPE html>
2) {% load staticfiles %}
3) <html lang="en" dir="ltr">
4) <head>
5) <meta charset="utf-8">
6) <title>First Template Page</title>
7) <style >
8) #h11{
9) color:red;
10) }
11) #h12{
12) color:green;
13) }
14) </style>
15) </head>
16) <body>
17) <h1 id=h11>{{insert_msg}}</h1>
18) <h1 id=h12>Current Date and Time : {{insert_date}}</h1>
19) <h1>This climate preferable image is:</h1>
20) <img src="{% static "images/divine3.jpg" %}" alt="">
21) </body>
22) </html>
views.py:
17 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
8) h=int(date.strftime('%H'))
9) if h<12:
10) msg='Hello Guest !!!! Very Very Good Morning!!!'
11) elif h<16:
12) msg='Hello Guest !!!! Very Very Good AfterNoon!!!'
13) elif h<21:
14) msg='Hello Guest !!!! Very Very Good Evening!!!'
15) else:
16) msg='Hello Guest !!!! Very Very Good Night!!!'
17) my_dict={'insert_date':date,'insert_msg':msg}
18) return render(request,'testApp/wish.html',context=my_dict)
demo.css:
1) img{
2) height: 500px;
3) width: 500px;
4) border: 10px red groove;
5) margin:0% 20%;
6) }
7) h1{
8) color:blue;
9) text-align: center;
10) }
2. In the template html file we have to include this css file. We have to do this by using link tag
inside head tag.
18 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
1) <!DOCTYPE html>
2) {% load staticfiles%}
3) <html lang="en" dir="ltr">
4) <head>
5) <meta charset="utf-8">
6) <title></title>
7) <link rel="stylesheet" href="{% static "css/demo.css"%}">
8) </head>
9) <body>
10) <h1>Welcome to DURGASOFT NEWS PORTAL</h1>
11) <ul>
12) <li> <a href="/movies">Movies Information</a> </li>
13) <li> <a href="/sports">Sports Information</a> </li>
14) <li> <a href="/politics">Politics Information</a> </li>
15) </ul>
16) </body>
17) </html>
news.html:
1) <!DOCTYPE html>
2) {% load staticfiles %}
3) <html lang="en" dir="ltr">
4) <head>
5) <meta charset="utf-8">
6) <title></title>
7) <link rel="stylesheet" href="{% static "css/demo.css"%}">
8) </head>
9) <body>
10) <h1>{{head_msg}}</h1>
11) <ul>
12) <li> <h2>{{sub_msg1}}</h2> </li>
13) <li> <h2>{{sub_msg2}}</h2> </li>
14) <li> <h2>{{sub_msg3}}</h2> </li>
15) </ul>
16) <img src="{% static "images/sunny.jpg" %}" alt="">
17) <img src="{% static "images/guido.jpg" %}" alt="">
18) <img src="{% static "images/divine3.jpg" %}" alt="">
19) </body>
20) </html>
views.py:
settings.py:
1) import os
2)
3) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
4) TEMPLATES_DIR=os.path.join(BASE_DIR,'templates')
5) STATIC_DIR=os.path.join(BASE_DIR,'static')
6)
7) INSTALLED_APPS = [
8) 'django.contrib.admin',
9) 'django.contrib.auth',
10) 'django.contrib.contenttypes',
11) 'django.contrib.sessions',
12) 'django.contrib.messages',
13) 'django.contrib.staticfiles',
14) 'newsApp'
15) ]
16)
17) TEMPLATES = [
18) {
19) '
20) 'DIRS': [TEMPLATES_DIR,],
21)
22) ],
23) },
20 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
24) },
25) ]
26)
27) STATIC_URL = '/static/'
28) STATICFILES_DIRS=[
29) STATIC_DIR,
30) ]
urls.py:
Django provides a big in-built support for database operations. Django provides one inbuilt
database sqlite3.
For small to medium applications this database is more enough. Django can provide support for
other databases also like oracle, mysql,postgresql etc
21 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Database configuration:
Django by default provides sqlite3 database. If we want to use this database,we are not required
to do any configurations.
settings.py:
1) DATABASES = {
2) 'default': {
3) 'ENGINE': 'django.db.backends.sqlite3',
4) 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
5) }
6) }
If we don't want sqlite3 database then we have to configure our own database with the following
parameters.
If we are not getting any error means our database configurations are proper.
settings.py:
1) DATABASES = {
2) 'default': {
3) 'ENGINE': 'django.db.backends.mysql',
4) 'NAME': 'employeedb',
5) 'USER':'root',
6) 'PASSWORD':'root'
7) }
8) }
Checking configurations:
D:\djangoprojects\modelProject>py manage.py shell
> from django.db import connection
> c=connection.cursor()
Note: We can find oracle database name by using the following command.
Model Class:
⚽ A Model is a Python class which contains database information.
⚽ A Model is a single, definitive source of information about our data. It contains fields and
behavior of the data what we are storing.
⚽ Each model maps to one database table.
⚽ Every model is a Python class which is the child class of (django.db.models.Model)
⚽ Each attribute of the model represents a database field.
⚽ We have to write all model classes inside ‘models.py’ file.
23 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
1. Create a project and application and link them.
After creating a project and application, in the models.py file, write the following code:
models.py:
Note: This model class will be converted into Database table. Django is responsible for this.
table_name: appName_Employee
fields: eno, ename, esal and eaddr. And one extra field: id
behaviors: eno is of type Integer, ename is of type Char and max_length is 30 characters.
Hence,
24 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
python manage.py sqlmigrate testApp 0001
1) BEGIN;
2) --
3) -- Create model Employee
4) --
5) CREATE TABLE "testApp_employee" ("id" integer NOT NULL PRIMARY KEY AUTOINCREME
NT, "eno" integer NOT NULL, "ename" varchar(30) NOT NULL, "esal" real NOT NULL, "eadd
r" varchar(30) NOT NULL);
6) COMMIT;
“id” field:
1. For every table(model), Django will generate a special column named with “id”.
2. ID is a Primary Key. (Unique Identifier for every row inside table is considered as a primary key).
3. This field(id) is auto increment field and hence while inserting data, we are not required to
provide data for this field.
4. This id field is of type “AutoField”
5. We can override the behavior of “id” field and we can make our own field as “id”.
6. Every Field is by default “NOT NULL”.
How to execute generated SQL code (migrate command):
After generating sql code, we have to execute that sql code to create table in database. For this,
we have to use ‘migrate’ command.
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, testApp
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
Applying testApp.0001_initial... OK
25 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
What is the advantage of creating tables with ‘migrate’ Command
If we use ‘migrate’ command, then all Django required tables will be created in addition to our
application specific tables. If we create table manually with sql code, then only our application
specific table will be created and django my not work properly. Hence it is highly recommended to
create tables with ‘migrate’ command.
admin.py:
We can login to admin interface → Start the server and login to admin interface using the created
credentials.
26 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
4)
5) class Employee(models.Model):
6) eno=models.IntegerField()
7) ename=models.CharField(max_length=30)
8) esal=models.FloatField()
9) eaddr=models.CharField(max_length=30)
10)
11) def __str__(self):
12) return 'Employee Object with eno: +str(self.no)'
admin.py:
Now we can write views to get data from the database and send to template.
Before writing views.py file, create “templates” and “static” folder with respective application
folders and HTML and CSS files and link them in settings.py file.
Views.py:
emp.html
1) <!DOCTYPE html>
2) {% load staticfiles %}
3) <html lang="en" dir="ltr">
4) <head>
5) <meta charset="utf-8">
6) <title></title>
7) <link rel="stylesheet" href="{% static '/css/demo.css'%}">
8) </head>
9)
10) <body>
27 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
11) <h1> The employees list is : </h1>
12)
13) {% if emp_list %}
14) <table>
15) <thead>
16) <th> eno </th>
17) <th> ename </th>
18) <th> esal </th>
19) <th> eaddr </th>
20) </thead>
21)
22) {% for emp in emp_list %}
23) <tr>
24) <td> {{emp.eno}}</td>
25) <td>{{emp.ename}}</td>
26) <td>{{emp.esal}}</td>
27) <td> {{emp.eaddr}}</td>
28) </tr>
29) {% endfor %}
30)
31) </table>
32) {%else%}
33) <p> No records found </p>
34) {% endif %}
35)
36) </body>
37) </html>
MVT Diagram:
FAQs:
How to configure database inside settings.py?
How to check connections?
How to define Model class inside models.py
How we can perform makemigrations?
How we can perform migrate?
How to add our model to admin interface inside admin.py
To display total data how to write ModelAdmin class inside admin.py
how to createsuperuser?
How to login to admin interface and add data to our tables?
How to see generated sqlcode b'z of makemigrations
28 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Faker Module:
We can use Faker Module to generate fake data for our database models.
Django Forms:
It is the very important concept in web development.
The main purpose of forms is to take user input.
From the forms we can read end user provided input data and we can use that data based on
requirement. We may store in the database for future purpose. We may use just for
validation/authentication purpose etc
Here we have to use Django specific forms but not HTML forms.
29 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Process to generate Django forms:
Step-1: Creation of forms.py file in our application folder with our required fields.
forms.py:
Note: name and marks are the field names which will be available in html form
views.py file is responsible to send this form to the template html file
views.py:
1) def studentinputview(request):
2) form=forms.StudentForm()
3) return render(request,'testapp/input.html',{'form':form})
Note: context parameter is optional.We can pass context parameter value directly without using
keyword name 'context'
{{form}}
It will add only form fields. But there is no <form> tag and no submit button.
Even the fields are not arranged properly.It is ugly form.
30 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
1) <h1>Registration Form</h1>
2) <div class="container" align="center">
3) <form method="post">
4) {{form.as_p}}
5) <input type="submit" class="btn btn-primary" name="" value="Submit">
6) </form>
7)
8) </div>
input.html:
1) <!DOCTYPE html>
2) {%load staticfiles%}
3) <html lang="en" dir="ltr">
4) <head>
5) <meta charset="utf-8">
6) <link rel="stylesheet" href="{%static "css/bootstrap.css"%}">
7) <link rel="stylesheet" href="{%static "css/demo2.css"%}">
8) <title></title>
9) </head>
10) <body>
11) <h1>Registration Form</h1>
12) <div class="container" align="center">
13) <form method="post">
14) {{form.as_p}}
15) <input type="submit" class="btn btn-primary" name="" value="Submit">
16) </form>
17) </div>
18) </body>
19) </html>
Help
Reason given for failure:
Every form should satisfy CSRF (Cross Site Request Forgery) Verification, otherwise Django won't
accept our form.
It is meant for website security. Being a programmer we are not required to worry anything about
this. Django will takes care everything.
But we have to add csrf_token in our form.
1) <h1>Registration Form</h1>
2) <div class="container" align="center">
3) <form method="post">
31 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
4) {{form.as_p}}
5) {% csrf_token %}
6) <input type="submit" class="btn btn-primary" name="" value="Submit">
7) </form>
8) </div>
If we add csrf_token then in the generate form the following hidded field will be added,which
makes our post request secure
The value of this hidden field is keep on changing from request to request.Hence it is impossible to
forgery of our request.
If we configured csrf_token in html form then only django will accept our form.
How to process input data from the form inside views.py file:
We required to modify views.py file. The end user provided input is available in a dictionary
named with 'cleaned_data'
views.py:
32 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
project: formproject
views.py:
feedback.html:
1) <!DOCTYPE html>
2) {% load staticfiles%}
3) <html lang="en" dir="ltr">
4) <head>
5) <meta charset="utf-8">
6) <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bo
otstrap.min.css" integrity="sha384-
BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossori
gin="anonymous">
7) <link rel="stylesheet" href="{% static "css/demo4.css" %}">
8) <title></title>
9) </head>
10) <body>
11) <div class="container" align='center'>
12) <h1>Student Feedback Form</h1><hr>
33 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
13) <form class="" action="index.html" method="post">
14) {{form.as_p}}
15) {% csrf_token %}
16) <input type="submit" class="btn btn-primary" value="Submit Feedback">
17) </form>
18) </div>
19) </body>
20) </html>
Form Validations:
Once we submit the form we have to perform validations like
1. Length of the field should not be empty
2. The max number of characters should be 10
3. The first character of the name should be 'd' etc
clean_fieldname(self)
In the FormClass for any field if we define clean method then at the time of submit the form,
Django will call this method automatically to perform validations. If the clean method won't raise
any error then only form will be submitted.
34 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
12) raise forms.ValidationError('The Minimum no of characters in the name field should
be 4')
13) return inputname
The returned value of clean method will be considered by Django at the time of submitting the
form.
forms.py:
server console:
validating name
Validating rollno field
Validating email field
Validating feedback field
Form Validation Success and printing information
Name: Durgadurga
Roll No: 101
Email: durgaadvjava@gmail.com
FeedBack: This is sample feedback
35 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Note:
1 .Django will call these filed level clean methods automatically and we are not required to call
explicitly.
To validate Max number of characters in the feedback as 40,we have to use inbuilt validators as
follows.
forms.py:
Note: We can use any number of validators for the same field
feedback=forms.CharField(widget=forms.Textarea,validators=[validators.MaxLengthValidator(40),
validators.MinLengthValidator(10)])
Note: Usage of built in validators is very easy when compared with clean methods.
The value of name parameter should starts with 'd' or 'D'. We can implement this validation as
follows
1) def starts_with_d(value):
2) if value[0].lower() != 'd':
3) raise forms.ValidationError('Name should be starts with d | D')
4)
5) class FeedBackForm(forms.Form):
36 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
6) name=forms.CharField(validators=[starts_with_d])
7) rollno=forms.IntegerField()
forms.py:
How to check original pwd and reentered pwd are same or not:
forms.py:
37 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
16) spwd=total_cleaned_data['rpassword']
17) if fpwd != spwd:
18) raise forms.ValidationError('Both passwords must be matched')
1. To create unnecessary heavy traffic to the website, which may crash our application
Being web developer compulsory we have to think about BOT requests and we have to prevent
these requests.
But BOT will send the value for this hidden field also.If hidden field got some value means it is the
request from BOT and prevent that form submission.
38 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
16) fpwd=total_cleaned_data['password']
17) spwd=total_cleaned_data['rpassword']
18) if fpwd != spwd:
19) raise forms.ValidationError('Both passwords must be matched')
20) bot_handler_value=total_cleaned_data['bot_handler']
21) if len(bot_handler_value)>0:
22) raise forms.ValidationError('Request from BOT...cannot be submitted!!!')
The main advantage of model forms is we can grab end user input and we can save that input data
very easily to the database.
Django provides inbuilt support to develop model based forms very easily.
class RegisterForm(forms.ModelForm):
....
39 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
2. We have to write one nested class (Meta class) to specify Model information and required
fields.
class RegisterForm(forms.ModelForm):
# field declarations if we are performing any custom validations.If we are not defining any
custom validations then here we are not required to specify any field.
class Meta:
# we have to specify Model class name and requied fields
model=Student
fields='__all__'
Case-1: Instead of all fields if we want only selected fields,then we have to specify as follows
class Meta:
model=Student
fileds=('field1','field2','field3')
Case-2:
Instead of all fields if we want to exclude certain fields,then we have to specify as follows
class Meta:
model=Student
exclude=['field1','field2']
In the form all fields will be considered except field1 and field2.
If the Model class contains huge number of fields and if we want to exclude very few fields then
we have to use this approach.
40 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
How to save user's input data to database in Model based
forms:
We have to use save() method.
def student_view(request):
...
if request.method=='POST':
form=RegisterForm(request.POST)
if form.is_valid():
form.save(commit=True)
..
forms.py:
views.py:
1. Template Inheritance:
If multiple template files have some common code,it is not recommended to write that common
code in every template html file. It increases length of the code and reduces readability. It also
increases development time.
We have to seperate that common code into a new template file,which is also known as base
template. The remaining template files should required to extend base template so that the
common code will be inherited automatically.
Inheriting common code from base template to remaining templates is nothing but template
inheritance.
1) <!DOCTYPE html>
2) html,css,bootstrap links
3) <body>
4) common code required for every child tempalte
5) {% block child_block%}
6) Anything outside of this block available to child tag.
7) in child template the specific code should be in this block
8) {%endblock%}
9) </body>
10) </html>
child.html:
1) <!DOCTYPE html>
2) {%extends 'testapp/base.html'%}
3) {% block child_block %}
4) child specific extra code
5) {%endblock%}
42 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Demo program: advtempproject
base.html:
1) <!DOCTYPE html>
2) {%load staticfiles%}
3) <html lang="en" dir="ltr">
4) <head>
5) <meta charset="utf-8">
6) <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bo
otstrap.min.css" integrity="sha384-
BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossori
gin="anonymous">
7) <link rel="stylesheet" href="{%static "css/advtemp.css"%}">
8) <title></title>
9) </head>
10) <body>
11) <nav class="navbar navbar-default navbar-fixed-top navbar-inverse">
12) <div class="container-fluid">
13)
14) <div class="navbar-header">
15) <a class="navbar-brand" href="/">DURGA NEWS</a>
16) </div>
17) <ul class="nav navbar-nav">
18) <li class="active"><a href="/">Home <span class="sr-
only">(current)</span></a></li>
19) <li><a href="/movies">Movies</a></li>
20) <li><a href="/sports">Sports</a></li>
21) <li><a href="/politics">Politics</a></li>
22) </ul>
23) </div><!-- /.container-fluid -->
24) </nav>
25) <div class="container">
26) {%block body_block%}
27) <!-- outside of this block everything available to child tempaltes -->
28) {%endblock%}
29) </div>
30) </body>
31) </html>
index.html:
1) <!DOCTYPE html>
2) {%extends 'testapp/base.html'%}
3) {% block body_block %}
4) <br><br><br><br><br><br>
5) <h1>Welcome to DURGA NEWS PORTAL</h1>
6) {%endblock%}
43 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
sports.html:
1) <!DOCTYPE html>
2) {%extends 'testapp/base.html'%}
3) {% block body_block %}
4) <br><br><br>
5) <h1>Sports Information</h1>
6) {%endblock%}
4. It provides unique and same look and feel for total web application.
Note: Based on our requirement we can extend any number of base templates.i.e Multiple
Inheritance is applicable for templates.
Tempalte Filters:
In the template file, the injected data can be displayed by using template tags.
{{emp.eno}}
Before displaying to the end user if we want to perform some modification to the injected text,
like cut some information or converting to title case etc,then we should go for Template filters.
Filter may take or may not take arguments.i.e arguments are optional.
Eg:
<li>{{msg1|lower}}</li>
msg1 will be displayed in lower case
<li>{{msg3|add:"Durga"}}</li>
"Durga" will be added to msg3 and then display the result to the end user
{{ msg|title }}
44 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
{{ my_date|date:"Y-m-d" }}
https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#ref-templates-builtins-filters
Steps:
2. Create a special file named with __init__.py inside templatetags folder, so that Django will
consider this folder as a valid python package
3. Create a python file inside templatetags folder to define our own filters
cust_filters.py:
f8upper is the name of the filter which can be used inside template file.
45 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
4. Inside template file we have to load the filter file as follows(In the child template bunot in base
template)
{%load cust_filters%}
{{msg|f8upper}}
movies.html:
1) <!DOCTYPE html>
2) {%extends 'testapp/base.html'%}
3) {% block body_block %}
4) <h1>Movies Information</h1><hr>
5) {%load cust_filters%}
6) <ul>
7) <li>{{msg1|lower}}</li>
8) <li>{{msg2|upper}}</li>
9) <li>{{msg3|add:"--Durga"}}</li>
10) <li>{{msg4|f8upper}}</li>
11) <li>{{msg5}}</li>
12) </ul>
13) {%endblock%}
Note: The main advantage of template filters is we can display the same data in different styles
based on our requirement.
advtemp project
Session Management:
46 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Client and Server can communicate with some common language which is nothing but HTTP.
The basic limitation of HTTP is, it is stateless protocol. i.e it is unable to remember client
information for future purpose across multiple requests. Every request to the server is treated as
new request.
Hence some mechanism must be required at server side to remember client information across
multiple requests.This mechanism is nothing but session management mechanism.
1. Cookies
2. Session API
3. URL Rewriting
4. Hidden Form
Fields etc
Diagram
Whenever client sends a request to the server,if server wants to remember client information for
the future purpose then server will create cookie object with the required information. Server will
send that Cookie object to the client as the part of response. Client will save that cookie in its local
machine and send to the server with every consecutive request. By accessing cookies from the
request server can remember client information.
47 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
How to test our browser supports Cookies or not:
We have to use the following 3 methods on the request object.
1. set_test_cookie()
2. test_cookie_worked()
3. delete_test_cookie()
views.py:
count.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
48 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
4) <meta charset="utf-8">
5) <title></title>
6) <style >
7) span{
8) font-size: 200px;
9) font-weight: 900;
10) }
11)
12) </style>
13) </head>
14) <body>
15) <h1>Page Count is: <span> {{count}}<span></h1>
16) </body>
17) </html>
home.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) </head>
7) <body>
49 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
8) <h1>Welcome to DURGASOFT</h1>
9) <form action="/second">
10) {{form.as_p}}
11) {%csrf_token%}
12) <input type="submit" name="" value="Enter Name">
13) </form>
14) </body>
15) </html>
datetime.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) </head>
7) <body>
8) <h1>Hello {{name}}</h1> <hr>
9) <a href="/result">Click Here to get Date and Time</a>
10) </body>
11) </html>
result.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) </head>
7) <body>
8) <h1>Hello {{name}}</h1><hr>
9) <h1>Current Date and Time:{{date_time}}</h1>
10) <a href="/result">Click Here to get Updated Date and Time</a>
11) </body>
12) </html>
Cookie Example-4:
Diagram
50 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
views.py:
name.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) </head>
7) <body>
8) <h1>Welcome to DURGASOFT</h1>
9) <form action='/age'>
10) Enter Name: <input type="text" name="name" value=""><br><br>
11) <input type="submit" name="" value="Submit Name">
12) </form>
13)
14) </body>
15) </html>
age.html:
51 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) </head>
7) <body>
8) <h1>Hello {{name}}..</h1><hr>
9) <form action='/gf'>
10) Enter Age: <input type="text" name="age" value=""><br><br>
11) <input type="submit" name="" value="Submit Age">
12) </form>
13) </body>
14) </html>
gf.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) </head>
7) <body>
8) <h1>Hello {{name}}..</h1><hr>
9)
10) <form action='/results'>
11) Enter Girl Friend Name: <input type="text" name="gfname" value=""><br><br>
12) <input type="submit" name="" value="Submit GFName">
13) </form>
14)
15) </body>
16) </html>
results.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) </head>
7) <body>
8) <h1>Hello {{name}} Thanks for providing info</h1>
9) <h2>Please cross check your data and confirm</h2><hr>
10) <ul>
11) <li>Name:{{name}}</li>
12) <li>Age:{{age}}</li>
13) <li>Girl Friend Name:{{gfname}}</li>
52 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
14) </ul>
15) </body>
16) </html>
Limitations of Cookies:
1. By using cookies we can store very less amount of information. The size of the cookie is
fixed.Hence if we want to store huge amount of information then cookie is not best choice.
2. Cookie can hold only string information. If we want to store non-string objects then we should
not use cookies.
4. Everytime with every request, browser will send all cookies related to that application,which
creates network traffic problems.
If we are setting max_age for the cookie,then cookies will be stored in local file system
permanently.Once the specified max_age expires then only cookies will be expired.Such type of
cookies are called permanent or persistent cookies. We can set Permanent Cookies as follows
response.set_cookie(name,value,max_age=180)
response.set_cookie(name,value,180)
Demo Program-3:
views.py:
53 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
4) # Create your views here.
5) def index(request):
6) return render(request,'testapp/home.html')
7) def additem(request):
8) form=ItemAddForm()
9) response=render(request,'testapp/additem.html',{'form':form})
10) if request.method=='POST':
11) form=ItemAddForm(request.POST)
12) if form.is_valid():
13) name=form.cleaned_data['itemname']
14) quantity=form.cleaned_data['quantity']
15) response.set_cookie(name,quantity,180)
16) # return index(request)
17) return response
18) def displayitem_view(request):
19) return render(request,'testapp/showitems.html')
home.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <!-- Latest compiled and minified CSS -->
6) <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/boots
trap.min.css" integrity="sha384-
BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossori
gin="anonymous">
7) <title></title>
8) </head>
9) <body>
10) <div class="container" align='center'>
11) <div class="jumbotron">
12) <h1>DURGASOFT ONLINE SHOPPING APP</h1>
13) <a class="btn btn-primary btn-lg" href="/add" role="button">ADD ITEM</a>
14) <a class="btn btn-primary btn-lg" href="/display" role="button">Display ITEMS</a>
15) </div>
16)
17) </div>
18) </body>
19) </html>
additem.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
54 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
6) <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bo
otstrap.min.css" integrity="sha384-
BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossori
gin="anonymous">
7) </head>
8) <body>
9) <div class="container" align='center'>
10) <h1>Add Item Form</h1>
11) <form method="post">
12) {{form.as_p}}
13) {%csrf_token%}
14) <input type="submit" name="" value="Add Item">
15) </form><br><br><br>
16) <a class="btn btn-primary btn-lg" href="/display" role="button">Display ITEMS</a>
17) </div>
18) </body>
19) </html>
showitems.html:
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) </head>
7) <body>
8) <h1>Total Cookies Information:</h1>
9) {%if request.COOKIES %}
10) <table border=2>
11) <thead>
12) <th>Cookie Name</th>
13) <th>Cookie Value</th>
14) </thead>
15)
16) {% for key,value in request.COOKIES.items %}
17) <tr>
18) <td>{{key}}</td>
19) <td>{{value}}</td>
20) </tr>
21) {% endfor %}
22) </table>
23) {%else%}
24) <p>Cookie Information is not available</p>
25) {%endif%}
26) </body>
27) </html>
55 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
Session Management By using Session API:
(Django Session Framework)
Diagram
Once client sends request to the server,if server wants to remember client information for the
future purpose then server will create session object and store required information in that
object. For every session object a unique identifier available which is nothing but sessionid. Server
sends the corresponding session id to the client as the part of response. Client retrieves the
session id from the response and save in the local file system. With every consecutive request
client will that session id. By accessing that session id and corresponding session object server can
remember client. This mechanism is nothing but session management by using session api.
1. Inside a File
2. Inside a database
3. Inside Cache
The most straight forward approach is to use django.contrib.sessions application to store session
information in a Django Model/database.
Note: To use this approach compulsory the following applicaiton should be configured inside
INSTALLED_APPS list of settings.py file.
django.contrib.sessions
Note:
INSTALLED_APPS = [
....
'django.contrib.sessions',
56 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
...
]
MIDDLEWARE = [
..
'django.contrib.sessions.middleware.SessionMiddleware',
....
]
2. value=request.session['key']
To get data from the session
3. request.session.set_expiry(seconds)
Sets the expiry time for the session
4. request.session.get_expiry_age()
returns the expiry age in seconds(the number of seconds until this session expire)
5. request.session.get_expiry_date()
Returns the data on which this session will expire
Note: Before using session object in our application,compulsory we have to migrate. otherwise
we will get the following error.
no such table: django_session
Session Demo1:
views.py:
pagecount.html:
57 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
1) <!DOCTYPE html>
2) <html lang="en" dir="ltr">
3) <head>
4) <meta charset="utf-8">
5) <title></title>
6) <style >
7) span{
8) font-size: 300px;
9) }
10)
11) </style>
12) </head>
13) <body>
14) <h1>The Page Count:<span>{{count}}</span></h1>
15) </body>
16) </html>
58 DURGASOFT, # 202, 2nd Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com