Django项目创建的基本准备工作【4】

news2024/10/7 15:44:02

【 一 】软件开发模式

  • 官话下面

    • 人话

      • 瀑布开发就是将什东西都定义好了在进行开发对吧 敏捷就是进行模块化一样 分批进行 规定一个时间段完成什么样的功能。

        总结来说,瀑布开发强调在项目开始之前进行详细的计划和准备,并按照预定的顺序逐步进行;

        而敏捷开发则强调快速响应变更、通过迭代来逐步交付功能,并鼓励客户参与和团队合作。在选择使用哪种开发方法时,需要根据项目的具体需求和特点来进行决策。

【 1 】瀑布开发(Waterfall Model)

是一种高度结构化的软件开发方法,它要求在项目开始之前,所有的需求、设计、测试计划等都被详细定义并文档化。一旦开始开发,项目就按照预定的顺序逐步进行,从需求分析、设计、编码、测试到交付和维护,每个阶段都必须在前一个阶段完成后才能开始。瀑布开发强调在开发过程开始之前进行大量的计划和准备,以确保项目的顺利进行。

【 2 】敏捷开发(Agile Development)

则是一种更加灵活和迭代的开发方法。它强调快速响应变更,通过短期的迭代(也称为“冲刺”或“Scrum”)来逐步交付功能。在敏捷开发中,项目被拆分成多个小模块或功能,每个模块或功能都在一个迭代周期内完成。每个迭代周期开始时,团队会确定要交付的功能,并在迭代结束时交付这些功能。敏捷开发强调客户参与、团队合作、快速反馈和持续改进。

敏捷开发方法鼓励频繁地与客户和其他利益相关者沟通,以便及时调整开发计划并满足他们的需求。在敏捷开发中,变更被视为项目的一部分,而不是例外。通过不断地迭代和交付,团队可以更早地发现并解决问题,从而降低项目失败的风险。

【 3 】开启media访问

  • 这个时候在创建一个管理员就会出现1062的报错 就是你auth表中的扩充的字段没有定义!!!!

  1. 创建管理员用户: 使用 Django 自带的 createsuperuser 命令来创建一个管理员用户。在你的项目根目录下运行以下命令:

    python manage.py createsuperuser

    image-20240509214103686

    image-20240509214156807

    运行这个命令后,Django 会提示你输入用户名、电子邮件地址和密码。按照提示输入相应的信息,然后你的管理员用户就会被创建。

  2. 登录到 Django admin: 一旦你创建了管理员用户,你就可以使用 Django admin 界面了。打开你的 Django 项目中的 admin URL(通常是 http://localhost:8000/admin/,但具体取决于你的项目设置)。然后,使用你刚刚创建的管理员用户名和密码登录。

  3. 自定义 Django admin(可选): 如果你希望自定义 Django admin 的外观或功能,你可以通过注册自定义的 ModelAdmin 类来实现。这通常在项目的 admin.py 文件中完成。

    例如,如果你有一个名为 MyModel 的模型,并且你希望将其添加到 admin 中,你可以在 admin.py 文件中这样做:

    from django.contrib import admin  
    from .models import MyModel  
     
    admin.site.register(MyModel)

    你还可以进一步定制 MyModel 在 admin 中的显示和行为。

  4. 注意

    • 确保你的 Django 项目正在运行(例如,通过 python manage.py runserver 命令)。

    • 如果你在创建管理员用户时遇到问题,检查你的数据库连接设置是否正确,并确保你的数据库服务正在运行。

    • 如果你的 Django 项目使用自定义的用户模型(如你在问题中提到的那样),并且你已经按照正确的步骤在 settings.py 中设置了 AUTH_USER_MODEL,那么 createsuperuser 命令应该会使用你的自定义用户模型来创建管理员用户。

  • 配置文件、 就是可以在页面当中访问到图片信息
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  • 配一个路由(在总路由配置)
path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT})

image-20240509214808034

#1 配置文件
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#2 创建文件夹
# media
# 3 配一个路由
path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT})
​
### 补充
auth的user表,密码加密方式
    -使用sha256+使用SECRET_KEY作为密码+盐
    
自定义用户表,参照这种方式设置密码这个字段

image-20240509214417567

【 二 】配置日志

#  不行就这样  用makedirs自动创建一个loggs文件夹然后下面拼接一下路径即可。
log_folder = os.path.join(BASE_DIR, "loggs")
os.makedirs(log_folder, exist_ok=True)
# 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是startapp/shop
            'filename': os.path.join(log_folder, 'shop.log'),
  • 这样在启动项目是就会自动获取到日志信息

image-20240529131339635

  • 日志是必不可少的一个功能
  • setting.py文件
