Fixing conflicts:

{{cookiecutter.repo_name}}/README.rst
And updating the install.rst to have the info about the `runserver_plus` cmd
This commit is contained in:
Felipe Arruda Pontes 2015-03-01 11:22:44 -03:00
commit d499f71b9d
19 changed files with 120 additions and 65 deletions

View File

@ -5,3 +5,8 @@ before_install:
script: script:
- pep8 --ignore E201,E202 --max-line-length=120 --exclude='migrations' . - pep8 --ignore E201,E202 --max-line-length=120 --exclude='migrations' .
notifications:
email:
on_success: never
on_failure: never

View File

@ -13,7 +13,7 @@ Tom Offermann
Lyla Fischer Lyla Fischer
Taylor Baldwin Taylor Baldwin
Chris Curvey (@ccurvey) Chris Curvey (@ccurvey)
Fábio C. Barrionuevo da Luz (@luzfcb) Fábio C. Barrionuevo da Luz (@luzfcb)*
Saurabh Kumar (gh: theskumar / @_theskumar)* Saurabh Kumar (gh: theskumar / @_theskumar)*
Ashley Camba Ashley Camba
Yaroslav Halchenko Yaroslav Halchenko
@ -31,6 +31,12 @@ Alberto Sanchez / @alb3rto
Eyad Al Sibai / @eyadsibai Eyad Al Sibai / @eyadsibai
Chris Franklin Chris Franklin
Benjamin Abel Benjamin Abel
Felipe Arruda / @arruda
Matt Warren / @mfwarren
Martin Blech
Andy Rose
Andrew Mikhnevich / @zcho
Kevin Ndung'u / @kevgathuku
* Possesses commit rights * Possesses commit rights

View File

@ -6,13 +6,18 @@ cookiecutter-django
:alt: Requirements Status :alt: Requirements Status
.. image:: https://travis-ci.org/pydanny/cookiecutter-django.svg?branch=master .. image:: https://travis-ci.org/pydanny/cookiecutter-django.svg?branch=master
:target: https://travis-ci.org/pydanny/cookiecutter-django.svg?branch=master :target: https://travis-ci.org/pydanny/cookiecutter-django?branch=master
:alt: Build Status :alt: Build Status
A cookiecutter_ template for Django. A cookiecutter_ template for Django.
.. _cookiecutter: https://github.com/audreyr/cookiecutter .. _cookiecutter: https://github.com/audreyr/cookiecutter
Please update your version of cookiecutter!
--------------------------------------------
This cookiecutter template uses features that exists only in cookiecutter 0.9.0 or higher.
Features Features
--------- ---------
@ -72,13 +77,15 @@ It prompts you for questions. Answer them::
remote: Total 550 (delta 283), reused 479 (delta 222) remote: Total 550 (delta 283), reused 479 (delta 222)
Receiving objects: 100% (550/550), 127.66 KiB | 58 KiB/s, done. Receiving objects: 100% (550/550), 127.66 KiB | 58 KiB/s, done.
Resolving deltas: 100% (283/283), done. Resolving deltas: 100% (283/283), done.
project_name (default is "project_name")? Reddit Clone project_name (default is "project_name is the title of the project.")? Reddit Clone
repo_name (default is "repo_name")? redditclone repo_name (default is "reddit_clone")? reddit
author_name (default is "Your Name")? Daniel Greenfeld author_name (default is "Your Name")? Daniel Greenfeld
email (default is "Your email")? pydanny@gmail.com email (default is "Your email")? pydanny@gmail.com
description (default is "A short description of the project.")? A reddit clone. description (default is "A short description of the project.")? A reddit clone.
year (default is "Current year")? 2014 domain_name (default is "example.com")? myreddit.com
domain_name (default is "Domain name")? version (default is "0.1.0")? 0.0.1
now (default is "2015/01/13")? 2015/01/16
year (default is "2015")?
Enter the project and take a look around:: Enter the project and take a look around::
@ -114,7 +121,7 @@ First make sure to create and activate a virtualenv_, then open a terminal at th
Then, create a PostgreSQL database and add the database configuration using the ``dj-database-url`` app pattern: ``postgres://db_owner:password@dbserver_ip:port/db_name`` either: Then, create a PostgreSQL database and add the database configuration using the ``dj-database-url`` app pattern: ``postgres://db_owner:password@dbserver_ip:port/db_name`` either:
* in the ``config.common.py`` setting file, * in the ``config.common.py`` setting file,
* or in the env variable ``DATABASE_URL`` * or in the env variable ``DATABASE_URL``

