Django之Urls

1.  Django路由系统

    路由简单的来说就是根据用户请求的 URL 链接来判断对应的处理程序,并返回处理结果,也就是 URL 与 Django 的视图建立映射关系。

2.  Django路由系统常用的几种方式

    1.  普通路径

from django.urls import path
from shuaige import views
urlpatterns = [
    path('login/',views.login)      
]

    2.  正则路径

from django.urls import path
from django.urls import re_path
urlpatterns = [
    re_path(r'^login/$',views.login)
]

    3.  正则路径中的无名分组

        按照位置参数传参,一一对应

        urls.py

from django.contrib import admin
from django.urls import path
from django.urls import re_path
urlpatterns = [
    re_path(r'^index/(\d+)/(\d+)$',views.ceshi)
]  

        views.py

def ceshi(request,a,b):
    print(a)
    print(b)
    return HttpResponse('aaaaa')
要注意添加对应的位置参数

    4.  正则路径中的有名分组

        有名分组按关键字传参,与位置顺序无关

        urls.py

from django.contrib import admin
from django.urls import path
from django.urls import re_path
urlpatterns = [
    re_path(r'^index/(?P<a>\d+)/(?P<b>\d+)$',views.ceshi)
]

        views.py

def ceshi(request,b,a):
    print(a)
    print(b)
    return HttpResponse('aaaaa')

    5.  路由分发

        存在问题:Django 项目里多个app目录共用一个 urls 容易造成混淆,后期维护也不方便。

        解决:使用路由分发,让每个app目录都单独拥有自己的urls

        1.  在每个app目录里创建一个urls.py文件

            1.  创建两个app

                py manage.py startapp zhangxueyou

                py manage.py startapp guofucheng

            2.  分别在两个app目录下创建urls.py文件

                zhangxueyou/urls.py

from django.urls import path,include
from django.urls import re_path
from zhangxueyou import views
urlpatterns = [
    path('login/', views.login )
]

                guofucheng/urls.py

from django.urls import path
from django.urls import re_path
from guofucheng import views
urlpatterns = [
    path('login/', views.login)
]                                    

        2.  在项目名称目录下的urls文件里,统一将路径分发给各个app目录

            在项目的urls.py文件中

from django.urls import path,include
from django.urls import re_path
urlpatterns = [
     path('zhangxueyou/', include("zhangxueyou.urls")),
     path('guofucheng/', include("guofucheng.urls"))
]

        3.  访问路径

            http://172.16.7.244:8081/zhangxueyou/login/

            http://172.16.7.244:8081/guofucheng/login/  

    6.  反向解析

        随着功能的增加,路由层的url发生变化,就需要去更改对应的视图层和模板层的url,非常麻烦,不便维护。

        这时我们可以利用反向解析,当路由层 url 发生改变,在视图层和模板层动态反向解析出更改后的 url,免去修改的操作。

        反向解析一般用在模板中的超链接及视图中的重定向。

        1.  普通路径

            urls.py  给路由起个别名

path('houzi/',views.ceshi,name="ceshi")

            views.py  使用reverse反向解析           

from django.urls import reverse
def ceshi(request):
    return redirect(reverse('ceshi'))

            在模板templates中的HTML文件,利用{% url "路由别名" %}反向解析  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{% url 'ceshi' %}" method="post">
        <p>用户名:<input type="text" name="username"></p>
        <p>密码:<input type="password" name="pwd"></p>
        <input type="submit">
    </form>
</body>
</html>                      

    7.  命名空间

        命名空间是表示标识符的可见范围

        为了防止反向解析的名称一样,导致无法正确解析,所以加入了命名空间的概念。

        urls.py

path("app01/", include(("app01.urls","app01"))) 
path("app02/", include(("app02.urls","app02")))

        views.py

return redirect(reverse("app01:login")

        html

<form action="{% url 'app01:login' %}" method="post">

      

posted @ 2024-05-28 16:31  奋斗史  阅读(28)  评论(0)    收藏  举报