django配置信息

1.基本配置信息

from pathlib import Path

# 项目路径
BASE_DIR = Path(__file__).resolve().parent.parent

# 秘钥配置
"""
主要用于重要数据的加密,提高项目的安全性,避免遭到攻击者恶意破坏。秘钥主要用户密码,CSRF机制和会话Session等数据加密
用户密码:
CSRF机制:
会话Session:
"""
SECRET_KEY = 'django-insecure-%@-)^ptx*@13lh3h1#b+uty5c7enie__okn@ibn7p!1!)jhjt*'

# 调试模式
DEBUG = True

# 域名访问权限
"""
ALLOWED_HOSTS 为空列表时,项目只允许以localhost或127.0.0.1在浏览器上访问。
当DEBUG为False时,ALLOWED_HOSTS为必填项,允许所有域名访问、可设置ALLOWED_HOSTS = ["*"]
"""
ALLOWED_HOSTS = []

# APP列表
INSTALLED_APPS = [
    'django.contrib.admin',  # 内置的后台管理系统
    'django.contrib.auth',  # 内置的用户认证系统
    'django.contrib.contenttypes',  # 记录项目中所有medel元数据(Django的ORM框架)
    'django.contrib.sessions',  # Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息
    'django.contrib.messages',  # 消息提示功能
    'django.contrib.staticfiles',  # 查找静态资源路径
]

2.资源文件配置

01.资源路由——STATIC_URL

默认情况下,Django只能识别项目应用App的static文件夹里面的静态资源
# 静态文件配置(CSS,js,img)  
STATIC_URL = 'static/'

# books/static/iphone.jpeg
http://127.0.0.1:8000/static/iphone14.jpeg  404

# books/disposition/mystatic/nikon.jpeg
http://127.0.0.1:8000/static/nikang.jpeg 404

# books/disposition/static/macpro.jpeg 必须注册子应用
http://127.0.0.1:8000/static/macpro.jpeg 200

# 若 STATIC_URL = 'static/' 则浏览器访问静态资源的网站必须为static,并且 DEBUG = True(在调试模式)下只能识别app目录下的static文件(注册子应用)

02.资源集合——STATICFILES_DIRS

由于static_url的特殊性,在开发中会造成很多不便,比如将静态文件存放在项目的根目录以及定义多个静态文件。
# 解决404 
"""
# books/static/iphone.jpeg
http://127.0.0.1:8000/static/iphone14.jpeg  404
# books/disposition/mystatic/nikon.jpeg
http://127.0.0.1:8000/static/nikang.jpeg 404
"""
# BASE_DIR / 'static' 设置根目录的静态资源文件
# BASE_DIR / 'disposition/mystatic' 设置子应用的静态资源文件
STATICFILES_DIRS = [BASE_DIR / 'static', BASE_DIR / 'disposition/mystatic']

STATIC_URL = 'allstatic/'  # 名字可以更改
http://127.0.0.1:8000/allstatic/iphone14.jpeg
http://127.0.0.1:8000/allstatic/nikon.jpeg
http://127.0.0.1:8000/allstatic/macpro.jpeg

03.资源部署——STATIC_ROOT

static_root作用是在服务器上部署项目,实现服务器和项目之间的映射。static_root主要收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件与服务器之间构建映射关系。
# 资源部署 
STATIC_ROOT = BASE_DIR / 'allstatic'

# python manage.py collectstatic  收集静态文件指令
开发阶段用不到,当debug = False的时候django不在提供静态文件代理服务,此时需要设置static_root

04.媒体资源——MEDIA

http://127.0.0.1:8000/media/socks.avif

static_url是设置静态文件的路由地址,如css样式文件,js文件以及常用图片等。对于一些经常变动的资源,通常将其存放在媒体资源文件,如用户头像、歌曲文件等。媒体资源和静态资源是可以同时存在的,而且俩者可以独立运行,互不影响,而媒体资源只有配置属性media_url和media_root
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
                  path('admin/', admin.site.urls),
              ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
from django.conf import settings
from django.urls import re_path
from django.views.static import serve

urlpatterns = [
                  path('admin/', admin.site.urls),
                  re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
              ]
from django.conf import settings
from django.urls import re_path
from django.views.static import serve

if settings.DEBUG:
    urlpatterns += [
        re_path(
            r"^media/(?P<path>.*)$",
            serve,
            {
                "document_root": settings.MEDIA_ROOT,
            },
        ),
    ]

3.模板配置

