• 路由分发


    路由分发

    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'),
    ]
    

    这个时候就永远也不会重名了,除非有程序员不遵守这种规则。

  • 相关阅读:
    个人温度上报小软件
    假期10
    Android开发 07
    假期09
    Android开发 06
    Android开发 05
    假期08
    Android开发 04
    假期07
    每日日报
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11723483.html
Copyright © 2020-2023  润新知