• 04.路由配置


    1.1 Django路由分发

    # mysite/urls.py
    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        # 配置路由分发
        path('app01/', include(('app01.urls', 'app01'), namespace='app01')),
    ]

    1.2 普通url

    1.2.1 app01/urls.py

    from django.urls import path, re_path
    from app01 import views
    
    urlpatterns = [
        re_path('index1/$', views.index1, name='indexname1'),          # 方法1:无正则匹配url
    ]

    1.2.2 app01/views.py

    from django.shortcuts import HttpResponse
    
    # 方法1:无正则匹配url( http://127.0.0.1:8000/index1/?uid=1 )
    def index1(request):
        print( request.GET )             # {"uid": "1"}
        nid = request.GET.get('uid')    # 1
        return HttpResponse('无正则匹配url')

    1.3 正则的url (d+)

    1.3.1 app01/urls.py

    from django.urls import path, re_path
    from app01 import views
    
    urlpatterns = [
        re_path('index2/(d+)/$', views.index2, name='indexname2'),     # 方法2:基于(d+)正则的url
    ]

    1.3.2 app01/views.py

    from django.shortcuts import HttpResponse
    
    # 方法2:基于(d+)正则的url(  http://127.0.0.1:8000/index2/1/  )
    def index2(request, uid):
        print( uid )                    # 1
        return HttpResponse('基于(d+)正则的url')

    1.4 正则分组(?P<nid>d+)

    • 基于正则分组(?P<nid>d+),可以不考虑接收参数顺序 (推荐)

    1.4.1 app01/urls.py

    from django.urls import path, re_path
    from app01 import views
    
    urlpatterns = [
        re_path('index3/(?P<nid>d+)/(?P<pid>d+)/$', views.index3, name='indexname3'),        # 方法3:基于(d+)正则的url
    ]

    1.4.2 app01/views.py

    from django.shortcuts import HttpResponse
    
    # 方法3:基于正则分组(?P<nid>d+)(  http://127.0.0.1:8000/app01/index3/1/2/  )
    def index3(request, nid, pid):
        print(nid)                     # 1
        print(pid)                     # 2
        return HttpResponse('基于正则分组url')

    1.5 使用name构建自己想要的url

    1.5.1 app01/urls.py 

    from django.urls import path, re_path
    from app01 import views
    
    urlpatterns = [
        re_path('index4/$', views.index4),                               # 方法4:使用name构建自己想要的url
    ]

    1.5.2 app01/views.py

    from django.shortcuts import HttpResponse
    from django.urls import reverse
    
    # 方法4:使用name构建自己想要的url (http://127.0.0.1:8000/index4/)
    def index4(request):
        url1 = reverse('indexname1')                         # /index1/
        url2 = reverse('indexname2', args=(1,))                  # /index2/1/2/
        url3 = reverse('indexname3', kwargs={'pid': 1, "nid":2})       # /index3/1/2/
        return render(request, 'index.html')

    1.5.3 反解出url中的name

      根据request.path中的绝对路径反解出url中的name名字

    resolve_url_obj = resolve(request.path)         # request.path路径: /student/homework_detail/52
    resolve_url_obj.url_name                   # 从path中解析出url名字 url_name = homework_detail
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    CentOS 添加sudo 用户
    CentOS 7 Hostname
    Java 两线程交替打印奇偶数(一)
    Angular2 Forms
    Built-in Components
    How Angular Works
    数字签名算法
    不对称加密算法
    对称加密算法
    消息摘要算法
  • 原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14788722.html
Copyright © 2020-2023  润新知