[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的别名即可