[oldboy-django][2深入django]django目录说明 + 路由系统

1 django project目录说明

    project
        - app01
            -- admin.py  #django自带后台管理
            -- apps.py   #app01配置文件
            -- models.py #编写类,创建数据库表
            -- test.py   #单元测试
            -- views.py  #业务处理函数
        - app02


2 django 路由系统
    路由系统(url和视图函数的映射)

    1. 常见的路由设置(静态路由,动态路由,分组)

       r'^index/'                   -> def index(request)
       r'^add_user/(\d+)/            --> def add_user(request, a1)
       r'^add_user/(?P<name>\d+)/'   -> def add_user(request,name)

       ps:
            1 终止符
                r'^index$'
            2 伪静态
                r'^edit/(\w+).html$'

    2 路由分发(二级路由,非常重要)-- 强烈推荐用这种写法

             - 在day3目录下的urls.py,修改
                from django.conf.urls import url, include
                url(r'^app01/', include('app01.urls'))   # 注意include里面是字符串

             - 在app01目录下新建urls.py,并修改如下
                from django.conf.urls import url
                from app01 import views
                urlpatterns = [
                    url(r'^index.html$', views.index)
                ]

             - 修改views下面的index函数


    3 路由别名方向生成url(作用:根据url名字找到url或发生成新url)

        - 在视图python代码,获取url或生成url
            url(r'^index/', views.index, name='n1'),
            url(r'^index/(\d+)/', views.index, name='n2'),
            url(r'^index/(?P<b3>\d+)/', views.index, name='n3'),

            from django.shortcuts import reverse
            v = reverse('n1')
            print(v)
                #/index/
            v = reverse('n2', args=(5555,))
            print(v)
                #/index/444/
            v = reverse('n3', kwargs={'b3':444,})
            print(v)
                #/index/555/

        - 在模板Html中获取url
             url(r'^index/', views.index, name='n1'),
            {% url 'n1' %}  # 得到的是/index/

            url(r'^index/(\d+)/', views.index, name='n2'),
            {% url 'n1' 8 %}  # 得到的是/index/8/

            url(r'^index/(\d+)/(\d+)', views.index, name='n2'),
            {% url 'n1' 8 9 %}  # 到的是/index/8/9/

      
       二级路由:
          url(r'^product/',include('product.urls', namespace="product")),
    
          url(r'^pc/products/$',views.pc_permanent_product_list_view,name='pc_permanent_product_list_view'),
          模板获取url
          {% url 'product:pc_permanent_product_list_view' %}

4 路由系统详细 a. 静态路由 url(r'^index/', views.index), url(r'^new_edit/(\w+)/(+w)/', views.new_edit), url(r'^new_edit/(?P<a1>\w+)/(?P<a2>\w+)', views.new_edit), url(r'^edit/', views.edit), -- http://127.0.0.1:8000/edit/?nid=2 -- def edit(request): nid = request.GET.get('nid') b. 动态路由 - 位置参数 url(r'^new_edit/(\w+)', views.new_edit), -- http://127.0.0.1:8000/new_edit/alex -- def new_edit(request,a1): #其中的a1位alex - 关键字参数(分组) url(r'^new_edit/(?P<a1>\w+)/(?P<a2>\w+)', views.new_edit), -- def new_edit(request,a1,a2): #其中的a1位alex c. 路由别名 d. 反向路由 e. 路由分发 f. 路由写法:开始符^, 终止符$, 伪静态.html 5 权限管理(根据url别名) 用户登录后显示用户权限的菜单(菜单是一个a连接,<a href={{根据别名转成的url}}></a>) 所以在数据库只要存储权限菜单url的别名即可

 

posted @ 2017-10-30 16:45  liuzhipenglove  阅读(160)  评论(0编辑  收藏  举报