Django搭建个人博客Blog-Day02

news2024/12/22 19:38:53

配置文件的介绍:dev.py(原来的setting.py文件)

# django的配置文件中的配置项是什么意思?
import os   # 导入模块

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 用一个变量来保存一个路径   __file__ :当前这份文件的路径
# 在开发中,路径不要写死,不建议使用绝对路径,避免因为路径变动了造成的bug

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'mu4#59%=%f*e8x6d9+p26f#6ch&5)&+)mte7+wq)717uxu56ap'
# 随机字符串,django 运行必须需要这个,session、加密等情况会使用

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True    # 调试模式
# 设置为Ture   则表示开启调试模式  就会将遇到的错误以及错误信息展示出来
# 在开发的时候,应该开启  方便我们进行排错
# 设置为False  则表示关闭调试模式  不会展示错误信息
# 在生产环境下,不能开启调试模式  避免出错,错误信息展示出来了,容易导致引发安全问题

ALLOWED_HOSTS = []
# 允许访问的IP
# 当我们将DEBUG 设置为False的时候,只有这个列表里面的IP才能访问django项目
# 一般我们会将服务器的IP放在里面
# 如果是 *  就表示允许所有的IP 进行访问

# Application definition

# 是个列表,列表的每一项是 安装了的APP  默认安装的APP
# sys.path 的列表 默认能找到
INSTALLED_APPS = [
    'django.contrib.admin',  # 自带的admin管理后台
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions', # 使用Session
    'django.contrib.messages',
    'django.contrib.staticfiles', # 静态文件
]

# 中间件    按照从上往下的顺序   依次执行
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',
]

# 告诉django路由文件的位置
ROOT_URLCONF = 'blog.urls'

# 模板相关的设置
TEMPLATES = [
    {
        # 使用的模板引擎是什么
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 是个列表  django会从这个列表中的每一项依次去找对应的模板文件
        'DIRS': [],
        # 默认为True  表示会从app里面去找 一个叫做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',
            ],
        },
    },
]

# 部署时候使用
WSGI_APPLICATION = 'blog.wsgi.application'

# 数据库相关配置,当使用mysql数据库时需要更改此设置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, '../../db.sqlite3'),
    }
}

# 权限和密码认证相关设置
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',
    },
]

# 语言设置  默认是英文
# 想改成简体中文
LANGUAGE_CODE = 'zh-hans'
# LANGUAGE_CODE = 'en-us'

# 时区的设置  默认是UTC世界标准时间
# 想改成东八区
TIME_ZONE = 'Asia/Shanghai'
# TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

# 设置是否采用时区
# 如果是True 会保留时区的设置  在数据库保存的时间是带时区的
# 设置为False  就不会保存时区  在数据库就是本地时间
USE_TZ = False
# USE_TZ = True

日志记录

在项目上线以后,要关闭调试模式,避免引起安全攻击,但是这样我们就看不到一些信息了,在实际中,我们的项目上线后可能还会遇到问题的,所以我们应该要将这些问题记录下来才对,并且应该记录一些用户的请求记录记录下来,方便后续运营人员做分析,运维人员做问题分析等等,所以要求我们将一些信息记录在指定的文件中。

  1. 在blog/blog/下创建一个文件夹:logs

  1. 在setting/dev.py文件中添加如下代码

# 用django记录日志
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(BASE_DIR, 'logs/debug.log'),  # 日志文件的位置
            'maxBytes': 300 * 1024 * 1024,  # 300M
            'backupCount': 10,   # 10份文件
            'formatter': 'verbose'
        },
    },
    'loggers': {  # 日志器
        'django': {  # 定义了一个名为django的日志器
            'handlers': ['console', 'file'],  # 可以同时向终端与文件中输出日志
            'propagate': True,  # 是否继续传递日志信息
            'level': 'INFO',  # 日志器接收的最低日志级别
        },
    }
}

这样,项目执行的日志记录信息都会保存在logs文件夹下

配置静态文件

  1. 在blog/blog里面创建一个叫做static的文件夹,用来存放css等静态文件

  1. 在dev.py文件中添加如下代码:

# 配置静态文件的文件夹位置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]

配置模板文件位置

  1. 在blog/blog里面创建一个叫做templates的文件夹

  1. 在dev.py文件中进行如设置:

