Do Django with CodeStar (Python3.8, Django2.1.15)

Create a new project

Select Python (Django) in CodeStar and create a project. The repository uses CodeCommit.

image.png

The CodeStar dashboard is displayed, and when you're ready, you can see the Django page from your application's endpoint.

Create an IAM user and attach AWSCodeCommitFullAccess. image.png

Generate AWS CodeCommit HTTPS Git credentials and credentials from the Credentials tab and save your username and password. You will need it when cloning the URL from CodeCommit. image.png

Add the IAM user you created to your CodeStar project team. image.png

Edit project

Create a Python 3.8 environment with Anaconda.

$ conda create -n py38 python=3.8
$ conda activate py38

Copy the URL from CodeCommit and clone it with git.

$ git clone https://username:[email protected]/v1/repos/gachimoto-gtfs
$ cd gachimoto-gtfs

Install the required libraries.

$ pip install -r requirements.txt

Add .gitignore.

 Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

 C extensions
*.so

 Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

 PyInstaller
  Usually these files are written by a python script from a template
  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

 Installer logs
pip-log.txt
pip-delete-this-directory.txt

 Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/

 Translations
*.mo
*.pot

 Django stuff:
*.log
local_settings.py

 Flask stuff:
instance/
.webassets-cache

 Scrapy stuff:
.scrapy

 Sphinx documentation
docs/_build/

 PyBuilder
target/

 Jupyter Notebook
.ipynb_checkpoints

 pyenv
.python-version

 celery beat schedule file
celerybeat-schedule

 SageMath parsed files
*.sage.py

 dotenv
.env

 virtualenv
.venv
venv/
ENV/

 Spyder project settings
.spyderproject
.spyproject

 Rope project settings
.ropeproject

 mkdocs documentation
/site

 mypy
.mypy_cache/


.idea/
db.sqlite3
migrations/

Edit part of buildspec.yml.

commands:
  # Install dependencies needed for running tests
  - pip install -r requirements/common.txt
 - python manage.py makemigrations helloworld
 - python manage.py migrate
 - python manage.py collectstatic --noinput

After installing the external library (eg requests)

$ pip install requests

Also edit common.txt.

 dependencies common to all environments
Django==2.1.15
requests==2.22.0

Create the first page

helloworld/views.py

 helloworld/views.py
from django.shortcuts import render
from django.views import generic
from django.views.generic import TemplateView
from django.views.generic import ListView

class Top(generic.TemplateView):
    template_name = 'top.html'

helloworld/urls.py

 helloworld/urls.py
from django.urls import path
from django.conf.urls import url
from django.conf.urls.static import static
from helloworld import views

urlpatterns = [
    # url(r'^$', views.HomePageView.as_view()),
    path('', views.Top.as_view(), name='top'),
]

helloworld/tests.py

from django.test import TestCase, RequestFactory

helloworld/templates/top.html

{% extends "base.html" %}
{% block content %}
 <p> Welcome to gachimoto-gtfs </ p>
{% endblock %}

helloworld/templates/base.html

<!doctype html>
{% load staticfiles %}
<html lang="ja">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css"
          integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
    <title>gachimoto gtfs api</title>
  </head>
  <body>
 <!-Navibar->
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
      <a class="navbar-brand" href="{% url 'top' %}">G</a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav mr-auto">
        </ul>
      </div>
    </nav>

 <!-Main content->
    <div class="container mt-3">
      {% block content %}{% endblock %}
    </div>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
            integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
            crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"
            integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ"
            crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"
            integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm"
            crossorigin="anonymous"></script>
  </body>
</html>

ec2django/urls.py

""" ec2django URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('helloworld.urls')),
]

ec2django/settings.py

"""
Django settings for ec2django project.

Generated by 'django-admin startproject' using Django 2.1.14.

