From 9701997cc8f7ea3ca27e1030f7151f9919dce436 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Date: Sun, 26 Apr 2015 16:12:36 +0530 Subject: [PATCH 1/5] Update requirements to django 1.8 --- README.rst | 2 +- {{cookiecutter.repo_name}}/requirements/base.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 8b2f1a2c..d7733988 100644 --- a/README.rst +++ b/README.rst @@ -21,7 +21,7 @@ This cookiecutter template uses features that exists only in cookiecutter 0.9.0 Features --------- -* For Django 1.7 +* For Django 1.8 * Twitter Bootstrap_ 3 * AngularJS_ * 12-Factor_ based settings via django-environ_ diff --git a/{{cookiecutter.repo_name}}/requirements/base.txt b/{{cookiecutter.repo_name}}/requirements/base.txt index 13daf2d9..cb61a20a 100644 --- a/{{cookiecutter.repo_name}}/requirements/base.txt +++ b/{{cookiecutter.repo_name}}/requirements/base.txt @@ -1,5 +1,5 @@ # Bleeding edge Django -django>=1.7.7,<1.8 +django==1.8 # Configuration django-environ==0.3.0 From b6e5a995ef0e311f851a9659a454010a49504df7 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Date: Sun, 26 Apr 2015 16:13:39 +0530 Subject: [PATCH 2/5] Update users -> migrations --- .../users/migrations/0001_initial.py | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/users/migrations/0001_initial.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/users/migrations/0001_initial.py index 8c73461b..1036f22d 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/users/migrations/0001_initial.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/users/migrations/0001_initial.py @@ -3,38 +3,41 @@ from __future__ import unicode_literals from django.db import models, migrations import django.utils.timezone +import django.contrib.auth.models import django.core.validators class Migration(migrations.Migration): dependencies = [ - ('auth', '0001_initial'), + ('auth', '0006_require_contenttypes_0002'), ] operations = [ migrations.CreateModel( name='User', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(primary_key=True, verbose_name='ID', serialize=False, auto_created=True)), ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(default=django.utils.timezone.now, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True, max_length=30, verbose_name='username', validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username.', 'invalid')])), + ('last_login', models.DateTimeField(null=True, verbose_name='last login', blank=True)), + ('is_superuser', models.BooleanField(help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status', default=False)), + ('username', models.CharField(max_length=30, validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.', 'invalid')], verbose_name='username', error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True)), ('first_name', models.CharField(max_length=30, verbose_name='first name', blank=True)), ('last_name', models.CharField(max_length=30, verbose_name='last name', blank=True)), - ('email', models.EmailField(max_length=75, verbose_name='email address', blank=True)), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('groups', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Group', blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of his/her group.', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Permission', blank=True, help_text='Specific permissions for this user.', verbose_name='user permissions')), + ('email', models.EmailField(max_length=254, verbose_name='email address', blank=True)), + ('is_staff', models.BooleanField(help_text='Designates whether the user can log into this admin site.', verbose_name='staff status', default=False)), + ('is_active', models.BooleanField(help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active', default=True)), + ('date_joined', models.DateTimeField(verbose_name='date joined', default=django.utils.timezone.now)), + ('groups', models.ManyToManyField(related_name='user_set', blank=True, verbose_name='groups', to='auth.Group', help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_query_name='user')), + ('user_permissions', models.ManyToManyField(related_name='user_set', blank=True, verbose_name='user permissions', to='auth.Permission', help_text='Specific permissions for this user.', related_query_name='user')), ], options={ - 'abstract': False, 'verbose_name': 'user', + 'abstract': False, 'verbose_name_plural': 'users', }, - bases=(models.Model,), - ) + managers=[ + (b'objects', django.contrib.auth.models.UserManager()), + ], + ), ] From 948200f4cf10449a40e75e539f58cab409ce3461 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Date: Sun, 26 Apr 2015 16:29:31 +0530 Subject: [PATCH 3/5] Update sites -> migrations --- .../contrib/sites/migrations/0001_initial.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/contrib/sites/migrations/0001_initial.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/contrib/sites/migrations/0001_initial.py index 87d55c75..555d02c4 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/contrib/sites/migrations/0001_initial.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/contrib/sites/migrations/0001_initial.py @@ -14,16 +14,18 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Site', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('domain', models.CharField(max_length=100, verbose_name='domain name', validators=[django.contrib.sites.models._simple_domain_name_validator])), - ('name', models.CharField(max_length=50, verbose_name='display name')), + ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), + ('domain', models.CharField(verbose_name='domain name', max_length=100, validators=[django.contrib.sites.models._simple_domain_name_validator])), + ('name', models.CharField(verbose_name='display name', max_length=50)), ], options={ - 'ordering': ('domain',), - 'db_table': 'django_site', - 'verbose_name': 'site', 'verbose_name_plural': 'sites', + 'verbose_name': 'site', + 'db_table': 'django_site', + 'ordering': ('domain',), }, - bases=(models.Model,), + managers=[ + (b'objects', django.contrib.sites.models.SiteManager()), + ], ), ] From 3abb87acbc6b1082a6d90e01e1abd475d585dfba Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Date: Sun, 26 Apr 2015 16:33:15 +0530 Subject: [PATCH 4/5] Drop Support for django-avatar [not compatible with django 1.8] - makes the whole cookie lighter and acceptable to wider community - redues cookie maintainance buren --- README.rst | 1 - .../config/settings/common.py | 1 - {{cookiecutter.repo_name}}/config/urls.py | 3 -- .../requirements/base.txt | 3 -- .../templates/avatar/add.html | 23 --------------- .../templates/avatar/avatar_tag.html | 1 - .../templates/avatar/base.html | 5 ---- .../templates/avatar/change.html | 29 ------------------- .../templates/avatar/confirm_delete.html | 25 ---------------- .../templates/users/user_detail.html | 6 ++-- .../templates/users/user_list.html | 10 +++---- 11 files changed, 6 insertions(+), 101 deletions(-) delete mode 100644 {{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/add.html delete mode 100644 {{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/avatar_tag.html delete mode 100644 {{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/base.html delete mode 100644 {{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/change.html delete mode 100644 {{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/confirm_delete.html diff --git a/README.rst b/README.rst index d7733988..4855d647 100644 --- a/README.rst +++ b/README.rst @@ -27,7 +27,6 @@ Features * 12-Factor_ based settings via django-environ_ * Optimized development and production settings * Registration via django-allauth_ -* User avatars via django-avatar_ * Procfile_ for deploying to Heroku * Grunt build for compass and livereload * Basic e-mail configurations for send emails via SendGrid_ diff --git a/{{cookiecutter.repo_name}}/config/settings/common.py b/{{cookiecutter.repo_name}}/config/settings/common.py index 8d8ae674..6971dbd6 100644 --- a/{{cookiecutter.repo_name}}/config/settings/common.py +++ b/{{cookiecutter.repo_name}}/config/settings/common.py @@ -36,7 +36,6 @@ DJANGO_APPS = ( ) THIRD_PARTY_APPS = ( 'crispy_forms', # Form layouts - 'avatar', # for user avatars 'allauth', # registration 'allauth.account', # registration 'allauth.socialaccount', # registration diff --git a/{{cookiecutter.repo_name}}/config/urls.py b/{{cookiecutter.repo_name}}/config/urls.py index bd730660..fafc1c0f 100644 --- a/{{cookiecutter.repo_name}}/config/urls.py +++ b/{{cookiecutter.repo_name}}/config/urls.py @@ -21,9 +21,6 @@ urlpatterns = patterns('', # noqa url(r'^users/', include("{{ cookiecutter.repo_name }}.users.urls", namespace="users")), url(r'^accounts/', include('allauth.urls')), - # Uncomment the next line to enable avatars - url(r'^avatar/', include('avatar.urls')), - # Your stuff: custom urls includes go here diff --git a/{{cookiecutter.repo_name}}/requirements/base.txt b/{{cookiecutter.repo_name}}/requirements/base.txt index cb61a20a..5a44667a 100644 --- a/{{cookiecutter.repo_name}}/requirements/base.txt +++ b/{{cookiecutter.repo_name}}/requirements/base.txt @@ -27,9 +27,6 @@ psycopg2==2.6 unicode-slugify==0.1.3 django-autoslug==1.7.2 -# Useful things -django-avatar==2.0 - # Time zones support pytz==2015.2 diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/add.html b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/add.html deleted file mode 100644 index 077b81b5..00000000 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/add.html +++ /dev/null @@ -1,23 +0,0 @@ -{% raw %} -{% extends "avatar/base.html" %} -{% load i18n avatar_tags %} -{% load url from future %} - -{% block content %} -
-
-
-

