Giter VIP home page Giter VIP logo

springload / madewithwagtail Goto Github PK

View Code? Open in Web Editor NEW
84.0 36.0 21.0 2.32 MB

A showcase of sites and apps made with Wagtail CMS, the easy to use, open source Django content management system

Home Page: http://madewithwagtail.org

License: MIT License

Python 48.45% CSS 0.23% JavaScript 2.81% HTML 28.42% Shell 1.69% Makefile 0.26% Dockerfile 1.33% SCSS 16.29% Handlebars 0.45% Just 0.09%
wagtail showcase cms python django hacktoberfest

madewithwagtail's Introduction

A showcase of sites and apps made with Wagtail: an easy to use, open source content management system from Torchbox.

Check out Awesome Wagtail for more awesome packages and resources from the Wagtail community.

Back End Setup

Development on this project can be done using docker. If you have not yet installed docker, consult the instructions for your operating system.

Docker

It's a good idea to set up the nginx proxy if you have not done so already, instructions can be found on the github repo.

Vagrant is no longer in this project, and any material relating to vagrant can be ignored.

Clone the repo

cd [my-dev-environment]
git clone [email protected]:springload/madewithwagtail.git
cd madewithwagtail

Setup your environment variables

cp dev.env.example dev.env

And then edit dev.env to suit your local setup. Any API keys etc should be in Bitwarden.

Database setup

First, download the database dump you want from our Google Cloud storage.

Next decrypt the dump using gpg.

Finally, place the decrypted .sql file into [my-dev-environment]/madewithwagtail/docker/database - it will be automatically loaded when you build your database container in the next section.

Build your containers

docker-compose up
# In another terminal tab run:
docker-compose exec application ./manage.py migrate

Browsing locally

https://madewithwagtail.dev.springload.nz/

Front End

This project uses nvm and Yarn

# Make sure you use the right node version.
nvm use

# Setup
yarn install

# Start the server and the development tools.
yarn run start

# Builds frontend assets.
yarn run build

# Builds frontend production assets.
yarn run dist

# Runs linting.
yarn run lint

# Runs tests.
yarn run test

# View other available commands with:
yarn run

Documentation

Check out the docs/ in their own folder.

Browser support

Supported browser / device versions:

Browser Device/OS Version
Mobile Safari iOS Phone latest
Mobile Safari iOS Tablet latest
Chrome Android latest
Edge Desktop latest
Chrome Desktop latest
Firefox Desktop latest
Safari OSX latest

New site submissions workflow

Anyone can submit a site on the submission form. When a new site is submitted, the details are saved and also sent to us via an email notification. We then need to manually validate the submission and add the new site via the CMS.

  • Check that the submission is valid (see below)
  • If the submission isn't valid, we won't add the site to our showcase. Remove it from the CMS.
  • If the submission is valid,
  1. Look for new submissions https://madewithwagtail.org/admin/forms/submissions/5/ (use the filters at the top to remove already processed dates)
  2. Export to CSV
  3. For each submission:
    1. Confirm whether it’s a Wagtail website, see Validating submissions.
    2. Find the developer’s profile page or create it if that’s a first submission
    3. Create the website page:
      • Get a screenshot of the website with headless Google Chrome, e.g. google-chrome --headless --hide-scrollbars --disable-gpu --screenshot --window-size=1200,996 https://springload.co.nz/
      • Fill out everything from the submission
      • Notify the developer

Validating submissions

A site is accepted for inclusion on Made with Wagtail if it is made with Wagtail. It's that simple – there is no judgement of a site's quality. In the future, we may change how sites are displayed so some are more prominently visible than others.

To confirm that a site is made with Wagtail,

  • Try to go to <site URL>/admin/. If the site uses the default admin URLs, it will redirect you to the Wagtail login page.
  • Use the Wappalyzer browser extension. It won't flag Wagtail directly, but it can flag Django / Python, and could also uncover other technologies.
  • Look at the homepage HTML to see if static assets are served from /static/, a common URL structure of Django sites.
  • Can you find trace of images renditions (e.g. images’ src finish with -max-800 or fill-500x500 or -original or -width-800) in the source? ✅
  • Does the page has some meta name="generator" content="..." showing that it was made with Wordpress or Drupal? ❌
  • Does the page has some /wp-upload path for the images? ❌
  • Look at other ideas to figure it out here #62 ✅ or ❌
  • If all of those methods are inconclusive, assume that the site submission is faithful and that the site is indeed built with Wagtail.

Publication hook

