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 --------

原文地址:https://www.cnblogs.com/george92/p/8505162.html