# 模板相关的设置
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        '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',
            ],
        },
    },
]

可以鼠标选中templates,右键选择make Directory as--->Templates Folder,这样就可以在其他程序中输入templates文件夹里的文件时拥有代码提示了。

创建apps

为了方便管理,(例如以后可能有多个版本等等问题),在blog\blog里面创建一个apps的软件包,以后所有的app都放在这个包里面,方便管理。

创建user的app
# 创建user的app的命令:python manage.py startapp user 
# 这条命令在哪里运行的,就会在当前的路径下创建这个app  
# 我们需要先进入虚拟环境,再cd到blog/blog/apps文件夹下,执行以下命令创建user
python ../../manage.py startapp user 
# 因为要依赖manage.py文件创建app,所以要指定manage.py的位置,所以要使用“../../manage.py”

创建了app后,要在配置文件中告诉Django

追加导包路径

在dev.py文件中进行如下设置:

import sys    # 新增代码
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(os.path.join(BASE_DIR,'apps'))  # 新增代码  追加导包路径
INSTALLED_APPS = [
   ...
    'user',  #在该列表的最后添加新增加的app名称
]
在总路由中进行路由分发

在blog/urls.py文件中进行设置

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    # 进行路由分发
    path('user',include('user.urls')),
]

在user文件夹中创建urls.py文件,进行路由设置:

from django.urls import path

app_name = 'user'
urlpatterns = [

]

当前项目结构:

blog
    blog
        settings
            - dev.py            (就是以前的Settings.py  作为开发环境的配置)
            - prod.py           (作为以后上线的环境配置)
        apps                    (新增的包 用来存放app)
            user 的应用
        logs                    (新增的文件夹  用来存在日志信息)
        templates               (新增的文件夹  用来存在模板文件)
        static                  (新增的文件夹  用来存在静态资源)
        -wsgi.py                 (部署文件  做了修改)
    - manage.py   # 项目启动文件  (做了修改)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测牛学堂:软件测试学习之python调试和判断嵌套

python中调试代码 在python中,使用debug来调试代码。 我们使用debug的目的,就是可以查看代码的执行过程。 步骤: 1 打断点。打断点是开发的术语,类似于打标记,debug会让程序在你打断点的地方停止执行。 如果要查看代码…

RabbitMQ(六)消息应答和持久化

目录一、RabbitMQ 消息应答二、RabbitMQ 持久化1.交换机的持久化2.队列的持久化3.消息的持久化4.持久化问题官网地址:https://www.rabbitmq.com/ 下载地址:https://www.rabbitmq.com/download.html 一、RabbitMQ 消息应答 ​ 执行一个任务可能需要花费…

petitlyrics 歌词提取 有感

想做一下歌曲的时间轴,搜歌词搜到了这个网站。奇怪的是看前端代码和network监听请求都不能获得完整歌词。如 https://petitlyrics.com/lyrics/934773a. 歌词截图如下:b. 控制台查看前端代码只有部分歌词c. Network查看请求数据,发现是日语对应…

小白和设计师都能用的 3D 渲染神器 #Rotato

“我非常喜欢它。它为我节省了很多时间,而不必在 Adobe After Effects 等应用程序中挣扎。”——Dominik Sobe on Product HuntRotato 是什么?Rotato 是一款功能强大的 3D 样机渲染神器,支持 PNG 、JPG 、 avi、mov 、mp4 等多种格式。不仅能…

10分钟在 Rainbond 上部署 mall 电商项目

很多小伙伴在学习 mall 电商项目时,都会在部署上折腾许久,虽然目前已经提供了很多种部署方式,比如 在 Linux 上部署 mall 、使用 Docker 或 DockerCompose 部署 mall ,但对于正在学习的我们都显得比较复杂,需要理解并学…

Vue.js组件编程的知识要点

在C/S编程中,对程序员来说,组件编程是一个不能忽视或者越过的技术能力,特别是自定义的组件编程以及构建基础组件库。虽然组件编程不是必须的,全部使用系统或者别人的组件(控件)也可以完成系统的开发&#x…

使用Python根据原始Excel表格批量生成目标Excel表格

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤亭台六七座,八九十枝花。大家好,我是Python进阶者。一、前言前几天在帮助粉丝解决问题的时候,遇到一个简单的小需求&#…

