用Django制作Web应用程序

这是我在Qiita的首次投稿。之前在一次实习中使用Django开发了一个Web应用程序,但从零开始创建是我从未做过的,所以我尝试了服务器启动。

前提

    • Python 3.5.1

 

    • pyenv

 

    • pyenv-virtualenv

 

    • Django 1.11

 

    • macOS & Homebrew

 

    MySQL

环境建设

我們將建立開發環境。

$ 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

创建Django应用程序

目录结构如以下所示。
我在调查后发现,常见的做法是创建一个项目名称/项目名称的文件夹,并在其中添加本地应用程序。

.
├── README.md
├── manage.py
├── libs
│   └── # pip installでライブラリが入る
├── requirements.txt
├── templates
│   ├── common
│   │   └── _base.html
│   └── home
│       └── index.html
└── django-sample
    ├── settings.py
    ├── urls.py
    └── views.py

听说有一个可以自动生成的命令,但这次我们手动进行了。

$ mkdir django-sample
$ cd django-sample
$ pyenv local django-sample-3.5.1

将所需的库写入requirements.txt文件中。

django==1.11
django-extensions==1.7.8
mysqlclient==1.3.10

虽然你可以普通地进行安装,但我希望像Rails的vendor/bundle一样将其放在项目的根目录下,所以我将其安装在./libs文件夹下。

$ pip install -r requirements.txt -t libs

编辑manage.py文件。

import os
import sys

# ./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)

我将编辑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'
            ]
        }
    }
]

我要进行数据库迁移。

$ python manage.py migate

定义一个View类。

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()

编辑在浏览器中显示的模板。

{% extends 'common/_base.html' %}

{% block content %}
  <h1>Hello World!!</h1>
{% endblock %}
<!DOCTYPE html>
<html>
<head>
  <title>django-sample</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>

最后设置路由。

from django.conf import settings
from django.conf.urls import include, url

from . import views


urlpatterns = [
  # /
  url(r'^$', views.home_view)
]

启动服务器并访问 http://localhost:8000。

$ python manage.py runserver

最后

这次的代码已经上传到了Github上。
https://github.com/yukidallas/django-sample

下一次发布计划将是有关登录功能(邮件注册、Twitter登录)的实施。

广告
将在 10 秒后关闭
bannerAds