{% trans "Your current avatar: " %}

- {% avatar user %} - {% if not avatars %} -

{% trans "You haven't uploaded an avatar yet. Please upload one now." %}

- {% endif %} -
- {{ upload_avatar_form.as_p }} -

{% csrf_token %}

-
-
-
-
-{% endblock %} -{% endraw %} \ No newline at end of file diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/avatar_tag.html b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/avatar_tag.html deleted file mode 100644 index febc17f0..00000000 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/avatar_tag.html +++ /dev/null @@ -1 +0,0 @@ -{% raw %}{% endraw %} \ No newline at end of file diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/base.html b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/base.html deleted file mode 100644 index 6a0e6e9d..00000000 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/base.html +++ /dev/null @@ -1,5 +0,0 @@ -{% raw %}{% extends "base.html" %} - -{% block title %}django-avatar{% endblock %} -{% block content %}{% endblock %} -{% endraw %} \ No newline at end of file diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/change.html b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/change.html deleted file mode 100644 index 0acbc703..00000000 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/change.html +++ /dev/null @@ -1,29 +0,0 @@ -{% raw %}{% extends "avatar/base.html" %} -{% load i18n avatar_tags %} -{% load url from future %} - -{% block content %} -
-
-
-

{% trans "Your current avatar: " %}

