Django框架学习笔记 - 创建项目+数据库配置+自定义日志配置
文章目录
环境要求
PyCharm 2023.1.3
python >= 3.5
Django == 4.2.2
Django版本选择
查看官网描述
安装Django
创建虚拟环境
-
方法一:使用virtualenv
# 安装virtualenv pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple # 创建一个名为django_venv的虚拟环境,放在D:\xxx目录下 # --python指定Python解释器,不指定会使用系统默认的python virtualenv --python=python3.11 D:\xxx\django_venv
-
方法二:使用PyCharm
打开设置File -> Settiings
创建成功后在指定位置生成目录django_venv
激活环境
进入虚拟环境目录,执行.\Scripts\activate
安装Django框架
pip install Django==4.2.2 -i https://mirrors.aliyun.com/pypi/simple/
退出环境
退出虚拟环境:.\Scripts\deactivate
创建项目
一、使用PyCharm创建项目
创建新项目:File -> New Project
项目创建成功!
二、命令行创建项目
切换到你的项目路径下,激活虚拟环境
创建项目:django-admin startproject xxx(项目名称)
创建完成后在指定位置生成djangoProject
创建子应用:python manage.py startapp xxx(应用名称)
目录结构说明
djangoProject 项目名称
├─app 子应用名称
│ ├─migrations 存放数据库迁移文件
│ │ └─ __init__.py
│ ├─ __init__.py
│ ├─ admin.py 网站的后台管理配置
│ ├─ apps.py 当前子应用的相关信息配置
│ ├─ models.py 数据库模型类
│ ├─ tests.py 测试文件
│ └─ views.py Web应用视图函数
├─djangoProject 与项目同名,主要存放项目级别的配置
│ ├─ __init__.py
│ ├─ asgi.py ASGI接口
│ ├─ settings.py 配置文件
│ ├─ urls.py 主路由
│ └─ wsgi.py WSGI接口
├─templates 存放html文件
└─ manage.py 管理项目的命令行工具
配置文件settings.py
基础配置
# 允许远程客户端连接
ALLOWED_HOSTS = ['*']
# 安装的应用,自己定义的应用也要添加到这里
INSTALLED_APPS = [
...,
'app.apps.AppConfig', # 如果是命令行创建的子应用,需手动安装
]
# 语言编码
LANGUAGE_CODE = 'zh-hans'
# 时区
TIME_ZONE = 'Asia/Shanghai'
# 是否使用国际标准时间
USE_TZ = False
数据库配置
安装pymysql:pip install pymysql
配置setting.py中的DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 表示使用mysql数据库
'NAME': "django_db", # 数据库名称
'USER': "root", # 用户名
'PASSWORD': "123456", # 密码
'HOST': "127.0.0.1", # 数据库地址
'PORT': "3306", # 端口号
}
}
在djangoProject/__ init__.py文件中添加:
import pymysql
pymysql.install_as_MySQLdb()
让Django的ORM能以mysqldb的方式来调用PyMySQL
日志配置 - 分级别保存
按照我自己的习惯,根据不同级别输出到不同的文件,并以日期为文件名称存储。
创建目录:
djangoProject
└─logs
├─error
│ └─ 2023-01-01.log
├─info
└─warn
在setting.py文件中新增配置:
import logging
import time
# 日志配置
LOG_DIR = BASE_DIR / 'logs'
LOGGING = {
'version': 1,
'disable_existing_loggers': True, # 表示是否禁用所有的已经存在的日志配置
'formatters': { # 格式器-日志输出格式,根据自己的习惯自定义
'verbose': { # 详细
'format': '[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[line:%(lineno)d]-[%(process)d_%(thread)d]: %(message)s'
},
'standard': { # 标准
'format': '[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[line:%(lineno)d]: %(message)s'
},
},
'filters': { # 过滤器
'require_debug_false': { # 要求DEBUG=False时才记录
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': { # 要求DEBUG模式下才记录
'()': 'django.utils.log.RequireDebugTrue',
},
'info_filter': { # 记录<WARNING级别
'()': 'django.utils.log.CallbackFilter',
'callback': lambda record: record.levelno < logging.WARNING,
},
'warning_filter': { # 仅记录WARNING级别
'()': 'django.utils.log.CallbackFilter',
'callback': lambda record: record.levelno == logging.WARNING,
},
},
'handlers': { # 日志处理器
'console': { # 打印到控制台
'level': 'DEBUG', # DEBUG级别以上
'class': 'logging.StreamHandler',
'formatter': 'standard', # 标准格式输出
'filters': ['require_debug_true'], # 在DEBUG模式下才输出日志
},
'info': { # 输出Info日志到文件
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 根据文件大小自动切(不用TimedRotatingFileHandler是因为多进程不适用)
'formatter': 'standard',
'filters': ['info_filter'], # 由于level属性定义的是接收的最低级别,所以需要额外过滤高于INFO级别的日志
'filename': LOG_DIR / 'info' / '{}.log'.format(time.strftime('%Y-%m-%d')),
'maxBytes': 1024 * 1024 * 10, # 文件大小10M
'backupCount': 5, # 备份数
'encoding': 'utf-8',
},
'warning': { # 输出Warning日志到文件
'level': 'WARNING',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'standard',
'filters': ['warning_filter'],
'filename': LOG_DIR / 'warn' / '{}.log'.format(time.strftime('%Y-%m-%d')),
'maxBytes': 1024 * 1024 * 10,
'backupCount': 5,
'encoding': 'utf-8',
},
'error': { # 输出Error及以上级别日志到文件
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'standard',
'filename': LOG_DIR / 'error' / '{}.log'.format(time.strftime('%Y-%m-%d')),
'maxBytes': 1024 * 1024 * 10,
'backupCount': 5,
'encoding': 'utf-8',
},
},
'loggers': { # log记录器,配置之后就会对应的输出日志
'django': { # django本身默认的控制台输出,使用时logger = logging.getLogger('django')
'handlers': ['console', 'info', 'warning', 'error'],
'level': 'INFO', # 接收的最低级别
'propagate': True,
},
'django.request': { # 当发生request请求时
'handlers': ['console', 'warning', 'error'],
'level': 'WARNING',
'propagate': False, # False表示不传递给django
},
'django.db.backends': { # 当操作数据库时
'handlers': ['console', 'warning', 'error'],
'level': 'WARNING',
'propagate': False,
},
},
}
测试服务器启动
-
方法一:控制台输入命令:
python manage.py runserver [ip:port]
注:如果不指定端口号,默认8000
-
方法二:Tools -> Run manager.py Task,输入命令
runserver
-
方法三:配置启动项
记住manage.py中的DJANGO_SETTINGS_MODULE
打开浏览器,访问 http://127.0.0.1:9000/,出现以下页面表示成功!