stark组件前戏之项目启动前加载指定文件
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组件前戏之项目启动前加载指定文件的更多相关文章
- stark组件前戏(1)之项目启动前加载指定文件
django项目启动时,可以自定义执行某个py文件,这需要在任意app的apps.py中的Config类定义ready方法,并调用. from django.apps import AppConf ...
- ssm项目启动,加载数据库连接池时卡住
今天早上到公司启动项目的时候,加载数据库连接池时卡住,昨晚还好着呢,然后排查原因,最后发现是因为有一个mapper的xml配置文件中 <mapper namespace="com.mi ...
- 原生servlet项目启动自动加载一个方法
web.xml里的配置: 配置好要加载的类,其中1这一句是项目启动时自动加载该类的必要条件. <servlet> <servlet-name>SharePltfCLServle ...
- spring项目中监听器作用-ContextLoaderListener(项目启动时,加载一些东西到缓存中)
作用:在启动Web容器时,自动装配Spring applicationContext.xml的配置信息. 因为它实现了ServletContextListener这个接口,在web.xml配置这个监听 ...
- Android根据文件路径加载指定文件
Android根据指定的文件路径加载指定文件格式(图片格式 png, gif,jpg jpeg)的文件相关信息的列表. 如图: 代码: public class Util { /**** * 计算文件 ...
- android--------根据文件路径加载指定文件
Android根据指定的文件路径,加载该路径下指定文件格式(图片格式 png, gif,jpg jpeg)的文件相关信息的列表. 如图: public class MainActivity exten ...
- Spring Boot 2 启动时加载properties文件
每个项目从开发到测试再到上线所需要的各种环境是不同的,这就需要维护相应的配置文件,比如properties或yml文件.有了配置文件后就要考虑如何与应用进行集成. 对于云环境来讲,项目发布需要打成镜像 ...
- 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指定的路 ...
- PMP--2. 项目启动前准备工作
####################################################### 概述:在第一章节的1.1-1.7中基本都是介绍的<PMBOK>的理论概念以及 ...
随机推荐
- cin输入bug
我们先来谈谈cin.clear的作用,第一次看到这东西,很多人以为就是清空cin里面的数据流,而实际上却与此相差很远,首先我们看看以下代码: #include <iostream> usi ...
- linux内核中的const成员是否可以修改?
本文的基础知识:由于前半部分内容是转的,且不知道原文出处,没法给出原文地址,大家自行百度 const的实现机制 const究竟是如何实现的呢?对于声明为const的内置类型,例如int,short,l ...
- 如何判定耿耿数已经被bind过?
这个只有原生bind才有这福利 var fn1 = function(){} var a = {} var b = fn1.bind(a) console.log(b.name) // "b ...
- 一个困扰了我N久的bug , android.enableAapt2=false 无效
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT error: c ...
- hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Canvas 绘画
一.Canvas 应用场景 1.游戏 2.图表 3.动画 4.codepen.io (HTML5 动效) 最早 二.Canvas 发展历史 1.最早在apple的safari 1.3中引入 2.ie ...
- workerman Channel组件全局广播
<?phpuse Workerman\Worker; require_once '../../web/Workerman/Autoloader.php';require_once '../../ ...
- react学习入门
先在在学习react,react是faceBook推出的框架,因为虚拟DOM使页面性能提高很大,特别react Native非常适合移动端,现做一个学习总结: 1.react 获取DOM的两种方式是R ...
- Python基础之逻辑运算
逻辑运算 概念: 优先级() > not > and > or print(2 > 1 and 1 < 4 or 2 < 3 and 9 > 6 or 2 & ...
- spring boot 启动错误:Could not resolve placeholder
在启动整个spring boot项目时,出现错误: Could not resolve placeholder 原因:没有指定好配置文件,因为src/main/resources下有多个配置文件,例如 ...