1. django项目启动时, 自定制执行某个py文件

dajngo 启动时。会将所有 路由加载到内存中。 我的目的就是在 路由加载之前,执行某个py文件。

每个app中都有一个 apps.py

from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class App02Config(AppConfig):
    name = 'app02'     def ready(self):
        autodiscover_modules("xxxx") 这样django就会去, 已注册的app目录中。 寻找名称就叫 xxxx.py的文件, 并自动执行。
这个操作,在任意的app中都可以。 根据代码要求,决定你是准备怎么搞。

这样有一个小问题就是,回执行两次。 因为django 启动的时候。 会有两个线程启动。 一个是正常启动的,另一个是检测代码有没有改动, 改动了就重新启动一次

所以, 在启动django的时候需要这样:

在 Teminal 中:  python manage.py runserver 127.0.0.1:8001 --noreload   这样就只会执行一边了。 自动重启的py文件就不会运行了。

提示:
  如果 xxxx.py 执行的代码向,  “某个地方”  放入了一些值(比如,在列表中append了数据), 之后的路由加载时, 就可以在  “某个地方” 读取到xxxx.py设置的值

2. 单例模式

永远实例化一个对象。

python中。 一个类 class Foo(object): 这个类在进行实例化的时候。 每次实例化,都是一个单独的对象。  所以单独对某一个对象操作。 不会影响其他的对象。 这就是多例模式。

这里一个知识点:
  python在 import 的时候。 首次导入会依次解释。 被导入模块中的代码。 并加载到内存。 如果再次导入这个模块的时候, python就不会再去 解释一遍这个.py文件。而是直接从内存中。取出已经解释过后的,代码。(并且无论在哪里进行的导入。只要导入过一次,后续的导入用的永远都是这一个东西)

依靠这种机制, 我们就可以实现, 一个单例模式。

可以理解为,我们使用导入的方式,设置了一个公共的变量。 我在1.py中,对这个变量进行赋值,更新。 那么 我在2.py中就能够, 接收到 更新之后的这个变量。
唯一需要注意的就是, 更新的操作, 要在 读取的操作之前。 就可以了!

就如图中所示。app.py 导入之后设置值。  而commons.py取出值。

提示:
  如果以后存在一个单例模式的对象, 可以先在此对象中放入一个值。然后再在其他文件中导入该对象, 通过对象再次获取值。

3. django路由分发的本质  include

include 也是,一个通过字符串进行导入的东西。

这是一部分的源码, 这里可以看出。  他先做了一个类型判断。  如果是字符串类型。 就使用 inmport_module() 进行导入。 并且又赋值给了他自己。
然后最后进行返回。
所以 返回的, 已经不是字符串了。 而是一个 module 对象。

    include函数主要返回有三个元素的元组。
from django.conf.urls import url,include
from app01 import urls
urlpatterns = [
url(r'^web/', (urls, app_name, namespace)), # 第一个参数是urls文件对象,通过此对象可以获取urls.patterns获取分发的路由。
]

在源码内部,读取路由时:
  如果第一个参数有: urlspartterns 属性。那么子路由就从该属性中取出。
  如果第一个参数无: urlspartterns 属性。那么子路由就是他自己。

所以根路由的  路由分发甚至可以这样干:

form app01 inmport views
urlpatterns = [
path('admin/', admin.site.urls),
path("web/", ([
path("login/", views.login),
path("logout/", views.logout),
], None, None)),
]

