==========
Databrowse
==========

.. module:: django.contrib.databrowse
   :synopsis: Databrowse is a Django application that lets you browse your data.

.. deprecated:: 1.4
    This module has been deprecated. It's available as a `third-party package
    <https://pypi.python.org/pypi/django-databrowse>`_.

Databrowse is a Django application that lets you browse your data.

As the Django admin dynamically creates an admin interface by introspecting
your models, Databrowse dynamically creates a rich, browsable Web site by
introspecting your models.

How to use Databrowse
=====================

1. Point Django at the default Databrowse templates. There are two ways to
   do this:

   * Add ``'django.contrib.databrowse'`` to your :setting:`INSTALLED_APPS`
     setting. This will work if your :setting:`TEMPLATE_LOADERS` setting
     includes the ``app_directories`` template loader (which is the case by
     default). See the :ref:`template loader docs <template-loaders>` for
     more.

   * Otherwise, determine the full filesystem path to the
     :file:`django/contrib/databrowse/templates` directory, and add that
     directory to your :setting:`TEMPLATE_DIRS` setting.

2. Register a number of models with the Databrowse site::

       from django.contrib import databrowse
       from myapp.models import SomeModel, SomeOtherModel, YetAnotherModel

       databrowse.site.register(SomeModel)
       databrowse.site.register(SomeOtherModel, YetAnotherModel)

   Note that you should register the model *classes*, not instances.

   .. versionchanged:: 1.4

   Since Django 1.4, it is possible to register several models in the same
   call to ``databrowse.site.register()``.

   It doesn't matter where you put this, as long as it gets executed at some
   point. A good place for it is in your :doc:`URLconf file
   </topics/http/urls>` (``urls.py``).

3. Change your URLconf to import the :mod:`~django.contrib.databrowse` module::

       from django.contrib import databrowse

   ...and add the following line to your URLconf::

       (r'^databrowse/(.*)', databrowse.site.root),

   The prefix doesn't matter -- you can use ``databrowse/`` or ``db/`` or
   whatever you'd like.

4. Run the Django server and visit ``/databrowse/`` in your browser.

Requiring user login
====================

You can restrict access to logged-in users with only a few extra lines of
code. Simply add the following import to your URLconf::

    from django.contrib.auth.decorators import login_required

Then modify the :doc:`URLconf </topics/http/urls>` so that the
``databrowse.site.root()`` view is decorated with
:func:`django.contrib.auth.decorators.login_required`::

    (r'^databrowse/(.*)', login_required(databrowse.site.root)),

If you haven't already added support for user logins to your :doc:`URLconf
</topics/http/urls>`, as described in the :doc:`user authentication docs
</ref/contrib/auth>`, then you will need to do so now with the following
mapping::

    (r'^accounts/login/$', 'django.contrib.auth.views.login'),

The final step is to create the login form required by
:func:`django.contrib.auth.views.login`. The
:doc:`user authentication docs </ref/contrib/auth>` provide full details and a
sample template that can be used for this purpose.
