2. A blog web application
• We need to have an interface to
• post, delete and modify articles
• moderate comments
• manage authorized writers and viewers
➡ We need an administration interface
3. Why having an administration interface
• Inspecting data
see what the database contains
• Managing acquired data
insert, modify and delete database records
• Managing users
define who can access your application
✓ All of these should be accessible for non technical users
4. How to build such an administrator interface?
➡ We could build the administrator interface from scratch
๏ It's painfully, boring and repetitive to build it
✓ With Django “batteries are included”
5. Django provides
✓ An optional, pluggable and customizable admin interface ...
... and it looks really good!
7. Step 1 - Modify the project settings
... setting.py
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'WebDirectory',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
...
14. Step 1 - Create the admin.py file in WebDirectory
WebDirectory/
__init__.py
models.py
test.py
views.py
urls.py
admin.py
templates/
static/
15. Step 2 - Modify admin.py
WebDirectory/admin.py
from WebDirectory.models import Entry
from django.contrib import admin
admin.site.register(Entry)
16. Step 2 - Modify admin.py
WebDirectory/admin.py
from WebDirectory.models import Entry
from django.contrib import admin
admin.site.register(Entry)
makes the Entry data model available
on the admin interface
26. The superuser administrator has all powers
• Create, modify and delete users
• Insert, modify, delete records from every application
27. How to be more restrictive?
✓ We want to create an administrator for the WebDirectory
application only
• A dedicated user admin named John Doe - login: jdoe
• With the administrative privileges to create, modify and
delete records in WebDirectory only
38. How to customize the admin interface?
✓ By editing the admin.py
• The class ModelAdmin is the representation of the models
in the admin interface
• Changing the admin options
1. create a new model admin object
class EntryAdmin(admin.ModelAdmin):
...
2. register this new admin object
admin.site.register()
39. Task 1 - Customizing the interface for editing a record
Default
40. Task 1 - Customizing the interface for editing a record
Default
Finally
fields grouped
in fieldsets
41. Task 1.1 - Modify the field order when editing a record
Default
42. Task 1.1 - Modify the field order when editing a record
Default
After
fields reordered
43. Task 1.1 - Editing admin.py
WebDirectory/admin.py
from WebDirectory.models import Entry
from django.contrib import admin
Class EntryAdmin(admin.ModelAdmin):
fields = ['name', 'image', 'mimeType', 'webpage']
admin.site.register(Entry,EntryAdmin)
58. More customization
• We should be able to change the entire page layout
✓ Redefine HTML and CSS of the admin pages
➡ Redefine (extends) the predefined admin templates
59. Step 1 - Create an admin directory in the project
tsansweb/
__init__.py
manage.py
settings.py
urls.py
WebDirectory/
admin/
templates/
admin/
60. Step 2 - Copy the admin templates
• Find your Django installation path
$ python
>> import django my django_path
>> django.__file__
'/Library/Python/2.7/site-packages/django/__init__.pyc'
• Copy the templates index.html and base_site.html
from django_path/contrib/admin/templates/admin/
to project_path/tsansweb/admin/templates/
61. For example, change the title of the admin portal
admin/templates/admin/base_site.html
{% extends "admin/base.html" %}
{% load i18n %} title in the header
{% block title %}{{ title }}
| {% trans 'My Custom Admin Portal' %}{% endblock %}
{% block branding %}
<h1 id="site-name">{% trans 'My Custom Admin Portal' %}</h1>
{% endblock %}
{% block nav-global %}{% endblock %} title in the body