程序员如何通过兼职赚钱?有哪些渠道?

程序员的工资是没有网上说的那么夸张。 就我自己来说,在刚刚工作的那几年,月薪没有超过1万块钱。但是刚刚来到大城市,这点工资连我交房租都不够,生存都成了问题。于是我开始考虑进行兼职,虽然在最开始的几个月也只能有…

(Week 11)综合复习(C++,图论,动态规划,搜索)

目录汤姆斯的天堂梦(C,Dijkstra)题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解题思路:[蓝桥杯 2022 国 A] 环境治理(C,Floyd)题目描述输入格式输出格式样例 #1样例输入 #1样例输…

工控安全—工控常见协议识别

文章目录一、Nmap常见参数介绍二、工控常见协议识别三、工控设备指纹识别3.1 S73.2 Modbus3.3 IEC 60870-5-1043.4 DNP33.5 EtherNet/IP3.6 BACnet3.7 Tridium Niagara Fox3.8 Crimson V33.9 OMRON FINS3.10 PCWorx3.11 ProConOs3.12 MELSEC-Q四、测试一、Nmap常见参数介绍 -s…

STM32F411CE驱动Xbox摇杆

外观 引脚说明和原理 GND-GND 5V-5V VRX-ADC1通道1 VRX-ADC1通道2 SW独立按键-单片机的输入检测 本质上这个遥感就是集成了一个按键和两个电位器,遥感转动改变电位器也会转动,电压输出的值也就不一样,通过检测数值可自定义的做出判断&a…

linux发送tcp/udp请求

本文章介绍下通过nc工具和iperf工具,发送tcp/udp请求一、nc工具(netcat工具)这个工具linux系统默认是自带的,以下是命令的常用参数1.1 发送tcp请求在服务端监听端口nc -l port客户端连接并发送请求nc -v host port在服务端收到了信…

javaWeb 会话和跟踪

会话 用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪 HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视…

kafka消费者API

kafka的消费方式 pull(拉模式) 消费者采用从broker中主动拉去数据 kafka采用这种方式 push(推模式) kafka没有采用这种方式,因为由broker决定消费发送速率。很难适应所有消费者 pull模式不足之处是,如…

Linux 的 Vim,gcc,makefile 的使用

坚持看完,结尾有思维导图总结 这里写目录标题vimvim的安装vim的配置vim 的使用vim 的三种模式三种模式对应的命令通用命令模式底行模式gcc 和 g编译和执行预编译编译汇编链接过程make总结vim Vim 是Linux 中使用的编辑器,一般的程序要经历一个过程才能运…

Codeforces Round #841 (Div. 2) and Divide by Zero 2022(A~E)

A. Joey Takes Money给出一个序列a,每次操作可以选择两个数,将两个数分别改成与原数乘积相同的两个数,问最后得到的最大的数组和是多少。思路:乘积一定,和最大一定是与1相乘。则整个数组的积与n - 1个1的和就是最大值。…

探索云原生技术之容器编排引擎-Kubernetes/K8S详解(7)

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💛博客首页:C站个人主页🌞 💗作者目的:如有错误请指正,将…

缓存(redis)与数据库(MYSQL)数据一致性问题

在MYSQL数据库集文章中,仔细的学习了一些MYSQL数据库的知识。但是,随着我们的业务越来越好,那么我们不可能直接去操作MYSQL数据库。因为直接去操作MYSQL终究会有比较多的I/O操作,而使整个系统的性能最终受到数据库I/O的制约而无法…

教外篇(6):C++ qrencode 实现二维码生成

系列文章目录 文章目录 系列文章目录前言一、qrencode库的基本使用二、BMP图片生成原理三、二维码生成四、放大图像、解决编码问题前言 该系列教程目录与说明可以查看这篇文章::C/C++教程 本文主要介绍如何使用C++来实现二维码的生成,使用到了开源库:qrencode 代码生成结…

C++入门--vector

目录 vector的介绍 vector的使用 对象的定义 遍历 reserve与resize insert与erase 迭代器失效 vector的模拟实现 vector的介绍&#xff1a; vector是表示可变大小数组的序列容器。 vector的使用&#xff1a; 对象的定义&#xff1a; void test_vector1() {vector<int…