View File

@ -1,12 +1,13 @@
{ {
"project_name": "project_name is the title of the project.", "project_name": "project_name",
"repo_name":"repo_name is used for describing the directory structure.", "repo_name": "{{ cookiecutter.project_name|replace(' ', '_') }}",
"author_name": "Your Name", "author_name": "Your Name",
"github_username": "your GitHub username", "github_username": "your GitHub username",
"email": "Your email", "email": "Your email",
"description": "A short description of the project.", "description": "A short description of the project.",
"year": "2014",
"domain_name": "example.com", "domain_name": "example.com",
"version": "0.1.0", "version": "0.1.0",
"now": "2014/06/15" "timezone": "UTC",
"now": "2015/01/13",
"year": "{{ cookiecutter.now[:4] }}"
} }

View File

@ -28,5 +28,5 @@ nosetests.xml
# npm # npm
node_modules/ node_modules/
# Campass # Compass
.sass-cache .sass-cache

View File

@ -18,8 +18,7 @@ Getting up and running
Just follow the steps described in https://{{ cookiecutter.repo_name }}.readthedocs.org/en/latest/install.html and you'll get yourself an up and running local development environment. Just follow the steps described in https://{{ cookiecutter.repo_name }}.readthedocs.org/en/latest/install.html and you'll get yourself an up and running local development environment.
Deployment Deployment
------------ ------------
The instructions for deployment can be found at https://{{ cookiecutter.repo_name }}.readthedocs.org/en/latest/deploy.html The instructions for deployment can be found at https://{{ cookiecutter.repo_name }}.readthedocs.org/en/latest/deploy.html

View File

