[#77608474] Add `DashboardViewsGetTestCase` to `test_dashboard.py`

- Doesn't make assertions about UUIDs, as they constantly seem to change. **I THINK** this is by design, but would like to check before having this merged.
[#77608474] Implement dashboard `GET`

**Nicer implementation pattern suggestions welcome**

- We're still using the same url here, so the `dashboard` method routes to a `get_dashboard` method, which feels properly dumb but...
  - I didn't want to wrestle with trying to route based on the request inside `urls.py`
  - Annoyingly this means that `@require_http_methods` on the `dashboard` method now takes `(['POST', 'PUT', 'GET'])` which feels extra dumb, because we're putting routing logic in a bloody view.
[#78806122] Return 400 on module validation error

At the moment we fail with a 500 for what should be a 400.

This change required blank=True to be set on a few models. The 'null'
argument only applies to whether the database field can be null. The
'blank' argument applies to the validation.
Merge pull request #232 from alphagov/get_dashboard

[#77608474] Implement dashboard `GET`
Merge pull request #228 from alphagov/fail-module-create-with-error

[#78806122] Return 400 on module validation error
[#78806122] Return 400 on module validation error

At the moment we fail with a 500 for what should be a 400.

This change required blank=True to be set on a few models. The 'null'
argument only applies to whether the database field can be null. The
'blank' argument applies to the validation.
[#78806182] Roll back dashboard if any part fails

If any part of a dashboard creation (ie. dashboard, modules, links etc)
fails then the entire transaction should be rolled back. This has been
done by wrapping the view in a transaction. Unfortunately the
transaction provided by Django isn't really suitable for views so this
commit also introduces a view decorator that will roll back the
transaction if the response code is an error.
Merge pull request #229 from alphagov/transaction-on-dashboard

[#78806182] Roll back dashboard if any part fails
Implementation of returning modules

Return only the module if the slug contains a module slug - that is the
slug is of the form /<dashboard-slug>/<module-slug> - ie a dashboard has
been found for <dashboard-slug> and there is a remaining part of the url
that corresponds to a slug in the dashboards modules.
Add logic for finding tabs when specified

Also refactored the module finding logic as some of it was similar to
tab finding logic
Move logic from view to model

Further changes might use the presenter pattern, but for now it is good
to have all the spotlightify logic in one place.
Merge pull request #231 from alphagov/update-slug-for-modules-and-tabs

Add modules and tabs logic to dashboard view
Remove json.dumps() for options in dashboard tests

These calls to json.dumps() around the options dictionary was causing
the tests for fail locally for me. However, the tests didn't fail
when run on Travis.
Merge pull request #233 from alphagov/bugfix-tests-json-dumps-options

Remove json.dumps() for options in dashboard tests
Add in method to list for spotlight

This produces a stripped down list of published dashboards which is
formatted identically to the dashboards.json file that spotlight uses to
drive it's homepage and services list.
If no slug is provided, return dashboard list for spotlight
Fix validation of modules with no data set

Previously if the data_group and data_type were set but empty it would
fail with not being able to find the data set. As @timmow suggested, be
liberal in what you accept and conservative in what you emit.
Merge pull request #235 from alphagov/fix-module-with-no-data-set

Fix validation of modules with no data set
Do not cache module type or node list endpoints

The endpoints that are just going to be used by the admin app, we do not
want to cache.
Merge pull request #236 from alphagov/do-not-cache-node-list-pages

Do not cache module type or node list endpoints