在使用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),但我认为只要有一点点网络应用开发经验,就能在实习选拔等方面获得很大的优势。请在您有空的时候一定要尝试一下。