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>的理论概念以及 ...
随机推荐
- MySql出现大量LAST_ACK的解决办法
前几日生产环境遇到一问题,网站的同步登录部分提示Can’t connect to MySQL server on ‘localhost’ (10060),第一反应就是可能过连接数据库的相关参数了,经检 ...
- [ SHELL编程 ] echo和printf使用实例
本文主要描述Linux系统中echo和printf命令的使用方法,包括命令参数的含义.使用技巧. 1.echo 了解一个命令我们首先要知道它能做什么,它有哪些参数,参数的含义,可以实现我们哪方面 ...
- [CI]CodeIgniter快速开发指南
---------------------------------------------------------------------------------------------------- ...
- Hibernate 再接触 继承映射
用一张 每一个类一张表 建立外键 第一种 一张总表 Person package com.bjsxt.hibernate; import javax.persistence.Discriminator ...
- android开源项目框架大全:
android开源项目框架大全: 1.多页切换TabHost9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式 ...
- 吴裕雄 24-MySQL 索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度.打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一 ...
- idea 修改 使用的git账号
打开控制面板-->用户账户-->凭证管理器 如下图点击进入,删除原有的账号 当在idea中再提交或下载代码时,就会弹出如下提示框: 重新输入你自己的账号就可以了.
- mysql5.7.10开启慢查询
MySql提供慢SQL日志的功能,能够记录下响应时间超过一定阈值的SQL查询,以便于我们定位糟糕的查询语句. 首先,查询当前mysql数据库是否开启了慢查询日志功能: show VARIABLES l ...
- zabbix 利用python脚本实现短信告警
一.编写脚本 cd /usr/local/zabbix-4.0.3/share/zabbix/alertscripts vi zabbix_sms.py 内容如下: #!/usr/bin/python ...
- OWAPSP_ZAP使用
启动OWAPSP_ZAP后 netstat -pantu | grep 8080