• Django 工程搭建


    用pycharm打开含有.gitignore文件的文件夹

    在.gitignore里忽略 .idea 文件夹

    创建虚拟环境

    mkvirtualenv xxxx -p python3

    1.安装django

    pip install django == 1.11.11 指定版本

    2.创建工程

    进入命令行 在工程目录下 输入

    django-admin startproject xxx

    3.更换jinja2模板

    下载jinja2模块

    pip install jinja2

    替换django原来的模板

    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',
                ],
            },
        },
    ]

    在工程目录下再创建一个utils包 专门放工具 

    在utils里创建jinja2_env.py 并写入

    from jinja2 import Environment
    from django.contrib.staticfiles.storage import staticfiles_storage
    from django.urls import reverse
    
    
    def jinja2_environment(**options):
        env = Environment(**options)
        env.globals.update({
            'static': staticfiles_storage.url,
            'url': reverse,
        })
        return env
    
    
    """
    确保可以使用模板引擎中的{{ url('') }} {{ static('') }}这类语句 
    """

    再修改settings里的配置信息为

    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', 
            },
        },
    ]

    4.Mysql数据库配置

    新建数据库

    create database 一个库 charset=utf8;

    新建mysql用户

    create user 你的名字 identified by '你的密码';

    授权

    grant all on 一个库.* to '你的名字'@'%';

    刷新数据库权限

    flush privileges;

    在settings中配置数据库

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql', # 数据库引擎
            'HOST': '127.0.0.1', # 数据库主机
            'PORT': 3306, # 数据库端口
            'USER': '你的名字', # 数据库用户名
            'PASSWORD': '你的密码', # 数据库用户密码
            'NAME': '一个库' # 数据库名字
        },
    }

    可能出现的错误

    • Error loading MySQLdb module: No module named 'MySQLdb'.

    出现错误的原因:

    • Django中操作MySQL数据库需要驱动程序MySQLdb
    • 目前项目虚拟环境中没有驱动程序MySQLdb

    解决办法:

    • 安装PyMySQL扩展包
    • 因为MySQLdb只适用于Python2.x的版本,Python3.x的版本中使用PyMySQL替代MySQLdb

    1.安装驱动程序

    pip install PyMySQL

    2.在工程同名子目录的__init__.py文件中,添加如下代码:

    from pymysql import install_as_MySQLdb
    
    
    install_as_MySQLdb()

    5.Redis数据库配置

    安装redis

    pip install django-redis

    在settings中配置

    CACHES = {
        #0号库给default
    
        "default": { # 默认
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/0",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        },
        #1号库给session
    
        "session": { # session
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/1",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        },
    
    }
    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    SESSION_CACHE_ALIAS = "session"

    default:

    • 默认的Redis配置项,采用0号Redis库。

    session:

    • 状态保持的Redis配置项,采用1号Redis库。

    SESSION_ENGINE

    • 修改session存储机制使用Redis保存。

    SESSION_CACHE_ALIAS:

    • 使用名为"session"的Redis配置项存储session数据

    配置工程日志

    setting中配置

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,  # 是否禁用已经存在的日志器
        'formatters': {  # 日志信息显示的格式
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
            },
            'simple': {
                'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
            },
        },
        '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,
                'backupCount': 10,
                'formatter': 'verbose'
            },
        },
        'loggers': {  # 日志器
            'django': {  # 定义了一个名为django的日志器
                'handlers': ['console', 'file'],  # 可以同时向终端与文件中输出日志
                'propagate': True,  # 是否继续传递日志信息
                'level': 'INFO',  # 日志器接收的最低日志级别
            },
        }
    }

    创建日志器并使用

    import logging
    
    # 创建日志记录器
    logger = logging.getLogger('django')
    # 输出日志
    logger.debug('测试logging模块debug')
    logger.info('测试logging模块info')
    logger.error('测试logging模块error')

    注意:在logging文件夹下的xx.log文件在git中默认不上传 但同时空文件夹logging也不上传 如果我们需要上传logging 而不上传xx.log 则要在logging文件夹下创建一个文件名为 .gitkeep 的文件

    配置静态文件

    在settings中配置

    STATIC_URL = '/static/'    #指定访问静态文件的url

    # 配置静态文件加载路径 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

    static文件夹在与manage.py同级的工程目录下

    问题  日志器的使用

      静态文件无法访问

    两个问题都是由于本地pycharm与远程服务器的工程文件未完全同步导致的

  • 相关阅读:
    andriod获得textView的值设置textView的text
    Android 自动生成的R类
    andriod 启动日历
    ggplot2在一幅图上画两条曲线
    R语言中动态安装库
    Python中的动态类
    Python中将dict转换为kwargs
    Apache负载均衡
    Python codecs小Tips
    Matlab求三重积分
  • 原文地址:https://www.cnblogs.com/xujin247/p/11761705.html
Copyright © 2020-2023  润新知