在使用Django和MySQL进行开发时的步骤是什么?

首先

每次创建Django web应用程序开发环境时,我都会记录下常用的步骤,以便随时查阅。参考书籍:《动手学习!Python Django 开发入门》,作者:大高隆。适合初学者想要开始使用Django进行应用程序开发。

由于这只是一个普通人个人开发的笔记,所以可能存在一些安全问题。请自行承担责任。

创建一个项目

django-admin startproject <プロジェクト名>

只需要一个选项,用中文将以下内容进行释义:

编辑settings.py文件。

使用.env文件来处理环境变量。

将在settings.py中的SECRET_KEY字符串和MySQL的用户名、密码等写入名为.env的环境变量文件中。

SECRET_KEY='django-insecure-0123456789qwertyuiop'

MYSQL_DATABASE='mysql'
MYSQL_USER='mysql'
MYSQL_PASSWORD='mysql'
MYSQL_HOST='mysql'

读取环境变量

从这里开始是在settings.py上的操作。
将在.env文件中写的环境变量加载到settings.py中的env变量上。

import os, environ

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

env = environ.Env()
env.read_env(os.path.join(BASE_DIR,'.env'))

以env方式加载密钥,否则会受到Github的指责。

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env('SECRET_KEY')

将ALLOWED_HOSTS全部允许。在正式环境等可能需要注意。

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['*']

将数据库更改为MySQL。

使用env读取环境变量,并安全地记录密码等信息。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': env('MYSQL_DATABASE'),  # データベース名
        'USER': env('MYSQL_USER'),
        'PASSWORD': env('MYSQL_PASSWORD'),
        'HOST': env('MYSQL_HOST'),
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',  # 文字コード
        },
    }
}

将语言和时区设置为日本格式。

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

USE_I18N = True

USE_TZ = True

设定日志记录

引用:大高隆动态学习!Python Django开发入门。

# ロギング設定
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,

    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
        'game': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    },

    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'dev',
        },
    },

    'formatters': {
        'dev': {
            'format': '\t'.join([
                '%(asctime)s',
                '[%(levelname)s]',
                '%(pathname)s(Line:%(lineno)d)',
                '%(message)s',
            ])
        },
    }
}

设置静态文件的位置。

static是指图像和CSS。JavaScript等也可能在这里放置。

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

设定会话变量

使用会话变量可以在不同的模板(html文件)和视图之间传递变量。会话变量是一个字典类型(关联数组)。

# セッションをキャッシュで保存する
SESSION_ENGINE = "django.contrib.sessions.backends.cache"

# 画面を閉じたらセッションが失効する
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

SESSION_SAVE_EVERY_REQUEST = True

使用 Docker Compose 进行环境配置

為了使開發成員能夠輕鬆地建立環境,我們將使用docker-compose來進行環境構築。

创建Dockerfile

我直接引用了这个句子。

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

创建docker-compose.yml文件

我会建立Django + MySQL的环境。我在命令和卷中写下了字符编码为utf8mb4的相关信息,但如果不需要的话,请酌情删除。同时,我也会在这里读取以.env文件中所写的环境变量,例如${MYSQL_USER}。

version: "3"

services:
  db:
    image: mysql
    restart: always
    hostname: mysql
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    # データベースの文字コードを utf8mb4 に変更
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./my.cnf:/etc/my.cnf

  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

创建requirements.txt

请写下所需的任意库。

Django
mysqlclient
django-environ
requests
numpy
matplotlib
environ
pandas

创建my.cnf配置文件(可选)。

如果在MySQL中有字符编码问题的话,请尝试按照以下方式编辑或创建my.cnf文件。

[mysqld]
character-set-server=utf8mb4

skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
default-character-set=utf8mb4
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

添加应用程序

在添加应用程序之后,我将记录要做的事情。这次我将以”game”作为应用程序名称来进行。

python manage.py startapp <アプリケーション名>

在设置中添加应用程序

在<项目名称>/settings.py中描述添加的应用程序。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'game.apps.GameConfig',  # こちらを追加
]

设置路由

首先,在<项目名称>下的urls.py文件中按以下方式进行记录。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('game.urls'))  # 追加したアプリケーションを記述
]

接下来,在game(应用程序名称)目录下创建urls.py文件,并按以下方式进行描述。

from django.urls import path

from . import views


app_name = 'game'
urlpatterns = [
    path('', views.IndexView.as_view(), name="index")
]

创建视图

在views.py文件中,我们编写服务器端希望执行的操作。我认为这就像是大脑一样的地方。

from django.views import generic


class IndexView(generic.TemplateView):
    template_name = "index.html"

创建模板

在游戏(应用程序名)下创建一个名为templates的目录,并将模板(html文件)放置在其中。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>トップページ</title>
</head>

<body>
    hello world!
<body
</html>

尝试运行 docker-compose。

首先进行构建。

docker-compose build

接下来我会点赞。

docker-compose up

如果出现问题,可以考虑先启动数据库容器,然后再启动 Web 部分的容器。

docker-compose up -d db
docker-compose up

希望一切顺利的话,你应该会在终端上看到 http://0.0.0.0:8000/,请将其粘贴到浏览器中。如果在浏览器中粘贴后不起作用,请尝试 http://localhost:8000/。如果浏览器上显示”hello world”,那就证明成功了。

最后

我正在找工作(2022/11/13),但我认为只要有一点点网络应用开发经验,就能在实习选拔等方面获得很大的优势。请在您有空的时候一定要尝试一下。

广告
将在 10 秒后关闭
bannerAds