创建远程仓库
创建虚拟环境
创建Django项目
django-admin startproject 项目名称
启动项目(设置快捷键)
python manage.py runserver
在运行\调试配置中添加形参(runserver或者runserver 端口号)
配置开发环境和生产环境
settings.py文件同级创建settings包。
将settings.py移动到settings包中,并改名dev.py(开发环境),并修改manage.py文件:os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_mall.settings.dev')
在settings包中新建文件prod.py(生产配置文件),并修改wsgi.py文件:os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_mall.settings.prod')
配置jinja2模板引擎:
主模块文件夹下创建templates文件夹(存放模板文件)。
修改配置文件中的TEMPLATES
TEMPLATES = [ { 'BACKEND': 'django.template.backends.jinja2.Jinja2', # 配置jinja2模板引擎 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 配置模板文件加载路径 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], # 补充jinja2模板引擎环境 'environment': 'meiduo_mall.utils.jinja2_env.jinja2_environment' }, }, ]
在utils包中创建jinja2_env.py文件
创建环境对象,通过环境对象自定义jinja2的static和url语法
from jinja2 import Environment from django.urls import reverse from django.contrib.staticfiles.storage import staticfiles_storage def jinja2_environment(**options): """ jinja2环境 :param options: :return: """ # 创建环境对象 env = Environment(**options) # 自定义语法:{{ static('静态文件相对路径') }} {{ url('路由的命名空间') }} env.globals.update({ 'static': staticfiles_storage.url, # 获取静态文件的前缀 'url': reverse # 反向解析 }) return env
创建工具包(存放所有的工具)
主模块文件夹下创建utils包(存放各种自定义的工具文件)。
配置MySQL数据库:
在配置中修改DATABASES:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'HOST': '127.0.0.1', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'mysql', # 数据库用户密码 'NAME': 'meiduo', # 数据库名字 } }
并在工程的同名子目录的__init__.py文件中,添加如下代码:
from pymysql import install_as_MySQLdb install_as_MySQLdb()
生成运行迁移文件:
python manage.py migrate
配置redis数据库:
django-redis 中文文档 — Django-Redis 4.7.0 文档
在配置文件中添加(分库存储内容):
# 配置redis数据库,并且分库存储 CACHES = { "default": { # 默认 "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "session": { # session "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, } # 单独存储session添加一下代码 SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "session"
配置工程日志:
在工程目录下创建logs目录,并在配置文件中添加一下代码:
# 配置工程日志 LOGGING = { "version": 1, # 版本,默认1初始版本 "disable_existing_loggers": False, # 是否禁用已经存在的日志器 'formatters': { # 日志信息显示的格式 'verbose': { # 详细样式 "format": "{levelname} -- {asctime} -- {module} -- {process:d} -- {thread:d} -- {lineno} -- {message}", "style": "{", # levelname日志等级 asctime时间 module模块 lineno行数 message日志信息 }, 'simple': { # 简单样式 'format': "{levelname} --- {module} --- {lineno} --- {message}", "style": "{", }, }, 'filters': { # 对日志进行过滤 'require_debug_true': { # django在debug模式下才输出日志 '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { # 日志处理方法 'console': { # 向终端中输出日志 'level': 'INFO', # 等级 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple', # 样式 }, 'file': { # 向文件中输出日志 'level': 'INFO', # 等级 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs/meiduo.log'), # 日志文件的位置 'maxBytes': 300 * 1024 * 1024, # 每个日志文件的大小 300M 'backupCount': 10, # 最多创建10个文件(按需求更改) 'formatter': 'verbose', # 样式 }, }, 'loggers': { # 日志器 'django': { # 定义了一个名为django的日志器 'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志 'propagate': True, # 是否继续传递日志信息 'level': 'INFO', # 日志器接收的最低日志级别 }, }, }
准备静态文件:
将静态文件放在工程的同名子目录下:
在配置文件中添加一下代码:
# 指定加载静态文件的路由前缀 STATIC_URL = 'static/' # 配置静态文件加载路径 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
创建用户子应用:
在工程的同名子目录下创建apps包存放所有子应用:
cd到apps目录下创建子应用:
python ../../manage.py startapp 应用名 python ../../manage.py startapp users
在配置文件中追加导包路径:
# 查看导包路径 # print(sys.path) # 追加导包路径到apps,因为子应用的apps.py文件中只指向users sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
在配置文件中的INSTALLED_APPS处注册子应用:(可以sys.path查看导包路径)
# 'meiduo_mall.apps.users', # 注册用户模块 'users', # 注册用户模块
编写用户视图函数:
在users子应用下的views.py试图文件中编写类视图:
from django.views import View class RegisterView(View): """用户注册""" def get(self, request): """提供用户注册页面""" return render(request, 'register.html')
定义路由信息:
总路由中导入include方法并添加路由指向子路由,并且设置命名空间:
from django.urls import include urlpatterns = [ path('admin/', admin.site.urls), path('', include(('users.urls', 'users'), namespace='users')), # 如果想使用命名空间的话include第一个参数必须是元组,将路由和命名空间放在元组中。 ]
在子应用中创建名叫urls.py的路由文件并添加路由:
from django.urls import path from . import views urlpatterns = [ # 用户注册: reverse(users:register) == '/register/' path('register/', views.RegisterView.as_view(), name="register"), ]
注意:
django2.X后使用: from django.urls import path # 使用path模块用字符串定义路由 django1.X使用: from django.conf.urls import url # 使用url模块用正则定义路由
自定义用户模型类(继承自django自带的用户模型类):
在users子应用的models.py文件中编写自定义模型类:
from django.contrib.auth.models import AbstractUser class User(AbstractUser): """自定义用户模型类,继承自django自带的用户模型类""" mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号') class Meta: db_table = 'tb_users' # 自定义表名 verbose_name = '用户' verbose_name_plural = verbose_name def __str__(self): return self.username # 调试的时候查看返回的结果
在配置文件中指定自定义的用户模型类:
# 指定自定义的用户模型类:值的语法 ==> '子应用.用户模型类' AUTH_USER_MODEL = 'users.User'
生成\运行迁移文件:
python manage.py makemigrations # 生成迁移文件
python manage.py migrate # 运行迁移文件1
1
1
1
1
1
1