Django之路由系统
Django之路由系统
写路由是因为项目的业务线多多个,为了划分管理和方便去维护,所以会将不同的业务放在不同的APP里,每个APP对应不同的url,便于管理维护。
1、一一对应的路由:一个URL对应一个函数
/login/ ---> def login(request)
2、动态路由:如果是在编辑的情况的下,url中是可能会有?符号,这意味着是GET请求,如果不要url体现?符号,就可以使用动态路由的正则匹配。
/login/(\d+)/ ----> def login(request,a) #正则表达式 ------------- 参数a是用来接收正则的 /login/(?p<a1>\w+)/(?p<a2>\w+) -----> def login(request,a1,a2) #(?p<a1>\w+) 的好处是不用位置传参,将w+的值给a1.
动态路由第一种用法:
URL 的写法:
url('test3/', views.test3), url('test4/(\w+)/', views.test4),
test.html 的页面:
<body> <ul> {% for user in user_list %} <li>{{ user }} | <a href="/edit/{{ user }}/">编辑</a></li> {% endfor %} </ul> </body>
test3 和 test4 的 views.py:
def test3(request): user_list=[ "george","jack","tony" ] return render(request,"test.html",{"user_list":user_list}) def test4(request,a1): """ url不是GET传参,所以函数也不能用GET去拿取值 :param request: a1的值是url中w+的值 :return: """ print(a1) return HttpResponse("....")
页面url效果:
总结:这个正则的方式是可以写多个的,但是在函数中,要加与其对应的参数,比如a2,并且,这种方式的写法是位置传参。
3:终止符 '^....$':
'^login$'
4:伪静态(html):html就是伪静态
伪静态:在访问网址时,静态网址要快于动态网址,所以加伪静态可以提高响应效率。
^login/(?p<a1>\w+).html$
5 路由分发:
在项目名的urls中用include方法,将路由分放,使每个文件件的路由关系独立。
from django.conf.urls import url,include urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include('app01.urls')), ]
这样,app01文件夹下的url就可以独立了
app01中的url就要加上app01的路径。
在app01中的urls.py中
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^login.html$',views.login), ]
在app01的views中加login
def login(request): return HttpResponse("ok")
也可在项目名中的url中,定义错误页面
def default(request): return HttpResponse("404 Not Found")
在项目名的url中设置默认页面:
url(r'^ ', views.default)
这样就默认页面是index函数的相关数据了。
6:路由别名反向生成URL(给URL的关系命名)
在url后加name,可以通过name反向找到url。
url(r'^index/',views.index,name='n1'),
在views中导入 reverse 反转。
from django.urls import reverse def index(request): user_list = [ "wang", "george", ] v = reverse("n1") print(v) #这个v就是url:index
在url中使用正则:
r'^index/(?P<a1>\w+).html$' 在函数中,def index(request,a1):
在reverse中加:
v = reverse('n1',args=(1, )) #数字1,不固定,写几都行。
这样写的效果就是:
在url中,无论index的后面加什么,在后端的index中,都为1。 /index/1/
在用正则时要注意的是:
(\w+) 的 reverse中为args(xxxx, ) (?p<a1>\w+) 时,reverse中为kwargs={"a1":11111}
v = reverse("n1",kwarge={"a1":1111})
在前端中,也可以用别名:
<from method="POST" action='/login/'> '/login/' ----> 也可以写成 "{% url "n1" %}" 这时,前端的别名会去反向生成url。
<from method="POST" action="{% url "n1" %}">
在url中是:
url(r'^login/', views.login,name="n1")
在前端的for中的写法:
{% for i in user_list %} <li>{{ i }} | <a herf="{% url "n1" i %}"> 编辑 </a></li> {% endfor %}
--------- END --------