Dies ist Qiitas erster Beitrag. Früher habe ich eine Webanwendung mit Django als Praktikum entwickelt, aber ich hatte sie nie von Grund auf neu erstellt, also habe ich versucht, den Server zu starten.
Erstellen Sie eine Entwicklungsumgebung.
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
Die Verzeichnisstruktur ist wie folgt. Als ich es nachgeschlagen habe, gab es viele Konfigurationen, in denen ich einen Ordner mit dem Projektnamen / Projektnamen erstellt und lokale Apps darunter hinzugefügt habe.
django-sample
.
├── README.md
├── manage.py
├── libs
│ └── #Die Bibliothek wird durch Pip-Installation eingegeben
├── requirements.txt
├── templates
│ ├── common
│ │ └── _base.html
│ └── home
│ └── index.html
└── django-sample
├── settings.py
├── urls.py
└── views.py
Es scheint einen Befehl zu geben, der ihn automatisch generiert, aber diesmal habe ich ihn manuell ausgeführt.
terminal
$ mkdir django-sample
$ cd django-sample
$ pyenv local django-sample-3.5.1
Schreiben Sie die erforderlichen Bibliotheken in die Datei require.txt.
requirements.txt
django==1.11
django-extensions==1.7.8
mysqlclient==1.3.10
Sie können es normal installieren, aber ich wollte es wie Rails Vendor / Bundle unter das Projekt stellen, also installieren Sie es unter ./libs.
terminal
$ pip install -r requirements.txt -t libs
Bearbeiten Sie manage.py.
manage.py
import os
import sys
# ./Übergeben Sie den libs-Pfad
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)
Bearbeiten Sie settings.py. Der Datenbankbenutzername, das Kennwort usw. werden in den Umgebungsvariablen festgelegt. Das Erstellen von Datenbanken, Benutzern usw. entfällt. Da ich die Anmeldefunktion usw. ausprobiert habe, enthält sie möglicherweise Einstellungen, die diesmal nicht erforderlich sind.
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'
]
}
}
]
Migrieren Sie die Datenbank.
terminal
$ python manage.py migate
Definieren Sie die View-Klasse.
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()
Bearbeiten Sie die im Browser angezeigte Vorlage.
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>
Stellen Sie abschließend das Routing ein.
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)
]
Starten Sie den Server und greifen Sie auf [http: // localhost: 8000](http: // localhost: 8000) zu.
terminal
$ python manage.py runserver
Dieser Code wird auch auf Github veröffentlicht. https://github.com/yukidallas/django-sample
Nächstes Mal werde ich über die Implementierung der Login-Funktion (Mail-Registrierung, Twitter-Login) berichten.
Recommended Posts