We send Slack notifications for every new site page published to Made with Wagtail. To try this locally, set up a local.py setting override with the right settings.

madewithwagtail's People

Contributors

andrewcalderspringload avatar b-jam avatar bertrandbordage avatar dnsl48 avatar gdelavil avatar haydngreatnews avatar janzenz avatar johnanders123 avatar jordij avatar katene30 avatar loicteixeira avatar matheusbrat avatar mojeto avatar pyup-bot avatar samanthaksanders avatar tacitus avatar thibaudcolas avatar thijskramer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

madewithwagtail's Issues

`vagrant up` from a fresh checkout fails

It appears no Django database configuration is set automatically by the provisioning script, so attempting to run manage.py migrate fails with:

django.db.utils.OperationalError: FATAL:  Peer authentication failed for user "postgres"

The provisioning script should automatically set up a local database user and a settings/local.py, or the README should contain instructions on how to get up and running.

Use search input type for search field

At the moment the search field is type="text". This doesn't fully leverage browsers' special treatment of search fields.

We will need to be careful when changing this not to break the form's styling (see screenshot).

mww-search

Problem with page-editor.js and hallo.js

Hi man, how are you?

I try to adapt my site to your site and i try use your custom hallobuttons with my custom hallo plugin, but, i have a error about placeCaretAtEnd, so, i change page-editor.js and hallo.js but still i have this issue, can you halp me?

hallo.js:47 Uncaught TypeError: jQuery(...)[plugin] is not a function

I only register my custom plugin, not your other js files.

Problem with signals adding many page types.

I have the next problem when i put your signals.py code in my project:

TypeError at /admin/pages/6/edit/

isinstance() arg 2 must be a type or tuple of types

This is the traceback:

Traceback:
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/views/decorators/cache.py" in _cache_controlled
  43.             response = viewfunc(request, *args, **kw)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  22.                 return view_func(request, *args, **kwargs)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/wagtail/wagtailadmin/views/pages.py" in edit
  247.                 submitted_for_moderation=is_submitting,
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/wagtail/wagtailcore/models.py" in save_revision
  498.             approved_go_live_at=approved_go_live_at,
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/db/models/fields/related.py" in create
  758.             return super(RelatedManager, self.db_manager(db)).create(**kwargs)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/db/models/manager.py" in manager_method
  127.                 return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/db/models/query.py" in create
  348.         obj.save(force_insert=True, using=self.db)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/wagtail/wagtailcore/models.py" in save
  1095.         super(PageRevision, self).save(*args, **kwargs)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/db/models/base.py" in save
  710.                        force_update=force_update, update_fields=update_fields)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/db/models/base.py" in save_base
  734.                                   update_fields=update_fields)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/lib/python3.4/site-packages/django/dispatch/dispatcher.py" in send
  201.             response = receiver(signal=self, sender=sender, **named)
File "/media/tulipan/Datos/Proyectos/Trabajo/CCCT/ccct/core/signals.py" in pre_page_revision_save
  52.         if isinstance(instance.page, PAGE_CLASSES):

Exception Type: TypeError at /admin/pages/6/edit/
Exception Value: isinstance() arg 2 must be a type or tuple of types

And this is my code:

import re

from django.db.models.signals import post_save, pre_save
from django.dispatch import receiver
from django.core.cache import cache

from wagtail.wagtailcore.models import PageRevision

from .models import *
from .utils import replace_tags

# Signals for Models. Some for performing specific class tasks, some just for clearing the cache.

# Set your own classes
PAGE_CLASSES = [HomePage, StandardIndexPage, StandardPage, FormPage, BlogIndexPage, BlogIndexPage,
                PersonPage, ContactPage, EventIndexPage, EventPage, NewIndexPage, NewPage]


@receiver(pre_save)
def pre_page_save(sender, instance, **kwargs):
    """
    Strip empty <p> elements from any RichTextField and other stuff when saved instance is one of the following
    classes: defined in PAGE_CLASSES
    """
    if (kwargs.get('created', True) and not kwargs.get('raw', False)):
        if (sender in PAGE_CLASSES):
            for field in instance._meta.fields:
                if sender._meta.get_field(field.name).__class__.__name__ == "RichTextField":
                    field_to_string = getattr(instance, field.name)
                    field_to_string = re.sub(r"\n", "", field_to_string)
                    # Clean empty paragraphs
                    field_to_string = re.sub(r"<p>(<br/>|<br>)*</p>", "", field_to_string)
                    # Wrap images and embeds into figures instead of paragraphs
                    field_to_string = re.sub(
                        r"<p>((<img.+/.[^>]+>)|(<embed.[^>]+embedtype=\"image\".[^>]+/>))+:?(<br>|<br/>)*</p>",
                        r"<figure>\1</figure>",
                        field_to_string
                    )
                    clean_field = replace_tags(
                        field_to_string, {"<b>": "<strong>", "<i>": "<em>", "</b>": "</strong>", "</i>": "</em>"}
                    )
                    #  Replace content field
                    setattr(instance, field.name, clean_field)


