SlideShare a Scribd company logo
Administration

  Rashi Dhing
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
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
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”
Django provides




✓   An optional, pluggable and customizable admin interface ...




                                        ... and it looks really good!
Activate the admin interface
  for your Django project
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',
 )
 ...
Step 2 - Re-synchronize the database


$ python manage.py syncdb
Step 3 - Modify the project URL Dispatcher



                                                               urls.py
from django.conf.urls.defaults import patterns, include, url


urlpatterns = patterns('',
    (r'^webdirectory/', include('WebDirectory.urls')))


from django.contrib import admin
admin.autodiscover()
urlpatterns += patterns('',(r'^admin/', include(admin.site.urls)))
The admin interface is ready!
The admin interface is ready!

                                URL of the admin site
The admin interface is ready!

                                 URL of the admin site




                                So far, you can login as the
                                superuser created during
                                the first database sync
Activate the admin interface
 for the WebDirectory app
Step 1 - Create the admin.py file in WebDirectory


             WebDirectory/
                 __init__.py
                 models.py
                 test.py
                 views.py
                 urls.py
                 admin.py
                 templates/
                 static/
Step 2 - Modify admin.py

                                                 WebDirectory/admin.py
 from WebDirectory.models import Entry
 from django.contrib import admin
   
   
   
   
   
   


 admin.site.register(Entry)
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
Admin
WebDirectory data models
From WebDirectory admin you can
From WebDirectory admin you can




             get the list of records
From WebDirectory admin you can


                                       add records


             get the list of records
From WebDirectory admin you can


                                       add records


             get the list of records
From WebDirectory admin you can


                                             add records


                   get the list of records




  modify records
From WebDirectory admin you can


                                                add records


                      get the list of records




     modify records




delete records
Creating a dedicated administrator
        for WebDirectory
The superuser administrator has all powers




•   Create, modify and delete users

•   Insert, modify, delete records from every application
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
Create the John Doe admin user
Admin
login and password
login and password


user’s information
login and password


                      user’s information



staff = admin power
login and password


                          user’s information



staff = admin power




                      give all administrative
                      permissions for WebDirectory
What the administrator can do
What the administrator can do



       After logging in as jdoe ...
What the administrator can do



       After logging in as jdoe ...




                    ... John Doe can administrate WebDirectory only
Customize the admin interface
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()
Task 1 - Customizing the interface for editing a record




Default
Task 1 - Customizing the interface for editing a record




Default
                                                Finally


 fields grouped
 in fieldsets
Task 1.1 - Modify the field order when editing a record




Default
Task 1.1 - Modify the field order when editing a record




Default
                                              After


  fields reordered
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)
Task 1.2 - Splitting fields into field sets




Now
Task 1.2 - Splitting fields into field sets




Now
                                            Finally


    fields grouped
    in fieldsets
Task 1.2 - Editing admin.py


                                                   WebDirectory/admin.py
 from WebDirectory.models import Entry
 from django.contrib import admin
     
   
   
   
   
   


 Class 
       Class EntryAdmin(admin.ModelAdmin):
     fieldsets = [
             ('File info', {'fields': ['name','webpage']}),
             ('Upload image', {'fields': ['image','mimeType']})]
 
   
   
 admin.site.register(Entry, MyAdmin)
Task 2 - Customizing the interface for listing all records




Default
Task 2 - Customizing the interface for listing all records




Default
                                                   Finally




   Multiple attributes displayed
Task 2 - Customizing the interface for listing all records




Default
                                                   Finally
                             search by name




   Multiple attributes displayed
Task 2 - Customizing the interface for listing all records




Default
                                                        Finally
                             search by name




   Multiple attributes displayed              filter by MIME type
Task 2.1 - Changing the record list output




Default
Task 2.1 - Changing the record list output




Default
                                             After




        Multiple attributes displayed
Task 2.1 - Editing admin.py

                                                   WebDirectory/admin.py
 from WebDirectory.models import Entry
 from django.contrib import admin
     
   
   
   
   
   


 Class 
       Class EntryAdmin(admin.ModelAdmin):
     fieldsets = [
             ('File info', {'fields': ['name','webpage']}),
             ('Upload image', {'fields': ['image','mimeType']})]


     list_display = ('name', 'mimeType', 'webpage')
 
   
   
 admin.site.register(Entry, MyAdmin)
Task 2.2 - Adding filter and search




 Now
Task 2.2 - Adding filter and search




 Now

                                                 Finally
                      search by name




                                       filter by MIME type
Adding filter and search
                                                   WebDirectory/admin.py
 from WebDirectory.models import Entry
 from django.contrib import admin
     
   
   
   
   
   


 Class 
       Class EntryAdmin(admin.ModelAdmin):
     fieldsets = [
             ('File info', {'fields': ['name','webpage']}),
             ('Upload image', {'fields': ['image','mimeType']})]


     list_display = ('name', 'mimeType', 'webpage')


     list_filter = ['mimeType']


     search_fields = ['name']
 
   
   
 admin.site.register(Entry, MyAdmin)
Advanced Customization
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
Step 1 - Create an admin directory in the project


            tsansweb/
                __init__.py
                manage.py
                settings.py
                urls.py
                WebDirectory/
                admin/
                   templates/
                       admin/
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/
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

More Related Content

PPT
Intoduction on Playframework
KEY
Google
PPT
Keller Williams Realty
KEY
Files
KEY
Authentication
PPT
October - Corporatre Presentation
PPTX
Wedium coffav
PPT
Fostering Online Networks
Intoduction on Playframework
Google
Keller Williams Realty
Files
Authentication
October - Corporatre Presentation
Wedium coffav
Fostering Online Networks

