路由分發


路由分發

django里面的app可以有自己的static文件,templates文件夾,urls.py(******)   

    項目名下面的urls.py不再做路由與視圖函數對應關系
    而是做一個中轉站  只負責將請求分發到不同的app中 
    然后在app的urls.py完成路由與視圖函數的對應關系

比如說我有十個人要開發,每個人都不需要溝通,只用開發自己的那個app就好了,你的老板只需要建立一個空的Django項目,把你們每個人的app拿過來,在settings里面注冊一下,然后在urls里面路由分發一下就好了。

這時候比如說你的app01和app02 都有一個index函數:

from app01 import urls as app01_urls
from app02 import urls as app02_urls
from django.conf.urls import url,include

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/',include(app01_urls)),
    url(r'^app02/',include(app02_urls))
]

接下來你只需要在瀏覽器里面請求 “127.0.0.1:8080/app01/index/"訪問到app01里面的index了,改成app02就能訪問到app02的index。

這時候就出了一個問題,如果有非常非常多的app,怎么辦?

難道老板要狂寫 from appxx import urls as appxx_urls 嗎?

所以以上的方式就叫做麻瓜式,並不好用。

第二種方式:

from app01 import urls as app01_urls
from app02 import urls as app02_urls
from django.conf.urls import url,include

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/',include('app01.urls ')),
    url(r'^app02/',include('app02.urls'))
]

用字符串來就可以了,省去了導入這些語句

現在又有一個問題,兩個app,是不是都可以給自己的index起別名!

那么反向解析的時候會怎么樣,Django能不能幫你自動識別出來呢?

結果是不行,他還沒有智能到區分到那個應用上,所以有兩種方式來解決:

方式一、名稱空間(了解)

from app01 import urls as app01_urls
from app02 import urls as app02_urls
from django.conf.urls import url,include

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/',include(app01 _urls,namespace='app01')),
    url(r'^app02/',include(app02_urls,namespace='app02'))
]

現在就相當於給他們搞了個名稱空間,我們在解析的時候:

這是app01的index

def index(request):
    print(reverse('app01:index'))
    return HttpResponse('hahaa')

app02的也一樣。

那么這不就是要員工們都提前溝通好了嗎,說自己要怎么寫怎么寫。所以有了方式二

方式二、約定俗成

通常情況下,起別名的時候,前面可以加上你的應用名,因為應用是不可能會重名的,所以只需要在你起別名的時候,在前面加上應用名就好了。

比如在你app01的urls里面

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/',views.index,name='app01_index'),
]

這個時候就永遠也不會重名了,除非有程序員不遵守這種規則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM