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