C'est le premier message de Qiita. J'avais l'habitude de développer une application web en utilisant Django en stage, mais je ne l'avais jamais créée à partir de zéro, j'ai donc essayé de démarrer le serveur.
Créez un environnement de développement.
terminal
$ brew install pyenv pyenv-virtualenv mysql
$ pyenv install 3.5.1
$ pyenv global 3.5.1
$ pyenv virtualenv 3.5.1 django-sample-3.5.1
$ mysql.server start
La structure des répertoires est la suivante. Lorsque je l'ai recherché, il y avait de nombreuses configurations dans lesquelles j'ai créé un dossier avec le nom du projet / nom du projet et ajouté des applications locales en dessous.
django-sample
.
├── README.md
├── manage.py
├── libs
│ └── #La bibliothèque est entrée par pip install
├── requirements.txt
├── templates
│ ├── common
│ │ └── _base.html
│ └── home
│ └── index.html
└── django-sample
├── settings.py
├── urls.py
└── views.py
Il semble y avoir une commande qui le génère automatiquement, mais cette fois je l'ai fait manuellement.
terminal
$ mkdir django-sample
$ cd django-sample
$ pyenv local django-sample-3.5.1
Écrivez les bibliothèques requises dans requirements.txt.
requirements.txt
django==1.11
django-extensions==1.7.8
mysqlclient==1.3.10
Vous pouvez l'installer normalement, mais je voulais le mettre sous le projet comme Rails vendor / bundle, alors installez-le sous ./libs.
terminal
$ pip install -r requirements.txt -t libs
Modifiez manage.py.
manage.py
import os
import sys
# ./Passer le chemin des libs
sys.path.append(os.path.join(os.path.dirname(__file__), 'libs'))
settings_module_name = os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django-sample.settings')
if __name__ == '__main__':
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
Modifiez settings.py. Le nom d'utilisateur, le mot de passe, etc. de la base de données sont définis dans les variables d'environnement. La création de bases de données, d'utilisateurs, etc. est omise. Depuis que j'ai essayé la fonction de connexion, etc., elle peut contenir des paramètres qui ne sont pas nécessaires cette fois.
django-sample/settings.py
import os
ROOT_PATH = os.path.dirname(os.path.dirname(__file__))
DEBUG = os.getenv('DJANGO_SAMPLE_BEBUG')
ALLOWED_HOSTS = [
'localhost'
]
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.messages',
'django.contrib.sessions',
'django.contrib.staticfiles',
'django.contrib.sites',
'django_extensions'
]
MIDDLEWARE_CLASSES = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware'
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': os.getenv('DJANGO_SAMPLE_DATABASE_HOST'),
'NAME': os.getenv('DJANGO_SAMPLE_DATABASE_NAME'),
'USER': os.getenv('DJANGO_SAMPLE_DATABASE_USER'),
'PASSWORD': os.getenv('DJANGO_SAMPLE_DATABASE_PASSWORD')
}
}
SESSION_COOKIE_NAME = 'djangosample'
SECRET_KEY = os.getenv('DJANGO_SAMPLE_SECRET_KEY')
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_SESSION_NAME = 'csrf'
CSRF_COOKIE_SECURE = True
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
ROOT_URLCONF = 'django-sample.urls'
LOGIN_REDIRECT_URL = '/'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(ROOT_PATH, 'static')
]
SITE_ID = 1
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(ROOT_PATH, 'templates')
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
'django.template.context_processors.i18n',
'django.template.context_processors.request',
'django.template.context_processors.static'
]
}
}
]
Migrez la base de données.
terminal
$ python manage.py migate
Définissez la classe View.
django-sample/views.py
from django.views.generic import TemplateView
class HomeView(TemplateView):
template_name = 'home/index.html'
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
return context
home_view = HomeView.as_view()
Modifiez le modèle affiché dans le navigateur.
templates/home/index.html
{% extends 'common/_base.html' %}
{% block content %}
<h1>Hello World!!</h1>
{% endblock %}
templates/common/_base.html
<!DOCTYPE html>
<html>
<head>
<title>django-sample</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
Enfin, définissez le routage.
django-sample/urls.py
from django.conf import settings
from django.conf.urls import include, url
from . import views
urlpatterns = [
# /
url(r'^$', views.home_view)
]
Lancez le serveur et accédez à [http: // localhost: 8000](http: // localhost: 8000).
terminal
$ python manage.py runserver
Ce code est également affiché sur Github. https://github.com/yukidallas/django-sample
La prochaine fois, je publierai sur la mise en œuvre de la fonction de connexion (enregistrement de courrier, connexion Twitter).