Similar to Admin (20)

PPTX
DJango admin interface
PDF
Working With The Symfony Admin Generator
PDF
Customizing the Django Admin
PDF
Chapter 6 the django admin site
PDF
Django Admin (Python meeutp)
PDF
PDF
django_reference_sheet
PDF
Django admin
KEY
Templates
PDF
What’S New In Newforms Admin
PDF
那些年,我用 Django Admin 接的案子
PDF
The Best (and Worst) of Django
PDF
Django Heresies
PDF
Basic Crud In Django
PDF
Class-based views with Django
PDF
Django - basics
PDF
Django - 次の一歩 gumiStudy#3
PDF
gumiStudy#3 Django – 次の一歩
PPTX
The Django Web Application Framework 2
PPTX
The Django Web Application Framework 2
DJango admin interface
Working With The Symfony Admin Generator
Customizing the Django Admin
Chapter 6 the django admin site
Django Admin (Python meeutp)
django_reference_sheet
Django admin
Templates
What’S New In Newforms Admin
那些年,我用 Django Admin 接的案子
The Best (and Worst) of Django
Django Heresies
Basic Crud In Django
Class-based views with Django
Django - basics
Django - 次の一歩 gumiStudy#3
gumiStudy#3 Django – 次の一歩
The Django Web Application Framework 2
The Django Web Application Framework 2
Ad

Recently uploaded (20)

PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
KodekX | Application Modernization Development
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPTX
A Presentation on Artificial Intelligence
PDF
Electronic commerce courselecture one. Pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Modernizing your data center with Dell and AMD
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Reach Out and Touch Someone: Haptics and Empathic Computing
KodekX | Application Modernization Development
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Mobile App Security Testing_ A Comprehensive Guide.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Encapsulation_ Review paper, used for researhc scholars
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
A Presentation on Artificial Intelligence
Electronic commerce courselecture one. Pdf
cuic standard and advanced reporting.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
Modernizing your data center with Dell and AMD
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Unlocking AI with Model Context Protocol (MCP)
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Ad

Admin

  • 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!
  • 6. Activate the admin interface for your Django project
  • 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', ) ...
  • 8. Step 2 - Re-synchronize the database $ python manage.py syncdb
  • 9. Step 3 - Modify the project URL Dispatcher urls.py from django.conf.urls.defaults import patterns, include, url urlpatterns = patterns('', (r'^webdirectory/', include('WebDirectory.urls'))) from django.contrib import admin admin.autodiscover() urlpatterns += patterns('',(r'^admin/', include(admin.site.urls)))
  • 10. The admin interface is ready!
  • 11. The admin interface is ready! URL of the admin site
  • 12. The admin interface is ready! URL of the admin site So far, you can login as the superuser created during the first database sync
  • 13. Activate the admin interface for the WebDirectory app
  • 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
  • 20. From WebDirectory admin you can get the list of records
  • 21. From WebDirectory admin you can add records get the list of records
  • 22. From WebDirectory admin you can add records get the list of records
  • 23. From WebDirectory admin you can add records get the list of records modify records
  • 24. From WebDirectory admin you can add records get the list of records modify records delete records
  • 25. Creating a dedicated administrator for WebDirectory
  • 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
  • 28. Create the John Doe admin user
  • 32. login and password user’s information staff = admin power
  • 33. login and password user’s information staff = admin power give all administrative permissions for WebDirectory
  • 35. What the administrator can do After logging in as jdoe ...
  • 36. What the administrator can do After logging in as jdoe ... ... John Doe can administrate WebDirectory only
  • 37. Customize the admin interface
  • 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)
  • 44. Task 1.2 - Splitting fields into field sets Now
  • 45. Task 1.2 - Splitting fields into field sets Now Finally fields grouped in fieldsets
  • 46. Task 1.2 - Editing admin.py WebDirectory/admin.py from WebDirectory.models import Entry from django.contrib import admin Class Class EntryAdmin(admin.ModelAdmin): fieldsets = [ ('File info', {'fields': ['name','webpage']}), ('Upload image', {'fields': ['image','mimeType']})] admin.site.register(Entry, MyAdmin)
  • 47. Task 2 - Customizing the interface for listing all records Default
  • 48. Task 2 - Customizing the interface for listing all records Default Finally Multiple attributes displayed
  • 49. Task 2 - Customizing the interface for listing all records Default Finally search by name Multiple attributes displayed
  • 50. Task 2 - Customizing the interface for listing all records Default Finally search by name Multiple attributes displayed filter by MIME type
  • 51. Task 2.1 - Changing the record list output Default
  • 52. Task 2.1 - Changing the record list output Default After Multiple attributes displayed
  • 53. Task 2.1 - Editing admin.py WebDirectory/admin.py from WebDirectory.models import Entry from django.contrib import admin Class Class EntryAdmin(admin.ModelAdmin): fieldsets = [ ('File info', {'fields': ['name','webpage']}), ('Upload image', {'fields': ['image','mimeType']})] list_display = ('name', 'mimeType', 'webpage') admin.site.register(Entry, MyAdmin)
  • 54. Task 2.2 - Adding filter and search Now
  • 55. Task 2.2 - Adding filter and search Now Finally search by name filter by MIME type
  • 56. Adding filter and search WebDirectory/admin.py from WebDirectory.models import Entry from django.contrib import admin Class Class EntryAdmin(admin.ModelAdmin): fieldsets = [ ('File info', {'fields': ['name','webpage']}), ('Upload image', {'fields': ['image','mimeType']})] list_display = ('name', 'mimeType', 'webpage') list_filter = ['mimeType'] search_fields = ['name'] admin.site.register(Entry, MyAdmin)
  • 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

Editor's Notes