├── myapp ├── __init__.py ├── migrations │ ├── __init__.py │ ├── 0001_initial.py │ └── 0002_auto__add_weather.py ├── views.py ├── tests.py └── models.py ├── .gitignore ├── django_project ├── __init__.py ├── urls.py ├── wsgi.py └── settings.py ├── requirements.txt ├── README.md ├── manage.py └── fabfile.py /myapp/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | .*swp -------------------------------------------------------------------------------- /django_project/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /myapp/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /myapp/views.py: -------------------------------------------------------------------------------- 1 | # Create your views here. 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Django==1.5.1 2 | MySQL-python==1.2.4 3 | South==0.7.6 4 | wsgiref==0.1.2 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Test django project to user with production server 2 | ================================================== 3 | 4 | Nothing to see here...move on... -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /myapp/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import datetime 3 | from south.db import db 4 | from south.v2 import SchemaMigration 5 | from django.db import models 6 | 7 | 8 | class Migration(SchemaMigration): 9 | 10 | def forwards(self, orm): 11 | pass 12 | 13 | def backwards(self, orm): 14 | pass 15 | 16 | models = { 17 | 18 | } 19 | 20 | complete_apps = ['myapp'] -------------------------------------------------------------------------------- /myapp/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /fabfile.py: -------------------------------------------------------------------------------- 1 | from __future__ import with_statement 2 | from fabric.api import local, settings, abort, run, cd, lcd 3 | from fabric.contrib.console import confirm 4 | 5 | def prepare_deployment(branch_name): 6 | local('python manage.py test django_project') 7 | local('git add -p && git commit') 8 | 9 | def deploy(): 10 | code_dir = '/var/www/vhosts/dev/django_project/' 11 | with cd(code_dir): 12 | 13 | run('git pull') 14 | run('python manage.py migrate myapp') 15 | run('python manage.py test myapp') 16 | run('/etc/init.d/httpd restart') -------------------------------------------------------------------------------- /myapp/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | class Weather(models.Model): 4 | date = models.CharField(max_length=20) 5 | nzmax = models.CharField(max_length=10) 6 | nzmin = models.CharField(max_length=10) 7 | ukmax = models.CharField(max_length=10) 8 | ukmin = models.CharField(max_length=10) 9 | nzhistmax = models.CharField(max_length=10) 10 | nzhistmin = models.CharField(max_length=10) 11 | ukhistmax = models.CharField(max_length=10) 12 | ukhistmin = models.CharField(max_length=10) 13 | 14 | def __unicode__(self): 15 | return self.date 16 | -------------------------------------------------------------------------------- /django_project/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, include, url 2 | 3 | # Uncomment the next two lines to enable the admin: 4 | # from django.contrib import admin 5 | # admin.autodiscover() 6 | 7 | urlpatterns = patterns('', 8 | # Examples: 9 | # url(r'^$', 'django_project.views.home', name='home'), 10 | # url(r'^django_project/', include('django_project.foo.urls')), 11 | 12 | # Uncomment the admin/doc line below to enable admin documentation: 13 | # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 14 | 15 | # Uncomment the next line to enable the admin: 16 | # url(r'^admin/', include(admin.site.urls)), 17 | ) 18 | -------------------------------------------------------------------------------- /django_project/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for django_project project. 3 | 4 | This module contains the WSGI application used by Django's development server 5 | and any production WSGI deployments. It should expose a module-level variable 6 | named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover 7 | this application via the ``WSGI_APPLICATION`` setting. 8 | 9 | Usually you will have the standard Django WSGI application here, but it also 10 | might make sense to replace the whole Django WSGI application with a custom one 11 | that later delegates to the Django one. For example, you could introduce WSGI 12 | middleware here, or combine a Django application with an application of another 13 | framework. 14 | 15 | """ 16 | import os 17 | 18 | # We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks 19 | # if running multiple sites in the same mod_wsgi process. To fix this, use 20 | # mod_wsgi daemon mode with each site in its own daemon process, or use 21 | # os.environ["DJANGO_SETTINGS_MODULE"] = "django_project.settings" 22 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings") 23 | 24 | # This application object is used by any WSGI server configured to use this 25 | # file. This includes Django's development server, if the WSGI_APPLICATION 26 | # setting points here. 27 | from django.core.wsgi import get_wsgi_application 28 | application = get_wsgi_application() 29 | 30 | # Apply WSGI middleware here. 31 | # from helloworld.wsgi import HelloWorldApplication 32 | # application = HelloWorldApplication(application) 33 | -------------------------------------------------------------------------------- /myapp/migrations/0002_auto__add_weather.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import datetime 3 | from south.db import db 4 | from south.v2 import SchemaMigration 5 | from django.db import models 6 | 7 | 8 | class Migration(SchemaMigration): 9 | 10 | def forwards(self, orm): 11 | # Adding model 'Weather' 12 | db.create_table(u'myapp_weather', ( 13 | (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), 14 | ('date', self.gf('django.db.models.fields.CharField')(max_length=20)), 15 | ('nzmax', self.gf('django.db.models.fields.CharField')(max_length=10)), 16 | ('nzmin', self.gf('django.db.models.fields.CharField')(max_length=10)), 17 | ('ukmax', self.gf('django.db.models.fields.CharField')(max_length=10)), 18 | ('ukmin', self.gf('django.db.models.fields.CharField')(max_length=10)), 19 | ('nzhistmax', self.gf('django.db.models.fields.CharField')(max_length=10)), 20 | ('nzhistmin', self.gf('django.db.models.fields.CharField')(max_length=10)), 21 | ('ukhistmax', self.gf('django.db.models.fields.CharField')(max_length=10)), 22 | ('ukhistmin', self.gf('django.db.models.fields.CharField')(max_length=10)), 23 | )) 24 | db.send_create_signal(u'myapp', ['Weather']) 25 | 26 | 27 | def backwards(self, orm): 28 | # Deleting model 'Weather' 29 | db.delete_table(u'myapp_weather') 30 | 31 | 32 | models = { 33 | u'myapp.weather': { 34 | 'Meta': {'object_name': 'Weather'}, 35 | 'date': ('django.db.models.fields.CharField', [], {'max_length': '20'}), 36 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 37 | 'nzhistmax': ('django.db.models.fields.CharField', [], {'max_length': '10'}), 38 | 'nzhistmin': ('django.db.models.fields.CharField', [], {'max_length': '10'}), 39 | 'nzmax': ('django.db.models.fields.CharField', [], {'max_length': '10'}), 40 | 'nzmin': ('django.db.models.fields.CharField', [], {'max_length': '10'}), 41 | 'ukhistmax': ('django.db.models.fields.CharField', [], {'max_length': '10'}), 42 | 'ukhistmin': ('django.db.models.fields.CharField', [], {'max_length': '10'}), 43 | 'ukmax': ('django.db.models.fields.CharField', [], {'max_length': '10'}), 44 | 'ukmin': ('django.db.models.fields.CharField', [], {'max_length': '10'}) 45 | } 46 | } 47 | 48 | complete_apps = ['myapp'] -------------------------------------------------------------------------------- /django_project/settings.py: -------------------------------------------------------------------------------- 1 | # Django settings for django_project project. 2 | 3 | DEBUG = True 4 | TEMPLATE_DEBUG = DEBUG 5 | 6 | ADMINS = ( 7 | # ('Your Name', 'your_email@example.com'), 8 | ) 9 | 10 | MANAGERS = ADMINS 11 | 12 | DATABASES = { 13 | 'default': { 14 | 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 15 | 'NAME': 'django_project', # Or path to database file if using sqlite3. 16 | # The following settings are not used with sqlite3: 17 | 'USER': 'john', 18 | 'PASSWORD': 'djohn', 19 | 'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. 20 | 'PORT': '', # Set to empty string for default. 21 | } 22 | } 23 | 24 | # Hosts/domain names that are valid for this site; required if DEBUG is False 25 | # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts 26 | ALLOWED_HOSTS = [] 27 | 28 | # Local time zone for this installation. Choices can be found here: 29 | # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name 30 | # although not all choices may be available on all operating systems. 31 | # In a Windows environment this must be set to your system time zone. 32 | TIME_ZONE = 'America/Chicago' 33 | 34 | # Language code for this installation. All choices can be found here: 35 | # http://www.i18nguy.com/unicode/language-identifiers.html 36 | LANGUAGE_CODE = 'en-us' 37 | 38 | SITE_ID = 1 39 | 40 | # If you set this to False, Django will make some optimizations so as not 41 | # to load the internationalization machinery. 42 | USE_I18N = True 43 | 44 | # If you set this to False, Django will not format dates, numbers and 45 | # calendars according to the current locale. 46 | USE_L10N = True 47 | 48 | # If you set this to False, Django will not use timezone-aware datetimes. 49 | USE_TZ = True 50 | 51 | # Absolute filesystem path to the directory that will hold user-uploaded files. 52 | # Example: "/var/www/example.com/media/" 53 | MEDIA_ROOT = '' 54 | 55 | # URL that handles the media served from MEDIA_ROOT. Make sure to use a 56 | # trailing slash. 57 | # Examples: "http://example.com/media/", "http://media.example.com/" 58 | MEDIA_URL = '' 59 | 60 | # Absolute path to the directory static files should be collected to. 61 | # Don't put anything in this directory yourself; store your static files 62 | # in apps' "static/" subdirectories and in STATICFILES_DIRS. 63 | # Example: "/var/www/example.com/static/" 64 | STATIC_ROOT = '' 65 | 66 | # URL prefix for static files. 67 | # Example: "http://example.com/static/", "http://static.example.com/" 68 | STATIC_URL = '/static/' 69 | 70 | # Additional locations of static files 71 | STATICFILES_DIRS = ( 72 | # Put strings here, like "/home/html/static" or "C:/www/django/static". 73 | # Always use forward slashes, even on Windows. 74 | # Don't forget to use absolute paths, not relative paths. 75 | ) 76 | 77 | # List of finder classes that know how to find static files in 78 | # various locations. 79 | STATICFILES_FINDERS = ( 80 | 'django.contrib.staticfiles.finders.FileSystemFinder', 81 | 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 82 | # 'django.contrib.staticfiles.finders.DefaultStorageFinder', 83 | ) 84 | 85 | # Make this unique, and don't share it with anybody. 86 | SECRET_KEY = 'vvuoh!l0x6%z82z+p&qchjz8ovh^2v83%a$yc9wrx%-8=4p)pk' 87 | 88 | # List of callables that know how to import templates from various sources. 89 | TEMPLATE_LOADERS = ( 90 | 'django.template.loaders.filesystem.Loader', 91 | 'django.template.loaders.app_directories.Loader', 92 | # 'django.template.loaders.eggs.Loader', 93 | ) 94 | 95 | MIDDLEWARE_CLASSES = ( 96 | 'django.middleware.common.CommonMiddleware', 97 | 'django.contrib.sessions.middleware.SessionMiddleware', 98 | 'django.middleware.csrf.CsrfViewMiddleware', 99 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 100 | 'django.contrib.messages.middleware.MessageMiddleware', 101 | # Uncomment the next line for simple clickjacking protection: 102 | # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 103 | ) 104 | 105 | ROOT_URLCONF = 'django_project.urls' 106 | 107 | # Python dotted path to the WSGI application used by Django's runserver. 108 | WSGI_APPLICATION = 'django_project.wsgi.application' 109 | 110 | TEMPLATE_DIRS = ( 111 | # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 112 | # Always use forward slashes, even on Windows. 113 | # Don't forget to use absolute paths, not relative paths. 114 | ) 115 | 116 | INSTALLED_APPS = ( 117 | 'django.contrib.auth', 118 | 'django.contrib.contenttypes', 119 | 'django.contrib.sessions', 120 | 'django.contrib.sites', 121 | 'django.contrib.messages', 122 | 'django.contrib.staticfiles', 123 | 'south', 124 | 'myapp', 125 | # Uncomment the next line to enable the admin: 126 | # 'django.contrib.admin', 127 | # Uncomment the next line to enable admin documentation: 128 | # 'django.contrib.admindocs', 129 | ) 130 | 131 | # A sample logging configuration. The only tangible logging 132 | # performed by this configuration is to send an email to 133 | # the site admins on every HTTP 500 error when DEBUG=False. 134 | # See http://docs.djangoproject.com/en/dev/topics/logging for 135 | # more details on how to customize your logging configuration. 136 | LOGGING = { 137 | 'version': 1, 138 | 'disable_existing_loggers': False, 139 | 'filters': { 140 | 'require_debug_false': { 141 | '()': 'django.utils.log.RequireDebugFalse' 142 | } 143 | }, 144 | 'handlers': { 145 | 'mail_admins': { 146 | 'level': 'ERROR', 147 | 'filters': ['require_debug_false'], 148 | 'class': 'django.utils.log.AdminEmailHandler' 149 | } 150 | }, 151 | 'loggers': { 152 | 'django.request': { 153 | 'handlers': ['mail_admins'], 154 | 'level': 'ERROR', 155 | 'propagate': True, 156 | }, 157 | } 158 | } 159 | --------------------------------------------------------------------------------