@ -42,7 +42,7 @@ master_doc = 'index'
# General information about the project. # General information about the project.
project = u'{{ cookiecutter.project_name }}' project = u'{{ cookiecutter.project_name }}'
copyright = u'{{ cookiecutter.year }}, {{ cookiecutter.author_name }}' copyright = u"{{ cookiecutter.year }}, {{ cookiecutter.author_name }}"
# The version info for the project you're documenting, acts as replacement for # The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the # |version| and |release|, also used in various other places throughout the
@ -187,7 +187,7 @@ latex_documents = [
('index', ('index',
'{{ cookiecutter.repo_name }}.tex', '{{ cookiecutter.repo_name }}.tex',
u'{{ cookiecutter.project_name }} Documentation', u'{{ cookiecutter.project_name }} Documentation',
u'{{ cookiecutter.author_name }}', 'manual'), u"{{ cookiecutter.author_name }}", 'manual'),
] ]
# The name of an image file (relative to this directory) to place at the top of # The name of an image file (relative to this directory) to place at the top of
@ -217,7 +217,7 @@ latex_documents = [
# (source start file, name, description, authors, manual section). # (source start file, name, description, authors, manual section).
man_pages = [ man_pages = [
('index', '{{ cookiecutter.repo_name }}', u'{{ cookiecutter.project_name }} Documentation', ('index', '{{ cookiecutter.repo_name }}', u'{{ cookiecutter.project_name }} Documentation',
[u'{{ cookiecutter.author_name }}'], 1) [u"{{ cookiecutter.author_name }}"], 1)
] ]
# If true, show URL addresses after external links. # If true, show URL addresses after external links.
@ -231,7 +231,7 @@ man_pages = [
# dir menu entry, description, category) # dir menu entry, description, category)
texinfo_documents = [ texinfo_documents = [
('index', '{{ cookiecutter.repo_name }}', u'{{ cookiecutter.project_name }} Documentation', ('index', '{{ cookiecutter.repo_name }}', u'{{ cookiecutter.project_name }} Documentation',
u'{{ cookiecutter.author_name }}', '{{ cookiecutter.project_name }}', u"{{ cookiecutter.author_name }}", '{{ cookiecutter.project_name }}',
'{{ cookiecutter.description }}', 'Miscellaneous'), '{{ cookiecutter.description }}', 'Miscellaneous'),
] ]

View File

@ -16,9 +16,9 @@ First make sure to create and activate a virtualenv_, then open a terminal at th
.. _virtualenv: http://docs.python-guide.org/en/latest/dev/virtualenvs/ .. _virtualenv: http://docs.python-guide.org/en/latest/dev/virtualenvs/
You can now run the usual Django ``runserver`` command (replace ``yourapp`` with the name of the directory containing the Django project):: You can now run the ``runserver_plus`` command::
$ python yourapp/manage.py runserver $ python {{cookiecutter.repo_name}}/manage.py runserver_plus
The base app will run but you'll need to carry out a few steps to make the sign-up and login forms work. These are currently detailed in `issue #39`_. The base app will run but you'll need to carry out a few steps to make the sign-up and login forms work. These are currently detailed in `issue #39`_.

View File

@ -1,5 +1,5 @@
# This file is here because many Platforms as a Service look for # This file is here because many Platforms as a Service look for
# requirements.txt in the root directory of a project. # requirements.txt in the root directory of a project.
pylibmc==1.2.3 pylibmc==1.4.1
django-heroku-memcacheify==0.7 django-heroku-memcacheify==0.8
-r requirements/production.txt -r requirements/production.txt

View File

@ -1,38 +1,38 @@
# Bleeding edge Django # Bleeding edge Django
django==1.7.1 django==1.7.5
# Configuration # Configuration
django-configurations==0.8 django-configurations==0.8
django-secure==1.0 django-secure==1.0.1
django-cache-url==0.8.0 django-cache-url==0.8.0
dj-database-url==0.3.0 dj-database-url==0.3.0
# Forms # Forms
django-braces==1.4.0 django-braces==1.4.0
django-crispy-forms==1.4.0 django-crispy-forms==1.4.0
django-floppyforms==1.2.0 django-floppyforms==1.3.0
# Models # Models
django-model-utils==2.2 django-model-utils==2.2
# images # Images
Pillow==2.6.0 Pillow==2.7.0
# For user registration, either via email or social # For user registration, either via email or social
# Well-built with regular release cycles! # Well-built with regular release cycles!
django-allauth==0.18.0 django-allauth==0.19.1
# For the persistance stores # For the persistence stores
psycopg2==2.5.4 psycopg2==2.6
# Unicode slugification # Unicode slugification
unicode-slugify==0.1.1 unicode-slugify==0.1.3
django-autoslug==1.7.2 django-autoslug==1.7.2
# Useful things # Useful things
django-avatar==2.0 django-avatar==2.0
# Time zones support # Time zones support
pytz==2014.7 pytz==2014.10
# Your custom requirements go here # Your custom requirements go here

View File

@ -2,6 +2,8 @@
-r base.txt -r base.txt
coverage==3.7.1 coverage==3.7.1
Sphinx Sphinx
django-extensions==1.5.0
Werkzeug==0.10.1
# django-debug-toolbar that works with Django 1.5+ # django-debug-toolbar that works with Django 1.5+
django-debug-toolbar==1.2.1 django-debug-toolbar==1.2.2

View File

@ -2,8 +2,8 @@
# production that isn't in development. # production that isn't in development.
-r base.txt -r base.txt
gunicorn==19.1.1 gunicorn==19.2.1
django-storages==1.1.8 django-storages==1.1.8
Collectfast==0.2.1 Collectfast==0.2.1
gevent==1.0.1 gevent==1.0.1
boto==2.32.1 boto==2.36.0

View File

@ -1,4 +1,4 @@
# Test dependencies go here. # Test dependencies go here.
-r base.txt -r base.txt
coverage==3.7.1 coverage==3.7.1
flake8==2.2.3 flake8==2.3.0

View File

@ -16,14 +16,14 @@ version = {{ cookiecutter.repo_name }}.__version__
setup( setup(
name='{{ cookiecutter.project_name }}', name='{{ cookiecutter.project_name }}',
version=version, version=version,
author='{{ cookiecutter.full_name }}', author="{{ cookiecutter.author_name }}",
author_email='{{ cookiecutter.email }}', author_email='{{ cookiecutter.email }}',
packages=[ packages=[
'{{ cookiecutter.repo_name }}', '{{ cookiecutter.repo_name }}',
], ],
include_package_data=True, include_package_data=True,
install_requires=[ install_requires=[
'Django>=1.6.5', 'Django>=1.7.4',
], ],
zip_safe=False, zip_safe=False,
scripts=['{{ cookiecutter.repo_name }}/manage.py'], scripts=['{{ cookiecutter.repo_name }}/manage.py'],

View File

@ -57,7 +57,6 @@ class Common(Configuration):
# MIDDLEWARE CONFIGURATION # MIDDLEWARE CONFIGURATION
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
# Make sure djangosecure.middleware.SecurityMiddleware is listed first # Make sure djangosecure.middleware.SecurityMiddleware is listed first
'djangosecure.middleware.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
@ -85,7 +84,7 @@ class Common(Configuration):
# See: https://docs.djangoproject.com/en/dev/ref/settings/#secret-key # See: https://docs.djangoproject.com/en/dev/ref/settings/#secret-key
# Note: This key only used for development and testing. # Note: This key only used for development and testing.
# In production, this is changed to a values.SecretValue() setting # In production, this is changed to a values.SecretValue() setting
SECRET_KEY = "CHANGEME!!!" SECRET_KEY = 'CHANGEME!!!'
# END SECRET CONFIGURATION # END SECRET CONFIGURATION
# FIXTURE CONFIGURATION # FIXTURE CONFIGURATION
@ -126,8 +125,12 @@ class Common(Configuration):
# END CACHING # END CACHING
# GENERAL CONFIGURATION # GENERAL CONFIGURATION
# See: https://docs.djangoproject.com/en/dev/ref/settings/#time-zone
TIME_ZONE = 'America/Los_Angeles' # Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = '{{ cookiecutter.timezone }}'
# See: https://docs.djangoproject.com/en/dev/ref/settings/#language-code # See: https://docs.djangoproject.com/en/dev/ref/settings/#language-code
LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'en-us'
@ -149,8 +152,8 @@ class Common(Configuration):
# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors # See: https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors
TEMPLATE_CONTEXT_PROCESSORS = ( TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth', 'django.contrib.auth.context_processors.auth',
"allauth.account.context_processors.account", 'allauth.account.context_processors.account',
"allauth.socialaccount.context_processors.socialaccount", 'allauth.socialaccount.context_processors.socialaccount',
'django.core.context_processors.debug', 'django.core.context_processors.debug',
'django.core.context_processors.i18n', 'django.core.context_processors.i18n',
'django.core.context_processors.media', 'django.core.context_processors.media',
@ -211,25 +214,25 @@ class Common(Configuration):
# AUTHENTICATION CONFIGURATION # AUTHENTICATION CONFIGURATION
AUTHENTICATION_BACKENDS = ( AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend", 'django.contrib.auth.backends.ModelBackend',
"allauth.account.auth_backends.AuthenticationBackend", 'allauth.account.auth_backends.AuthenticationBackend',
) )
# Some really nice defaults # Some really nice defaults
ACCOUNT_AUTHENTICATION_METHOD = "username" ACCOUNT_AUTHENTICATION_METHOD = 'username'
ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory" ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
# END AUTHENTICATION CONFIGURATION # END AUTHENTICATION CONFIGURATION
# Custom user app defaults # Custom user app defaults
# Select the correct user model # Select the correct user model
AUTH_USER_MODEL = "users.User" AUTH_USER_MODEL = 'users.User'
LOGIN_REDIRECT_URL = "users:redirect" LOGIN_REDIRECT_URL = 'users:redirect'
LOGIN_URL = "account_login" LOGIN_URL = 'account_login'
# END Custom user app defaults # END Custom user app defaults
# SLUGLIFIER # SLUGLIFIER
AUTOSLUG_SLUGIFY_FUNCTION = "slugify.slugify" AUTOSLUG_SLUGIFY_FUNCTION = 'slugify.slugify'
# END SLUGLIFIER # END SLUGLIFIER
# LOGGING CONFIGURATION # LOGGING CONFIGURATION
@ -264,4 +267,8 @@ class Common(Configuration):
} }
# END LOGGING CONFIGURATION # END LOGGING CONFIGURATION
@classmethod
def post_setup(cls):
cls.DATABASES['default']['ATOMIC_REQUESTS'] = True
# Your common stuff: Below this line define 3rd party library settings # Your common stuff: Below this line define 3rd party library settings

View File

@ -22,16 +22,16 @@ class Local(Common):
# END INSTALLED_APPS # END INSTALLED_APPS
# Mail settings # Mail settings
EMAIL_HOST = "localhost" EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025 EMAIL_PORT = 1025
EMAIL_BACKEND = values.Value('django.core.mail.backends.console.EmailBackend') EMAIL_BACKEND = values.Value('django.core.mail.backends.console.EmailBackend')
# End mail settings # End mail settings
# django-debug-toolbar # django-debug-toolbar
MIDDLEWARE_CLASSES = Common.MIDDLEWARE_CLASSES + ('debug_toolbar.middleware.DebugToolbarMiddleware',) MIDDLEWARE_CLASSES = Common.MIDDLEWARE_CLASSES + ('debug_toolbar.middleware.DebugToolbarMiddleware',)
INSTALLED_APPS += ('debug_toolbar',) INSTALLED_APPS += ('debug_toolbar', 'django_extensions',)
INTERNAL_IPS = ('127.0.0.1',) INTERNAL_IPS = ('127.0.0.1', '10.0.2.2',)
DEBUG_TOOLBAR_CONFIG = { DEBUG_TOOLBAR_CONFIG = {
'DISABLE_PANELS': [ 'DISABLE_PANELS': [
@ -41,4 +41,4 @@ class Local(Common):
} }
# end django-debug-toolbar # end django-debug-toolbar
# Your local stuff: Below this line define 3rd party libary settings # Your local stuff: Below this line define 3rd party library settings

View File

@ -4,7 +4,7 @@ Production Configurations
- Use djangosecure - Use djangosecure
- Use Amazon's S3 for storing static files and uploaded media - Use Amazon's S3 for storing static files and uploaded media
- Use sendgird to sendemails - Use sendgrid to send emails
- Use MEMCACHIER on Heroku - Use MEMCACHIER on Heroku
''' '''
from configurations import values from configurations import values
@ -37,6 +37,15 @@ class Production(Common):
# django-secure # django-secure
INSTALLED_APPS += ("djangosecure", ) INSTALLED_APPS += ("djangosecure", )
# MIDDLEWARE CONFIGURATION
MIDDLEWARE_CLASSES = (
# Make sure djangosecure.middleware.SecurityMiddleware is listed first
'djangosecure.middleware.SecurityMiddleware',
)
MIDDLEWARE_CLASSES += Common.MIDDLEWARE_CLASSES
# END MIDDLEWARE CONFIGURATION
# set this to 60 seconds and then to 518400 when you can prove it works # set this to 60 seconds and then to 518400 when you can prove it works
SECURE_HSTS_SECONDS = 60 SECURE_HSTS_SECONDS = 60
SECURE_HSTS_INCLUDE_SUBDOMAINS = values.BooleanValue(True) SECURE_HSTS_INCLUDE_SUBDOMAINS = values.BooleanValue(True)
@ -74,13 +83,13 @@ class Production(Common):
# see: https://github.com/antonagestam/collectfast # see: https://github.com/antonagestam/collectfast
AWS_PRELOAD_METADATA = True AWS_PRELOAD_METADATA = True
INSTALLED_APPS += ("collectfast", ) INSTALLED_APPS += ('collectfast', )
# AWS cache settings, don't change unless you know what you're doing: # AWS cache settings, don't change unless you know what you're doing:
AWS_EXPIREY = 60 * 60 * 24 * 7 AWS_EXPIRY = 60 * 60 * 24 * 7
AWS_HEADERS = { AWS_HEADERS = {
'Cache-Control': 'max-age=%d, s-maxage=%d, must-revalidate' % ( 'Cache-Control': 'max-age=%d, s-maxage=%d, must-revalidate' % (
AWS_EXPIREY, AWS_EXPIREY) AWS_EXPIRY, AWS_EXPIRY)
} }
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url # See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url
@ -119,4 +128,4 @@ class Production(Common):
CACHES = values.CacheURLValue(default="memcached://127.0.0.1:11211") CACHES = values.CacheURLValue(default="memcached://127.0.0.1:11211")
# END CACHING # END CACHING
# Your production stuff: Below this line define 3rd party libary settings # Your production stuff: Below this line define 3rd party library settings

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django import forms
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
@ -6,9 +7,27 @@ from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
from .models import User from .models import User
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = User
class MyUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = User
def clean_username(self):
username = self.cleaned_data["username"]
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate_username'])
class UserAdmin(AuthUserAdmin): class UserAdmin(AuthUserAdmin):
create_form_class = UserCreationForm form = MyUserChangeForm
update_form_class = UserChangeForm add_form = MyUserCreationForm
admin.site.register(User, UserAdmin) admin.site.register(User, UserAdmin)

View File

@ -1,5 +1,5 @@
""" """
WSGI config for {{ project_name }} project. WSGI config for {{ cookiecutter.project_name }} project.
This module contains the WSGI application used by Django's development server This module contains the WSGI application used by Django's development server
and any production WSGI deployments. It should expose a module-level variable and any production WSGI deployments. It should expose a module-level variable
@ -25,7 +25,7 @@ os.environ.setdefault("DJANGO_CONFIGURATION", "Production")
# This application object is used by any WSGI server configured to use this # This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION # file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here. # setting points here.
from configurations.wsgi import get_wsgi_application from configurations.wsgi import get_wsgi_application # noqa
application = get_wsgi_application() application = get_wsgi_application()
# Apply WSGI middleware here. # Apply WSGI middleware here.