stark - 1
⒈、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 ]

更多精彩