四、Django设置相关

1、全局设置

setttings文件

import os
import sys

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
# 这里用到了python中一个神奇的变量"__file__", 这个变量可以获取到当前文件的路径(含文件名)
# 再来一个os.path.dirname()就是获得上一级目录
# "BASE_DIR"就是工程根目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 如果包含外部APP,Mark成Source Root后可能还需要添加如下配置,否则运行manage.py会报错No module named 'xx'
# "extraapps"是外部APP上级目录包(Mark成Source Root)
# sys.path.insert(0, os.path.join(BASE_DIR, 'extraapps'))

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/

# 产品密钥。创建Django项目时自动分配的产品密钥,请使用原自动分配的产品密钥替换此行!!
SECRET_KEY = 'ug4o-53gk-tuxn@@69g_jr8aqq%&e183kr=xw6reg7247&jam='

# 上线时必须将DEBUG设为False
DEBUG = True

# 可指定主机,若元素为'*',表示所有同一局域网内的网络均可访问
ALLOWED_HOSTS = ['localhost', '127.0.0.1']

# App加载
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'blog',                        # 我的APP
  
]

# 自定义的auth APP的User模型,继承抽象模型AbstractUser
# AUTH_USER_MODEL = 'appname.UserModelName'

# 自定义的用户登录验证类,继承ModelBackend类,重写authenticate()方法
# AUTHENTICATION_BACKENDS = ['apps.myuser.views.CustomBackend', ]

# 中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'firstapp.urls'  # 这里系统会自动生成,一般不需要修改。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

WSGI_APPLICATION = 'firstapp.wsgi.application'  # 这里需要据实修改,系统会自动生成。

# 数据库设置,默认为sqlite
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 用户验证
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

# 国际化
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'en-us'  # 中文简体是'zh-hans',Admin后台管理系统的页面语言随之改变

# 本地时间
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False  # 若使用了本地时间,必须设为False!!(默认值True)

# 邮箱服务配置
EMAIL_HOST = 'xxx.com.cn'  # 发送者邮箱服务器
EMAIL_PORT = 25
EMAIL_HOST_USER = ''  # 发送者用户名(邮箱地址)
EMAIL_HOST_PASSWORD = ''  # 发送者密码
EMAIL_USE_SSL = False

# 静态文件配置 (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

# 静态文件的访问,用于程序中,如{{static '静态文件目录下的子路径'}}
STATIC_URL = '/static/'

# 静态文件的公用目录,但不能与STATIC_ROOT冲突!
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

# 静态文件的生产环境根目录,当运行"python manage.py collectstatic"的时候,会将STATICFILES_DIRS以及各app中static的所有的文件复制收集到STATIC_ROOT
# 把这些文件放到一起是为了用Apache等上线部署的时候更方便
# 需要配置URL,如"url(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT})"
# STATIC_ROOT = os.path.join(BASE_DIR, 'collectstatic').replace('\', '/')

# 媒体文件(用户上传的文件)配置
# 不能像静态文件那样调用,而是先配置"TEMPLATES"中的"context_processors"添加'django.template.context_processors.media';
# 然后配置URL,如"url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT})";
# 调用示例:{{ MEDIA_URL }}{{ modelobj.fieldname }}
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\', '/')

# Django日志配置
# LOGGING = {
#     'version': 1,  # 指明dictConnfig的版本
#     'disable_existing_loggers': False,  # 禁用所有的已经存在的日志配置
#
#     # 格式器
#     'formatters': {
#         'standard': {  # 详细
#             'format': '
时间:[%(asctime)s]	级别:[%(levelname)s]	文件名:[%(filename)s]	方法:[%(funcName)s]	行数:[%(lineno)d]	日志消息:
[%(message)s]