- {% avatar user %} - {% if not avatars %} -

{% trans "You haven't uploaded an avatar yet. Please upload one now." %}

- {% else %} -
-
    - {{ primary_avatar_form.as_ul }} -
-

{% csrf_token %}

-
- {% endif %} -
- {{ upload_avatar_form.as_p }} -

{% csrf_token %}

-
-
-
-
-{% endblock %} -{% endraw %} \ No newline at end of file diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/confirm_delete.html b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/confirm_delete.html deleted file mode 100644 index 896b6ea4..00000000 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/avatar/confirm_delete.html +++ /dev/null @@ -1,25 +0,0 @@ -{% raw %}{% extends "avatar/base.html" %} -{% load i18n %} -{% load url from future %} - -{% block content %} -
-
-
-

{% trans "Please select the avatars that you would like to delete." %}

- {% if not avatars %} - {% url 'avatar_change' as avatar_change_url %} -

{% blocktrans %}You have no avatars to delete. Please upload one now.{% endblocktrans %}

- {% else %} -
-
    - {{ delete_avatar_form.as_ul }} -
-

{% csrf_token %}

-
- {% endif %} -
-
-
-{% endblock %} -{% endraw %} \ No newline at end of file diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/users/user_detail.html b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/users/user_detail.html index 508c845a..62ef2805 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/users/user_detail.html +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/users/user_detail.html @@ -1,5 +1,4 @@ {% raw %}{% extends "base.html" %} -{% load avatar_tags %} {% load static %} {% block title %}User: {{ object.username }}{% endblock %} @@ -15,13 +14,12 @@ {% if object == request.user %} - +
@@ -32,4 +30,4 @@
{% endblock content %} -{% endraw %} \ No newline at end of file +{% endraw %} diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/users/user_list.html b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/users/user_list.html index f7c03fd7..a37b70c1 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/users/user_list.html +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/users/user_list.html @@ -1,13 +1,11 @@ {% raw %}{% extends "base.html" %} {% load static %}{% load i18n %} -{% load avatar_tags %} - {% block title %}Members{% endblock %} {% block content %}
- +

Users

@@ -19,15 +17,15 @@
-{% endblock content %}{% endraw %} \ No newline at end of file +{% endblock content %}{% endraw %} From 93bcc9d928fba36d43b90b369713107667db2fbc Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Date: Sun, 26 Apr 2015 16:55:37 +0530 Subject: [PATCH 5/5] Mention that only postgres 9.0+ is support --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 4855d647..caddff6f 100644 --- a/README.rst +++ b/README.rst @@ -46,7 +46,7 @@ Constraints ----------- * Only maintained 3rd party libraries are used. -* PostgreSQL everywhere +* PostgreSQL everywhere (9.0+) * Environment variables for configuration (This won't work with Apache/mod_wsgi).