For more information on this file, see
https://docs.djangoproject.com/en/2.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.1/ref/settings/
"""

import os

 Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


 Quick-start development settings - unsuitable for production
 See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/

 SECURITY WARNING: keep the secret key used in production secret!
 SECRET_KEY ='CHANGE_ME' # Change appropriately

 SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True # bool( os.environ.get('DJANGO_DEBUG', False) )

ALLOWED_HOSTS = ['*']

 Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'helloworld.apps.HelloworldConfig', # 'helloworld',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'ec2django.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR,'templates')
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'ec2django.wsgi.application'


 Database
 https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


 Password validation
 https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


 Internationalization
 https://docs.djangoproject.com/en/2.1/topics/i18n/

LANGUAGE_CODE = 'ja' # 'en-us'

TIME_ZONE = 'Asia/Tokyo' # 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


 Static files (CSS, JavaScript, Images)
 https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = 'static'

Deploy project

Check the page.

$ python manage.py migrate
$ python manage.py runserver

image.png

Create a feature branch and commit.

$ git branch feature 
$ git checkout feature
$ git status 
$ git add .
 $ git commit -m "first page"
$ git push origin feature

Create a develop branch with CodeCommit. image.png

image.png

Merge from feature to develop. image.png

image.png

Similarly, merge from develop to master. Then CodePipline will start and deploy it without permission.

image.png

The deployment was successful. image.png

Let's take a look at the page when the deployment is successful. image.png

[Set Django to start when EC2 restarts](https://qiita.com/SatoshiGachiFujimoto/items/0f7929d7fe7e30b9413c#ec2%E5%86%8D%E8%B5%B7%E5%8B%95%E6% 99% 82% E3% 81% ABdjango% E3% 82% 92% E8% B5% B7% E5% 8B% 95% E3% 81% 99% E3% 82% 8B% E3% 82% 88% E3% 81% 86% E3% 81% AB% E8% A8% AD% E5% AE% 9A).

Thank you for your hard work. Now you can quickly create a Django app!

Postscript

Reading static files and setting production (Debug = False)

Collect static files.

$ python manage.py collectstatic --noinput
$ python manage.py runserver

settings.py Set DEBUG mode to False.

DEBUG = False

urls.py Add static folder settings.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('helloworld.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Add image

Add arbitrary images to helloworld / static / helloworld / img / and static / helloworld / img /. If you also add css etc., it is necessary to unify the static folder and below. It may not be read correctly when DEBUG = False.

Image display example (base.html)

<a class="navbar-brand" href="{% url 'top' %}"><img src="{% static 'helloworld/img/G.svg' %}" width="11%" /></a>

Recommended Posts

Do Django with CodeStar (Python3.6.8, Django2.2.9)
Do Django with CodeStar (Python3.8, Django2.1.15)
Do Houdini with Python3! !! !!
Python3 + Django ~ Mac ~ with Apache
Getting Started with Python Django (1)
Getting Started with Python Django (4)
Getting Started with Python Django (3)
Do AES encryption with DJango
Getting Started with Python Django (6)
Getting Started with Python Django (5)
To do tail recursion with Python2
What to do with PYTHON release?
Run python3 Django1.9 with mod_wsgi (deploy)
Let's do image scraping with Python
Python | What you can do with Python
How to do arithmetic with Django template
FizzBuzz with Python3
Scraping with Python
Statistics with python
Python Django Tutorial (2)
Scraping with Python
Python with Go
Internationalization with django
Twilio with Python
Let Heroku do background processing with Python
Integrate with Python
Play with 2016-Python
AES256 with python
Tested with Python
Python Django Tutorial (8)
How to do portmanteau test with python
python starts with ()
CentOS 6.4 with Python 2.7.3 with Apache with mod_wsgi and Django
Python Django Tutorial (6)
with syntax (Python)
CRUD with Django
Bingo with python
Zundokokiyoshi with python
Let's do MySQL data manipulation with Python
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django tutorial tutorial
Python Django Tutorial (3)
Excel with Python
Microcomputer with Python
Python Django Tutorial (4)
Cast with python
I want to do it with Python lambda Django, but I will stop
[AWS] Create a Python Lambda environment with CodeStar and do Hello World
How to do multi-core parallel processing with python
[Python] Build a Django development environment with Docker
Create Nginx + uWSGI + Python (Django) environment with docker
Django with Python Tools 2.2 for Visual Studio (PTVS 2.2)
A simple to-do list created with Python + Django
What Python beginners got hooked on with Django
Quickly build a Python Django environment with IntelliJ
Let's do web scraping with Python (weather forecast)
Let's do web scraping with Python (stock price)
Use Python / Django with Windows Azure Cloud Service!
Serial communication with Python
Authenticate Google with Django