Faites Django avec CodeStar (Python3.8, Django2.1.15)

Créer un nouveau projet

Sélectionnez Python (Django) dans CodeStar et créez un projet. Le référentiel utilise CodeCommit.

image.png

Le tableau de bord CodeStar s'affiche et, lorsque vous êtes prêt, vous pouvez voir la page Django à partir du point de terminaison de votre application.

Créez un utilisateur IAM et attachez AWSCodeCommitFullAccess. image.png

Générez les informations d'identification et les informations d'identification AWS CodeCommit HTTPS Git à partir de l'onglet Informations d'identification et enregistrez votre nom d'utilisateur et votre mot de passe. Vous en aurez besoin lorsque vous clonerez l'URL de CodeCommit. image.png

Ajoutez l'utilisateur IAM que vous avez créé à l'équipe de projet CodeStar. image.png

Modifier le projet

Créez un environnement Python 3.8 avec Anaconda.

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

Copiez l'URL de CodeCommit et clonez-la avec git.

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

Installez les bibliothèques requises.

$ pip install -r requirements.txt

Ajoutez .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/

Modifiez une partie de 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

Après l'installation de la bibliothèque externe (par exemple les demandes)

$ pip install requests

Modifiez également common.txt.

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

Créer la première 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> Bienvenue dans 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>

 <! - Contenu principal->
    <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' # Changer de manière appropriée

 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'

Déployer le projet

Consultez la page.

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

image.png

Créez une branche de fonctionnalité et validez.

$ git branch feature 
$ git checkout feature
$ git status 
$ git add .
 $ git commit -m "première page"
$ git push origin feature

Créez une branche de développement avec CodeCommit. image.png

image.png

Fusionner d'une fonctionnalité à un développement. image.png

image.png

De même, fusionnez de développer à master. Ensuite, CodePipline démarrera et le déploiera sans autorisation.

image.png

Le déploiement a réussi. image.png

Jetons un coup d'œil à la page après un déploiement réussi. image.png

[Configuré pour démarrer Django au redémarrage d'EC2](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).

Je vous remercie pour votre travail acharné. Vous pouvez maintenant créer rapidement une application Django!

Postscript

Lecture de fichiers statiques et définition de la production (Debug = False)

Collectez des fichiers statiques.

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

settings.py Définissez le mode DEBUG sur False.

DEBUG = False

urls.py Ajoutez un paramètre de dossier statique.

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

Ajouter une image

Ajoutez n'importe quelle image à helloworld / static / helloworld / img / et static / helloworld / img /. Si vous ajoutez également css etc., il est nécessaire d'unifier le dossier statique et ci-dessous. Il peut ne pas être lu correctement lorsque DEBUG = False.

Exemple d'affichage d'image (base.html)

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

Recommended Posts

Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Faites Houdini avec Python3! !! !!
Python3 + Django ~ Mac ~ avec Apache
Premiers pas avec Python Django (1)
Premiers pas avec Python Django (4)
Premiers pas avec Python Django (3)
Effectuer le cryptage AES avec DJango
Introduction à Python Django (6)
Premiers pas avec Python Django (5)
Pour faire une récursion avec Python2
Que faire avec la sortie de PYTHON?
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Faisons du scraping d'images avec Python
Python | Ce que vous pouvez faire avec Python
Comment effectuer un traitement arithmétique avec le modèle Django
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Tutoriel Python Django (2)
Grattage avec Python
Python avec Go
Internationalisation avec Django
Twilio avec Python
Laissez Heroku faire le traitement en arrière-plan avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
Tutoriel Python Django (8)
Comment faire un test de sac avec python
python commence par ()
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Tutoriel Python Django (6)
avec syntaxe (Python)
CRUD avec Django
Bingo avec python
Zundokokiyoshi avec python
Faisons la manipulation des données MySQL avec Python
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
Tutoriel Python Django (3)
Excel avec Python
Micro-ordinateur avec Python
Tutoriel Python Django (4)
Cast avec python
Je veux le faire avec Python lambda Django, mais je vais m'arrêter
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Comment faire un traitement parallèle multicœur avec python
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Django avec Python Tools 2.2 pour Visual Studio (PTVS 2.2)
Liste de tâches simple créée avec Python + Django
Débutants en Python accro à Django
Créez rapidement un environnement Python Django avec IntelliJ
Web scraping avec Python (prévisions météo)
Web scraping avec Python (cours de l'action)
Utilisez Python / Django avec Windows Azure Cloud Service!
Communication série avec Python
Authentifier Google avec Django