⒈、django项目启动时,自定义执行某个py文件。

在任意的app的apps.py中的Config类中定义ready方法,并调用autodiscover_modules

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
1 from django.apps import AppConfig
2 from django.utils.module_loading import autodiscover_modules
3 
4 class StarkConfig(AppConfig):
5     name = 'stark'
6 
7     def ready(self):
8         autodiscover_modules('stark')

django在启动时,就会去已注册的所有app的目录下找 apps.py 并自动导入。


如果执行两次,是因为django内部自动重启导致:
    python manage.py runserver 120.0.0.1:8001 --noreload

 

⒉、单例模式

通过利用Python模块导入的特性:在Python中,如果已经导入过的文件再次被重新导入时候,python不会再重新解释一遍,而是选择从内存中直接将原来导入的值拿来用。

 

⒊、django路由分发的本质:include

from django.conf.urls import url,include
from app01 import urls


以往写的include函数实现路由分发
urlpatterns = [
  
url(r'^rbac/',include(('rbac.urls','rbac'),namespace='rbac'))
 ]

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


     在源码内部,读取路由时:
          如有第一个参数有:urls.patterns 属性,那么子路由就从该属性中后去。
          如果第一个参数无:urls.patterns 属性,那么子路由就是第一个参数。

 

 

综合以上,实现路由分发:

1 urlpatterns = [
2     url(r'^web/', ([
3         url(r'^index/', views.index),
4         url(r'^home/', views.home),
5     ], app_name, namespace)), # 第一个参数是urls文件对象,通过此对象可以获取urls.patterns获取分发的路由。
6 ]

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