stark组件前戏之项目启动前加载指定文件的更多相关文章

  1. stark组件前戏(1)之项目启动前加载指定文件

    django项目启动时,可以自定义执行某个py文件,这需要在任意app的apps.py中的Config类定义ready方法,并调用.   from django.apps import AppConf ...

  2. ssm项目启动,加载数据库连接池时卡住

    今天早上到公司启动项目的时候,加载数据库连接池时卡住,昨晚还好着呢,然后排查原因,最后发现是因为有一个mapper的xml配置文件中 <mapper namespace="com.mi ...

  3. 原生servlet项目启动自动加载一个方法

    web.xml里的配置: 配置好要加载的类,其中1这一句是项目启动时自动加载该类的必要条件. <servlet> <servlet-name>SharePltfCLServle ...

  4. spring项目中监听器作用-ContextLoaderListener(项目启动时,加载一些东西到缓存中)

    作用:在启动Web容器时,自动装配Spring applicationContext.xml的配置信息. 因为它实现了ServletContextListener这个接口,在web.xml配置这个监听 ...

  5. Android根据文件路径加载指定文件

    Android根据指定的文件路径加载指定文件格式(图片格式 png, gif,jpg jpeg)的文件相关信息的列表. 如图: 代码: public class Util { /**** * 计算文件 ...

  6. android--------根据文件路径加载指定文件

    Android根据指定的文件路径,加载该路径下指定文件格式(图片格式 png, gif,jpg jpeg)的文件相关信息的列表. 如图: public class MainActivity exten ...

  7. Spring Boot 2 启动时加载properties文件

    每个项目从开发到测试再到上线所需要的各种环境是不同的,这就需要维护相应的配置文件,比如properties或yml文件.有了配置文件后就要考虑如何与应用进行集成. 对于云环境来讲,项目发布需要打成镜像 ...

  8. Spring加载xsd文件报错:because 1) could not find the document; 2) the document could not be read...

    Spring启动时加载xml文件的过程: spring在加载xsd文件时总是先试图在本地查找xsd文件(spring的jar包中已经包含了所有版本的xsd文件),如果没有找到,才会转向去URL指定的路 ...

  9. PMP--2. 项目启动前准备工作

    ####################################################### 概述:在第一章节的1.1-1.7中基本都是介绍的<PMBOK>的理论概念以及 ...

随机推荐

  1. oracle第二天笔记

    多表查询 /* 多表查询: 笛卡尔积: 实际上是两张表的乘积,但是在实际开发中没有太大意义 格式: select * from 表1,表2 */ select * from emp; select * ...

  2. Spring AOP demo 和获取被CGLIB代理的对象

    本文分为两部分:1)给出Spring AOP的一个例子(会使用CGLIB代理):2)给出获取被CGLIB代理的原始对象. 1.Spring AOP Demo 这部分参考了博文(http://www.v ...

  3. 获取字段唯一值工具- -ArcPy和Python案例学习笔记

    获取字段唯一值工具- -ArcPy和Python案例学习笔记   目的:获取某一字段的唯一值,可以作为工具使用,也可以作为函数调用 联系方式:谢老师,135-4855-4328,xiexiaokui# ...

  4. C++ 自定义控件的移植(将在其它程序中设计的自定义控件,移植到现在的系统中)

    方法很简单就是将需要的代码 复制到 新系统中就可以了,方法就是 把相关文件添加到现有的系统中,并特别注意以下问题 \如果原设计中用到了菜单或是其它资源,相应的资源要在新的菜单中,手动添加. 目前没有发 ...

  5. Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...

  6. 模块移除 命令rmmod 的实现

    // rmmod.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include < ...

  7. 安装 gradle

    Gradle是一种现在很流程的构建工具,目前基本和Maven平分天下,而且大有取而代之的趋势.这篇教程教大家怎么在linux上安装Gradle. 一.获得一台linux服务器 要在linux下安装gi ...

  8. 使用tor网络

    在www.torproject.org/projects/torbrowser.html.en上找到合适的版本下载 下载好tor浏览器之后,解压双击Tor Browser,出现这个错误 这是因为kal ...

  9. HTTP/1.1新建会话失败 解决方法及分析

    右键我的电脑—>属性—>点击高级项卡—>设置性能,在性能选项中选择高级选项卡,在虚拟内存处显示“所有驱动器文件大小的总数:0M”,原来问题出在这里,由于操作系统的分页内存太小,而引起 ...

  10. maven命令的简单理解

    mvn clean //在target文件夹中的一切都将被删除 mvn compile //编译源代码 mvn test  //运行应用程序中的单元测试 mvn package  //把jar打到本项 ...