# 1 配置文件中写
# 真实项目上线后,日志文件打印级别不能过低,因为一次日志记录就是一次文件io操作
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.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'console': {
            # 实际开发建议使用WARNING
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            # 实际开发建议使用ERROR
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是小luffyapi
            'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"),
            # 日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose',
            # 文件内容编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}
​
#2 写一个py文件common_logger.py
import logging
logger = logging.getLogger('django')
# 3 使用
class LoggerView(APIView):
    def get(self,request):
        logger.info('来了,老弟')
        return Response('ok')
    
    
# 4 以后不要写print了,统一用logger.info('来了,老弟')
  • 写一个py文件common_logger.py(最好在utils.py文件下)
    - import logging
    - logger = logging.getLogger('django')
  • 记住用路由分发

  • 主路由

from django.contrib import admin
from django.urls import path,include
from django.views.static import serve
from django.conf import settings
​
urlpatterns = [
    path('admin/', admin.site.urls),
    path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),
​
    path('user/', include('user.urls')),
​
]
  • 子路由

from django.urls import path
from . import views
from .views import LoggerView
​
urlpatterns = [
    path('logg/',LoggerView.as_view() , name='home'),
]
  • 子路由的视图类

  • 在app里面注册'rest_framework',

from django.shortcuts import render,HttpResponse
from rest_framework.response import Response
from rest_framework.views import APIView
​
from lufy.utils.logg import logger
# Create your views here.
​
​
class LoggerView(APIView):
    def get(self,request):
        logger.info('来了,老弟')
        return Response('ok')
# settings.py文件
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'user'  # 直接创建应用软件就会报错
]

image-20240509230107828

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

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

相关文章

Elasticseach学习

概念 是一个开源的分布式搜索引擎&#xff0c;可以应用于搜索、日志监控等 倒排索引 正向索引&#xff1a;基于文档id创建索引。查询词条时必须先找到文档&#xff0c;而后判断是否包含词条 倒排索引&#xff1a;对文档内容分词&#xff0c;对词条创建索引&#xff0c;并记录…

前端面试题44(JavaScript几种排序的变种或高级应用)

1. 快速排序的变种 三轴快排 (Three-Way QuickSort)&#xff1a;处理大量重复元素时更为高效&#xff0c;通过维护三个区域来避免重复元素的重复比较和交换。平衡快排 (Balanced QuickSort)&#xff1a;通过随机选取或使用中位数作为枢轴&#xff0c;以减少最坏情况下的性能退…

重命名文件的方法有哪些?重命名文件的工具有哪些?

在日常的计算机使用过程中&#xff0c;重命名文件是一项常见但至关重要的任务。无论是为了更好地组织文件、修复命名错误&#xff0c;还是简化文件管理流程&#xff0c;掌握正确的重命名方法和工具都能显著提升效率。 本文将探讨多种重命名文件的方法&#xff0c;同时介绍几款高…

传言称 iPhone 16 Pro 将支持 40W 快速充电和 20W MagSafe

目前&#xff0c;iPhone 15 和 iPhone 15 Pro 机型使用合适的 USB-C 电源适配器可实现高达 27W 的峰值充电速度&#xff0c;而 Apple 和授权第三方的官方 MagSafe 充电器可以高达 15W 的功率为 iPhone 15 机型进行无线充电。所有四款 iPhone 15 机型均可使用 20W 或更高功率的电…

ArduPilot开源飞控之AP_Mount_Siyi

ArduPilot开源飞控之AP_Mount_Siyi 1. 源由2. 框架设计2.1 类和继承2.2 公共方法2.3 保护方法2.4 私有成员和方法2.5 解析状态2.6 重要成员变量 3. 重要方法3.1 AP_Mount_Siyi::init3.2 AP_Mount_Siyi::update3.3 AP_Mount_Siyi::read_incoming_packets3.4 AP_Mount_Siyi::proc…

linux登入提示信息

目录 1.Linux 登录提示信息在操作系统中扮演着重要的角色 安全性提醒 欢迎信息 系统状态通知 政策和使用条款 技术支持信息 更新和变更通知 2.配置文件介绍 3.编辑配置文件 4.效果展示 修改前 修改后 目录 1.Linux 登录提示信息在操作系统中扮演着重要的角色 安…

vue 数据类型

文章目录 ref 创建&#xff1a;基本类型的响应式数据reactive 创建&#xff1a;对象类型的响应式数据ref 创建&#xff1a;对象类型的响应式数据ref 对比 reactive将一个响应式对象中的每一个属性&#xff0c;转换为ref对象(toRefs 与 toRef)computed (根据计算进行修改) ref 创…

Go语言---并发编程以及资源竞争(goroutine、runtime)

并发和并行 并行(parallel):指在同一时刻&#xff0c;有多条指令在多个处理器上同时执行。 并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行&#xff0c;使得在宏观上具有多个进程同时执行的效果&#xff0c;但在微观上并不是同时执行的&a…

华为HCIP Datacom H12-821 卷34