TEMPLATES = [
    {
        # 要使用的模板后端。内置的模板后端有:
        # 'django.template.backends.django.DjangoTemplates'
        # 'django.template.backends.jinja2.Jinja2'

        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates',
                 BASE_DIR / 'disposition/templates'],  # 按照搜索顺序,告诉django应该查找模板源文件的目录。
        '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',
            ],  # 要传递给模板后台的额外参数。根据模板后端的不同,可用的参数也不同。一般不做任何修改
        },
    },
]

4.数据库配置

01.mysqlclient链接MySQL

https://pypi.org/project/mysqlclient/ ubuntu 安装报错解决方法

# 创建数据库
create database learn charset=utf8;
# 创建用户
CREATE USER 'leo'@'%' IDENTIFIED BY 'mysql';
# 授权用户权限
GRANT ALL ON learn.* TO 'leo'@'%';
# 刷新
flush privileges;
# 测试连接
mycli -uleo -pmysql
# django支持 PostgreSQL、MariaDB、MySQL、Oracle 和 SQLite。
pip install mysqlclient

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'learn',
        'USER': 'leo',
        'PASSWORD': 'mysql',
        'HOST': '127.0.0.1',
        'POST': '3306',
    }
}

python manage.py migrate # 迁移数据库

# 默认表
+----------------------------+
| Tables_in_learn            |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+

02.pymysql连接mysql

# pip install pymysql

03.多个数据库的连接方式

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'learn',
        'USER': 'leo',
        'PASSWORD': 'mysql',
        'HOST': '127.0.0.1',
        'POST': '3306',
    },
    'test': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'leo',
        'PASSWORD': 'mysql',
        'HOST': '127.0.0.1',
        'POST': '3306',
    }
}


#  指定数据库迁移
python manage.py migrate --database test

04.使用数据库文件动态连接数据库

创建一个Django项目,执行python manage.py migrate,之后随便删除一个表怎么恢复?
# BASE_DIR/mysql.cnf
[client]
database=dynamically
user=leo
password=mysql
host=127.0.0.1
port=3306
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {'read_default_file': str(BASE_DIR / 'mysql.cnf')}
    }
}

05.通过ssh隧道远程连接MySQL

pip install sshtunnel

# 数据库服务器的ip地址或主机名
ssh_host = "192.168.23.128"
# 数据库服务器的SSH连接端口号,一般都是22,必须是数字
ssh_port = 22
# 数据库服务器的用户名
ssh_user = "zjx"
# 数据库服务器的用户密码
ssh_password = "jianxin"

# 数据库服务器的mysql的主机名或ip地址
mysql_host = "localhost"
# 数据库服务器的mysql的端口,默认为3306,必须是数字
mysql_port = 3306
# 数据库服务器的mysql的用户名
mysql_user = "leo"
# 数据库服务器的mysql的密码
mysql_password = "mysql"
# 数据库服务器的mysql的数据库名
mysql_db = "secure_shell"

from sshtunnel import open_tunnel


def get_ssh():
    server = open_tunnel(
        (ssh_host, ssh_port),
        ssh_username=ssh_user,
        ssh_password=ssh_password,
        # 绑定服务器的MySQL数据库
        remote_bind_address=(mysql_host, mysql_port))
    # ssh通道服务启动
    server.start()
    return str(server.local_bind_port)


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': mysql_db,
        'USER': mysql_user,
        'PASSWORD': mysql_password,
        'HOST': mysql_host,
        'PORT': get_ssh(),
    }
}

5.中间件

中间件(Middleware)是一个用来处理Django的请求和响应的框架级别的钩子,他是一个轻量、低级别的插件系统,用于在全范围内改变django的输入和输出
当用户在网站中进行某个操作时,这个过程是用户向网站发送HTPP请求,而网站会根据用户的操作返回相关的网页内容,这个过程称为响应处理。从请求到响应的过程中,当Django接受到用户请求时,首先经过中间件处理请求信息,执行相关的处理,然后将处理结果返回给用户。
# 中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',  # 内置的安全机制,保护用户与网站的通信安全。
    'django.contrib.sessions.middleware.SessionMiddleware',  # 会话Session功能
    # 添加
    'django.middleware.locale.LocaleMiddleware',  # LocaleMiddleware django内置功能支持中文显示
    'django.middleware.common.CommonMiddleware',  # 处理请求信息,规范化请求内容
    'django.middleware.csrf.CsrfViewMiddleware',  # 开启CSRF防护功能
    'django.contrib.auth.middleware.AuthenticationMiddleware',  # 开启内置的用户认证系统
    'django.contrib.messages.middleware.MessageMiddleware',  # 开启内置的信息提示功能
    'django.middleware.clickjacking.XFrameOptionsMiddleware',  # 防止恶意程序单击劫持
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值