------------------------------------------------------------',
#         },
#         'simple': {  # 简单
#             'format': '时间:%(asctime)s | %(levelname)s | %(message)s',
#         },
#     },
#
#     # 过滤器
#     'filters': {
#         'require_debug_true': {
#             '()': 'django.utils.log.RequireDebugTrue',
#         },
#     },
#
#     # 处理器,在这里定义了三个处理器
#     'handlers': {
#         'file_handler': {  # 文件处理器,所有高于(包括)level的消息会被保存到"filename"
#             'level': 'INFO',
#             'class': 'logging.FileHandler',
#             'formatter': 'standard',
#             'filename': 'E:/PythonProj/mydjsite/log/file.log',
#         },
#         'console': {  # 控制台处理器,所有的高于(包括)level的消息会被传到控制台,使用的是standard格式器
#             'level': 'INFO',
#             'class': 'logging.StreamHandler',
#             'formatter': 'standard',
#             # 'filters':['require_debug_true'],
#         },
#         'mail_admins': {  # AdminEmail处理器,所有高于(包括)而level的消息会被发送给站点管理员,使用的是standard格式器
#             'level': 'ERROR',
#             'class': 'django.utils.log.AdminEmailHandler',
#             'formatter': 'standard',
#             # 'filters': ['require_debug_true'],
#         },
#     },
#
#     # 记录器
#     'loggers': {
#         'django': {  # 使用file_handler处理器,所有高于(包括)level的消息会被发往file_handler和console处理器
#             'handlers': ['file_handler', 'console', 'mail_admins'],
#             'level': 'INFO',
#             'propagate': False,  # 是否继承父类的log信息
#         },
#         'django.request': {  # 记录与处理请求相关的消息。5XX错误被记录为ERROR消息;4XX错误记录为WARNING消息
#             'handlers': ['file_handler', 'console', 'mail_admins'],
#             'level': 'INFO',
#             'propagate': False,
#         },
#         'django.server': {  # 记录开发服务器下处理请求相关的消息。只用于开发阶段
#             'handlers': ['file_handler', 'console', 'mail_admins'],
#             'level': 'INFO',
#             'propagate': False,
#         },
#         'django.db.backends': {  # 与数据库交互的代码相关的消息
#             'handlers': ['file_handler', 'console', 'mail_admins'],
#             'level': 'INFO',
#             'propagate': False,
#         },
#         'myproject.custom': {  # 自定义处理器
#             'handlers': ['file_handler', 'console', 'mail_admins'],
#             'level': 'INFO',
#             'propagate': False,
#         },
#     }
# }

# 缓存配置,下方一般限开发者用
# 可以缓存于内存(locmem.LocMemCache)或文件(filebased.FileBasedCache)
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

# 会话生存期设置,浏览器关闭,则会话失效(可能对Chrome浏览器无效)
# 在登录视图get请求中添加语句"request.session.set_expiry(0)",对Chrome会有效
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

  

全局设置完成后,对应的db、templates、static路径系统都会认识或生成。

 

2、路由系统设置

urls文件

在一个project项目有多个app的情况下,我倾向于把urls单独于每个app,即:

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/', include('blog.urls')),
]

  

上面就是把blog开头的url定向到blog.urls下面去解析:

from django.conf.urls import url
from . import views

urlpatterns = [
    url('^hello/', views.hello),
]

  

3、视图函数

# Create your views here.
from django.http import HttpResponse


def hello(request):
    return HttpResponse("Hello, world. You're at the index.")

 

4、访问URL

至此,一个基本的Django应用就跑起来了。

 

5、后台管理配置

创建管理员账号之前,我们必须先生存admin数据库。

创建账号:

登录后台管理:

至此,后台管理完成。

6、连接数据库设置

首先连接数据接时,会有错误:

产生这个错误的原因是缺少JDBC驱动文件,需要额外安装。

然后在pycharm页面点击数据库查看对应的表结构:

至此,数据库连接设置完成。

原文地址:https://www.cnblogs.com/skyflask/p/9310551.html