1.单选题 防火墙默认已经创建了一些安全区域,以下哪一个安全区域不是防火墙上默认存在的? A、Trust B、DMZ C、Internet D、Local 正确答案&#xff1a; C 解析&#xff1a; 防火墙默认情况下为我们提供了三个安全区域&#xff0c;分别是 Trust、DMZ和Untrust 2.判断题 …

8. Python3 pandas数据分析处理库

11.1 pandas的数据结构 pandas的数据结构如下图所示&#xff1a; pandas的几种数据结构有内在联系&#xff0c;可以吧DataFrame看作Series的容器&#xff0c;把Panel看作DataFrame的容器。可以像操作字典那样在这些数据结构中插入或者移除数据对象。在介绍这些数据结构之前&am…

力扣-dfs

何为深度优先搜索算法&#xff1f; 深度优先搜索算法&#xff0c;即DFS。就是找一个点&#xff0c;往下搜索&#xff0c;搜索到尽头再折回&#xff0c;走下一个路口。 695.岛屿的最大面积 695. 岛屿的最大面积 题目 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相…

【Git基本操作】添加文件 | 修改文件 | 及其各场景下.git目录树的变化

目录 1. 添加文件&add操作和commit操作 2. .git树状目录的变化 3. git其他操作 4. 修改文件 4.1 git status 4.2 git diff 1. 添加文件&add操作和commit操作 add操作&#xff1a;将工作区中所有文件的修改内容 添加进版本库的暂存区中。commit操作&#xff1a;…

TortoiseSVN-VisualSVNServer-软件代码文本资源版本控制管理-版本比较及差异文件

文章目录 1.VisualSVNServer安装2.TortoiseSVN安装2.1.检出2.2.提交资源2.3.更新资源2.4.返回版本2.5.比较软件可更改2.6.在此创建版本库3.TortoiseSVN版本差异文件1.VisualSVNServer安装 从官网下载,或者csdn下载链接: https://download.csdn.net/download/m0_67316550/8952…

Python酷库之旅-第三方库Pandas(015)

目录 一、用法精讲 37、pandas.read_sql函数 37-1、语法 37-2、参数 37-3、功能 37-4、返回值 37-5、说明 37-6、用法 37-6-1、数据准备 37-6-2、代码示例 37-6-3、结果输出 38、pandas.DataFrame.to_sql函数 38-1、语法 38-2、参数 38-3、功能 38-4、返回值 …

Python酷库之旅-第三方库Pandas(016)

目录 一、用法精讲 39、pandas.DataFrame.to_stata函数 39-1、语法 39-2、参数 39-3、功能 39-4、返回值 39-5、说明 39-6、用法 39-6-1、数据准备 39-6-2、代码示例 39-6-3、结果输出 40、pandas.read_stata函数 40-1、语法 40-2、参数 40-3、功能 40-4、返回…

Gmail邮件提醒通知如何设置?有哪些方法?

Gmail邮件提醒通知功能怎么样&#xff1f;通知邮件怎么有效发送&#xff1f; Gmail作为全球广泛使用的电子邮件服务&#xff0c;提供了多种邮件提醒通知功能&#xff0c;帮助用户不错过重要信息。AokSend将详细介绍如何设置Gmail邮件提醒通知&#xff0c;确保您不会错过任何重…

Mysql查询近半年每个月有多少天

Mysql 查询近6个月每个月有多少天&#xff1a; SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL-(CAST( help_topic_id AS SIGNED INTEGER )) MONTH ), %Y-%m) as months,DAY(LAST_DAY(CONCAT(DATE_FORMAT(DATE_ADD(NOW(),INTERVAL-(CAST( help_topic_id AS SIGNED INTEGER )) MO…

JavaScript中的Symbol类型是什么以及它的作用

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介JavaScript中的Symbol类型是什么以及它的作用1. 符号&#xff08;Symbol&#xff09;的创建2. 符号的特性3. 符号的作用3.1 属性名的唯一性3.2 防止属性被意外访问或修改3.3 使用内置的符号3.4 符号与属性遍历 4. 总结 ⭐ 写在最后…

光学传感器图像处理流程(二)

光学传感器图像处理流程&#xff08;二&#xff09; 2.4. 图像增强2.4.1. 彩色合成2.4.2 直方图变换2.4.3. 密度分割2.4.4. 图像间运算2.4.5. 邻域增强2.4.6. 主成分分析2.4.7. 图像融合 2.5. 裁剪与镶嵌2.5.1. 图像裁剪2.5.2. 图像镶嵌 2.6. 遥感信息提取2.6.1. 目视解译2.6.2…

AI网络爬虫022:批量下载某个网页中的全部链接

文章目录 一、介绍二、输入内容三、输出内容一、介绍 网页如下,有多个链接: 找到其中的a标签: <a hotrep="doc.overview.modules.path.0.0.1" href="https://cloud.tencent.com/document/product/1093/35681" title="产品优势">产品优…