@receiver(pre_save, sender=PageRevision)
def pre_page_revision_save(sender, instance, **kwargs):
    """
    Strip empty <p> elements from any RichTextField only when related page is a WagtailPage
    """
    if (kwargs.get('created', True) and not kwargs.get('raw', False)):
        if isinstance(instance.page, PAGE_CLASSES):
            mirror_page = instance.as_page_object()
            for field in mirror_page._meta.fields:
                if instance.page._meta.get_field(field.name).__class__.__name__ == "RichTextField":
                    field_to_string = getattr(mirror_page, field.name)
                    field_to_string = re.sub(r"\n", "", field_to_string)
                    # Clean empty paragraphs
                    field_to_string = re.sub(r"<p>(<br/>|<br>)*</p>", "", field_to_string)
                    # Wrap images and embeds into figures instead of paragraphs
                    field_to_string = re.sub(
                        r"<p>((<img.+/.[^>]+>)|(<embed.[^>]+embedtype=\"image\".[^>]+/>))+:?(<br>|<br/>)*</p>",
                        r"<figure>\1</figure>",
                        field_to_string
                    )
                    clean_field = replace_tags(
                        field_to_string, {"<b>": "<strong>", "<i>": "<em>", "</b>": "</strong>", "</i>": "</em>"}
                    )
                    #  Replace content field
                    setattr(mirror_page, field.name, clean_field)
                    #  To json again
                    instance.content_json = mirror_page.to_json()


@receiver(post_save)
def post_model_save(sender, instance, **kwargs):
    """
    Clear cache when any kind of Model is saved
    """
    cache.clear()

I have many type page and i want use your signals for each one of all.

Thank's !

Automate submissions

Edit @loicteixeira:
The actual proposal (scope) is linked below.


Rough plan:

  • Let users add their own dev pages
  • Let users add their own sites, including snapshots (eeek! file uploads essentially public - Could partially be mitigated by s3 hosting for images)

Secret key snippet doesn't works in Django 1.8.5

When i try use ./manage.py shell say me this:

server)tulipanrog@tulipanrog-G771JW:/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/maqam$ ./manage.py syncdb
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 346, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 190, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 40, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/commands/syncdb.py", line 4, in <module>
    from django.contrib.auth import get_user_model
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 7, in <module>
    from django.middleware.csrf import rotate_token
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/middleware/csrf.py", line 14, in <module>
    from django.utils.cache import patch_vary_headers
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/utils/cache.py", line 26, in <module>
    from django.core.cache import caches
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/cache/__init__.py", line 34, in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 113, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
(server)tulipanrog@tulipanrog-G771JW:/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/maqam$ ./manage.py syncdb
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 346, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 190, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 40, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/commands/syncdb.py", line 4, in <module>
    from django.contrib.auth import get_user_model
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 7, in <module>
    from django.middleware.csrf import rotate_token
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/middleware/csrf.py", line 14, in <module>
    from django.utils.cache import patch_vary_headers
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/utils/cache.py", line 26, in <module>
    from django.core.cache import caches
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/cache/__init__.py", line 34, in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 113, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
(server)tulipanrog@tulipanrog-G771JW:/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/maqam$ ./manage.py syncdb
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 346, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 190, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 40, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/commands/syncdb.py", line 4, in <module>
    from django.contrib.auth import get_user_model
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 7, in <module>
    from django.middleware.csrf import rotate_token
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/middleware/csrf.py", line 14, in <module>
    from django.utils.cache import patch_vary_headers
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/utils/cache.py", line 26, in <module>
    from django.core.cache import caches
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/cache/__init__.py", line 34, in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 113, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
(server)tulipanrog@tulipanrog-G771JW:/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/maqam$ ./manage.py syncdb
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 346, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 190, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/__init__.py", line 40, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/management/commands/syncdb.py", line 4, in <module>
    from django.contrib.auth import get_user_model
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 7, in <module>
    from django.middleware.csrf import rotate_token
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/middleware/csrf.py", line 14, in <module>
    from django.utils.cache import patch_vary_headers
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/utils/cache.py", line 26, in <module>
    from django.core.cache import caches
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/core/cache/__init__.py", line 34, in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/media/tulipanrog/Data/Proyectos/Universidad/Moviles/Aplicacion/server/lib/python3.4/site-packages/django/conf/__init__.py", line 113, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

