git@github.com:tolomea/django-data-browser.git
Project description
django-data-browser
A Django app for interactive user friendly browsing of a Django projects DB.
Features
- Zero config, if it's in the admin it's in the browser
- Select fields (including calculated fields), sort and fitler
- Automatically follow OneToOneFields and ForeignKeys
- Respects per user admin permissions
- Share views by URL
- Save views and optionally make them available to services like Google sheets
- Download views as CSV or JSON
Roadmap (in no particular order)
- ToMany and aggregation support
- Advanced filtering
- PII controls
- Graphs
- Pivoting
Demo
There is a live demo site available. The Django project is a small e-commerce site selling microservices.
Source: https://github.com/tolomea/data-browser-demo
Admin: https://data-browser-demo.herokuapp.com/admin/
Data Browser: https://data-browser-demo.herokuapp.com/data-browser/
Becuase it's hosted on Heroku free tier it might take a while to respond to the first page load.
Installation
- Run
pip install django-data-browser
- Add
"data_browser"
to installed_apps. - Add
path("data-browser/", include("data_browser.urls"))
to your urls. - Run
python manage.py migrate
.
Security
There are two types of views in the Data Browser.
Query views support general querying of the database (checked against the users admin permissions) but can only be accessed by Django "staff members".
Saved Views can be accessed by anyone but they can only be used to access a view that has been saved and made public and have long random URL's.
You can use the admin permission data_browser | view | Can make a saved view publically available
to restrict who can make views public. To be public the view must be marked as public and owned by someone who has the permission. Users without the permission can not mark views as public and can not edit any view that is marked public.
Sentry
The frontend code has builtin Sentry support, it is disabled by default. To enable it set the Django settings value DATA_BROWSER_FE_DSN
, for example to set it to the Data Browser project Sentry use:
DATA_BROWSER_FE_DSN = "https://af64f22b81994a0e93b82a32add8cb2b@o390136.ingest.sentry.io/5231151"
Customization and Performance
For concrete fields (as oppose to calculated ones) the Data Browser will do appropriate select and prefetch related calls to minimise it's database impact.
The Data Browser calls the normal admin get_queryset
functions. You can use these to customize querysets as needed.
If necessary you can test to see if the databrowser is making the call as follows:
if request.databrowser:
# Data Browser specific customization
This is particularly useful if you want to route the Data Browser to a DB replica.
The Data Browser also calls get_fieldsets
to find out what fields the current user can access. When it does this it always passes a newly constructed instance of the relevant model. This is necessary to work around Django's User admin messing with the fieldsets when None
is passed.
Development
The easiest way to develop this is against your existing client project.
The compiled Javascript is checked into the repo, so if only want to mess with the Python then it's sufficient to:
- Install the Data Browser in editable mode
pip install -e <directory to your git clone>
.
If you want to modify the Javascript then you also need to:
- Enable proxying to the JS dev server by adding
DATA_BROWSER_DEV = True
to your settings. - Run the Javascript dev server with
WDS_SOCKET_PORT=3000 PUBLIC_URL=data_browser npm start
. TheWDS_SOCKET_PORT
is so the proxied JS can find it's dev server. ThePUBLIC_URL
tells the JS dev server what path to serve from and should be the same as the URL you have mounted the Data Browser on in you urls file.
To run the Python tests, in the top level of you git clone run pip install -r requirements.txt
then pytest
.
There is also pre-commit config for lint etc to enable this run pip install pre-commit && pre-commit install
then lint will run on git commit
. The linting includes Black and isort autoformatting.
To build the JS, move the files around appropriately and recreate the wheels run build.sh
.
During development it can be useful to look at the .ctx
and .json
views. The .ctx
view will show you the initial context being passed to the Javascript on page load. The .json
view is the actual API request the Javascript uses to fetch query results.
Naming
Name | Meaning |
---|---|
bound query | A query that has been validated against the config |
config | Information that doesn't change based on the particular query, includes all the models and their fields. |
field name | Just the name of the field e.g. created_time . |
field path | Includes information on how to reach the model the field is on e.g. order__seller__created_time . |
model name | Fullstop seperated app and model names e.g. myapp.MyModel . |
model | In Python the actual model class, in Javascript the model_name. |
query | The information that changes with the query being done, in the Javascript this also includes the results. |
view | A saved query. |
Structure
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-data-browser-1.0.1.tar.gz
.
File metadata
- Download URL: django-data-browser-1.0.1.tar.gz
- Upload date:
- Size: 282.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 397aba33ac35ad762d5194adda6abcb4e290415b6be6ec97f325753b6b250df8 |
|
MD5 | 6a00fab4761048730f656e8c92c1f52a |
|
BLAKE2b-256 | a5bff2db17dc02664eb4f1106cf5223c55f8960bbbb242d7297e28e16563edf4 |
File details
Details for the file django_data_browser-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: django_data_browser-1.0.1-py3-none-any.whl
- Upload date:
- Size: 2.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eaf072e82904b944ecfe6d6c80cc09d1de1be62391bf4d1e9bc7ff81033fecff |
|
MD5 | 894ee019db6955a817ae5174d5c3a841 |
|
BLAKE2b-256 | 90827f7d1059c2d0217498fde7890e606e8dd9d828165bb68f68ebfdc7aecd2a |