美多商城前台(Django)之学习笔记

创建远程仓库

创建虚拟环境

创建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的staticurl语法

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包存放所有子应用:

cdapps目录创建子应用

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

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值