Why happen this?

Add analytics tracking inside the CMS

In the quest to improve Wagtail as a CMS, we have a big information gap between what features are available to users and what's actually used. We've been having conversations about doing more user testing, and also potentially having some sort of tracking of interactions with the CMS.

I'd like to trial this on this project. It's probably not the most representative in terms of site usage, but since it's open source and only meant for the Wagtail community I'm less concerned about privacy and secrecy issues.

Here is a proposed course of action:

  • Find a good disclaimer text informing users that there is analytics tracking enabled.
  • Find a prominent place to add the disclaimer, and add it there.
  • Add the default Google Analytics tracking.
  • Consider more refined tagging, either via custom JS, custom HTML (à la springload-analytics.js, or GTM.
  • Set up once-a-month catch-ups/reports to see what the numbers look like.

Things I'm not too sure of:

  • Whether it is good to implement tracking opt-out (for the purpose of this experiment)
  • Whether the page views should be anonymised to some extent (with our move towards accounts for every dev, it will be very easy to associate specific interactions on given pages with a person)
  • Whether this should be tracked on the same GA account as the site's front-end, or not.

Things this could help answer (likely with caveats):

  • Are people using the "Page lock" feature?
  • Do people navigate the site with the explorer menu, or explorer pages?
  • Is the search useful?
  • How much time is spent on every part of the editing workflow (and what we should look at to lower it)
  • What features should we prioritise work on in Wagtail?
  • Do updates to the CMS actually make it better and help decrease staff time devoted to CMS editing?
  • Should we put a bigger emphasis on support for mobile devices?

Use consistent heuristics to tell if a site is made with Wagtail

I would like to build something like http://isthissitebuiltwithdrupal.com/ or http://whatcms.org/, both to make it easier for us to validate sites, and also because it's cool.

A note: if someone wants to tackle this, it is related to Made with Wagtail but I don't think it should be built within it. MWW could potentially integrate with that thing though.

At the moment we use https://wappalyzer.com/, which detects Django / Python, but not with a great degree of confidence IIRC.

Here are the heuristics I could think of, in no particular order:

Form submissions ordering is broken

I think this has started happening when I removed a bunch of spammy submissions on the site. I thought submissions were ordered by date, from oldest to newest, but now new submissions are positioned in a seemingly erratic manner in-between old ones.

This affects both the table at http://madewithwagtail.org/admin/forms/submissions/5/ and the CSV export.

Here's the weird order on a subset of the submissions (the CSV provides a fuller picture):

madewithwagtail-submissions-order

Ideally we would want to display all submissions from most recent to oldest I think.

Submission emails are not sent for all submissions

I've noticed multiple times that I don't receive emails for all of the submissions to the site.

For example, I received emails for the submissions on 25/11, but none for the one on 30/11. I received an email for one out of two submissions on 01/12, and none for the ones on 02/12.

It's hard to tell whether there is a pattern.

credentials not working?

Thank you for making this site available! I'm finding the cms-superadmin / cms-superadmin credentials listed in the readme are not working. Have they changed? Thank you!

Cool new features

  • Preview those sites in responsinator
  • Call to action. Need help with Wagtail? Call us
  • Multilanguage? (Might be a problem for the content users upload though)
  • Long term, adding some bigger 'case studies' such as RCA and maybe BCITO would be nice. Or inner.kiwi... talk about banks/security etc.
  • Login for developers (Suggested by Rob), tracked in #70
  • Set up Twitter bot to automatically tweet new sites, started in #95
  • Integrate mobile and tablet images for each submitted site.
  • Automated screenshots
  • Slack notifications for each new site http://docs.wagtail.io/en/latest/reference/signals.html
  • Leaderboard of Wagtail sites

Automated screenshots

Right now we have https://github.com/springload/screenshotron, which is a fancier and hopefully more reliable version of the Slimer.js scripts we had before.

Tom suggested https://screenshotlayer.com/, like what https://github.com/adriangoe/wagtailvisualdiff does.

makes 2 screenshots for each page and screenshotlayer.com requires paid subscription if you reach limit of 100 screenshots per month

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.