Django 服务启动2次问题

2023-05-16

首先,我们的操作如下:

一、命令行的启动服务:

python manage.py runserver 0.0.0.0:8000

二、服务启动行为

    try:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo27.settings")
        django.setup()
        from django.core.management import execute_from_command_line
        try:
            pass
        except ImportError:
            pass
        execute_from_command_line(sys.argv)
    except ImportError:
        pass

manage.py模块获取到命令行参数manage.py runserver 127.0.0.1:8000,然后将该参数交由execute_from_command_line方法处理。参数传递进行一系列的初始化

1.首先获取命令行第一个参数,也就是runserver,第0个参数是manage.py程序本身,同时把剩下的参数存入到options变量,
options=[0.0.0.0:8000'].

2.调用ManagementUtilityautocomplete检查系统环境变量是否设置了DJANGO_AUTO_COMPLETE。接着再调用ManagementUtility
fetch_command方法获取命令模块,该fetch_command通过调用get_commands方法将django.core.management.commands目录下所有
默认的命令模块获取,同时将settings里已注册的app目录INSTALLED_APPS下顺序反转,依次将app目录下对应的management/commands模块获取到。
这些模块都可以通过执行python manage.py 模块名调用。由于django.contrib.staticfilesapp下已经重写了runserver这个模块,所以默认
django.core.management.commands目录下的runserver模块会被后面查找到的模块覆盖掉.然后fetch_command再调用load_command_class
方法加载django.contrib.staticfiles.runserver模块,并将该模块的Command类实例化返回。

3.通过得到返回的runserver模块下的Command对象,继续调用对象的run_from_argv方法,将整个命令行参数传入该方法, run_from_argv
方法是基类django.core.management.base.BaseCommand的方法,如果要自定义manage.py的命令行参数模块,都必须实现该方法,或者可以直接
继承该基类,该方法默认会依次调用对象本身的create_parser,创建命令行参数解析器,然后继续调用execute执行一些系统检查,包括数据库连接同步,
可以通过改变对象的requires_system_checks属性为False则不进行该检查操作,requires_migrations_checks控制是否检查数据迁移计划行为.

4.做完应用检查后,再调用对象的handle方法,该方法由于对象本身没有重写,所有是继承父类django.core.management.commands.runserver.Command
handle方法,在该父类模块runserver中,为了保持程序向后兼容,所以将BaseRunserverCommand = Command,handle方法首先检查配置文件
是否为DEBUG模式,如果是,则检查是否配置了ALLOWED_HOSTS属性,然后检查命令行参数是否启用了ipv6,如果启用了,还得检查socket是否支持ipv6,
然后检查监听端口,默认端口8000handle方法会继续调用对象的run方法,该方法会检查命令行参数是否包含--noreload选项,如果包含则
不启用自动加载,由于命令行没有传入该选项,则使用默认行为,即:启用自动加载功能。

命令行选项参数如下:

--ipv6 # 默认为False,不使用IPV6

--nothreading # 默认值True,默认值为使用多线程,使用该选项后,则不使用线程,

--noreload # 默认值True 默认自动加载,使用该选项后,则不自动加载代码,用于代码文件有改动时会重新加载代码

--nostatic # 默认值True 默认处理指定STATIC_URL配置的静态文件服务,使用该选项后,将不处理页面加载后的静态文件的URL请求

--insecure # 默认值False 不允许在非DEBUG模式提供处理静态文件的服务,使用该选项后,即使DEBUG模式,也处理静态文件的请求

这样的行为,如果在默认的选项中,启动服务,我们的服务自然启动了两次,只是不在同一个线程里,你可以在主函数中做打印测试,

解决问题:

则不启用自动加载,输入命令行如下:

python manage.py 0.0.0.0:8000 --noreload

或者在IDE(Pycharm)中配置如下:

启动即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 服务启动2次问题 的相关文章

随机推荐

  • 常见移动机器人运动学模型总结

    文末有彩蛋 原文及其原文中所涉及文章的PDF xff08 共9篇 xff09 免费下载 混沌无形 混沌系统是世界本质 xff0c 无形之中存在规律 机器人智能化发展从线性过渡到混沌 xff0c 本号将分享机器人全栈技术 xff08 感知 规
  • 常见移动机器人多角度对比分析

    混沌无形 混沌系统是世界本质 xff0c 无形之中存在规律 机器人智能化发展从线性过渡到混沌 xff0c 本号将分享机器人全栈技术 xff08 感知 规划 控制 xff1b 软件 机械 硬件等 xff09 43篇原创内容 公众号 文末提供原
  • 设计搭建汽车机器人(M1)

    p 文末提供原文PDF免费下载 期刊论文版式 摘要 xff1a 汽车机器人是移动机器人类型中非常典型的一种 xff0c 本文从应用需求 场景等角度分析 xff0c 详细阐述汽车机器人MCR的本体设计 硬件系统设计及软件系统设计情况 xff0
  • STM32F103mini教程学习总结与心得(一)

    关注同名微信公众号 混沌无形 xff0c 阅读更多有趣好文 xff01 1 引脚是否兼容5V的判断 xff1a 引脚表中PF表示5V xff0c 原理图中有ADC的引脚为3 3V 2 PT xff1a 容忍5V xff0c 没有PT标示 x
  • STM32F103mini教程学习总结与心得(二)---->串口通信

    关注同名微信公众号 混沌无形 xff0c 阅读更多有趣好文 xff01 一 串口原理 1 处理器与外部设备通信的两种方式 xff1a 并行通信 xff08 速度快 xff0c 占用资源多 xff09 43 串行通信 xff08 反之 xff
  • 电源管理与驱动设计笔记

    关注同名微信公众号 混沌无形 xff0c 阅读更多有趣好文 xff01 1 电源管理的功能 xff1a 具备电压过高保护 电流过大保护 电量监测 过放保护 等功能 gt 自主充电 2 一款清洁机器人的运动控制系统方案设计示意图 2 1电源充
  • (4)(4.3) 将固件加载到已有ArduPilot固件的主板上

    文章目录 前言 1 将自动驾驶仪连接到电脑 2 选择COM端口 3 安装固件 4 使用测试版和开发版 4 1 测试版 4 2 最新开发版本 4 3 自定义固件构建服务器 5 测试 前言 这些说明将告诉你如何将最新的固件下载到已经安装了 Ar
  • 【MDK KEIL】keil添加文件夹目录结构(批量添加.c和.h文件到工程中)(keil添加头文件路径)

    第一步打开创建文件夹选项 xff1a 第二步 xff1a 直接创建删除 或者上移下移 就好了 3 添加文件夹的同时别忘记导入头文件 xff1a
  • 单片机IO详解(上拉 下拉 准双向 输入 输出 推挽 开漏)

    目录 上拉 xff1a 下拉 输入 xff1a 上拉输入 下拉输入 输入浮空 模拟 施密特输入 xff1a 三态输入 xff1a 输出 复用推挽和推挽输出区别 推挽输出特点 开漏输出 xff1a 准双向口 一般单片机都会提供上拉和下拉功能
  • 局部路径规划算法——实现DWA(dynamic window approach)控制空间采样

    DWA算法是局部路径规划算法 xff0c 在全局路径规划算法完成后 xff0c DWA算法能够根据当前小车 xff08 机器人 xff09 位置 障碍物 终点的位置进行控制空间 xff08 速度 角速度 xff09 的采用 xff0c 从而
  • make和cmake简要介绍

    GCC GCC xff08 GNU Compiler Collection xff0c GNU编译器套件 xff09 是由GNU开发的编程语言译器 GNU编译器套件包括C C 43 43 Objective C Fortran Java A
  • 什么是小端模式,什么是大端模式

    字节序 前言 内存在读写数据的时候 xff0c 都是以字节为单位进行读写的 xff0c 其最小的读写单位也是字节 一个字节占8位 xff0c 如果暂且只考虑无符号数 xff0c 那么其能表示的范围只有0 255这256个整数数值 如果将一个
  • 多旋翼飞行器螺旋桨动力学模型

    1 多旋翼螺旋桨动力学模型 1 1 螺旋桨几何位置基本描述1 2 螺旋桨拉力及拉力力矩1 3 螺旋桨反扭力矩1 4 螺旋桨陀螺力矩1 5 螺旋桨动力学方程 1 多旋翼螺旋桨动力学模型 1 1 螺旋桨几何位置基本描述 坐标系分为多旋翼机体重心
  • 雷达天线孔径与分辨率

    我们现在讲一下真实孔径的问题 xff0c 我们先有一个 最小分辨角 的概念 xff0c 根据瑞丽 xff08 Rayleigh xff09 判据 xff0c 几何光学 xff0c 物体上的一个发光点经透镜成像后得到的应是一个几何像点 而由于
  • 【新手】关于ros包安装时,提示找不到相应的ros包(unable to locate package ros- **** )

    我是在学习这个大佬的教程 xff1a 从零开始的ROS学习之仿真 43 SLAM https blog csdn net u011612364 article details 122147741 xff08 引用 xff09 时发现我自己出
  • c++实现守护进程

    概述 Linux Daemon xff08 守护进程 xff09 是运行在后台的一种特殊进程 它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件 约束 守护进程一般在系统启动时开始运行 xff0c 除非强行终止 xff0c 否
  • linux C++ 环境下的ActiveMQ学习

    ActiveMQ 1 概述 ActiveMQ 是Apache出品 xff0c 最流行的 功能强大的即时通讯和集成模式的开源服务器 ActiveMQ 是一个完全支持JMS1 1和J2EE 1 4规范的 JMS Provider实现 提供客户端
  • Django与mysql建立长连接

    问题 xff1a 每次请求操作mysql数据库都会从新创建一个connect实例 xff0c 大大降低了数据处理的效率 还是django不够熟悉 解决办法 xff1a 自Django1 6版本后 xff0c 官方提供支持长连接 xff0c
  • Python ActiveMQ 消费者实现

    encoding utf 8 import stomp import sys import thread Create your tests here topic name 61 39 topic your topic name 39 br
  • Django 服务启动2次问题

    首先 xff0c 我们的操作如下 xff1a 一 命令行的启动服务 xff1a python manage py runserver 0 0 0 0 8000 二 服务启动行为 try os environ setdefault 34 DJ