zoukankan      html  css  js  c++  java
  • Django的路由层 路由控制之简单配置

    Django的路由层

    URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,

    对于客户端发来的某个URL调用哪一段逻辑代码对应执行

    django 路由 1.x 使用过 re_path

    django2.x 使用path

    先学习使用re_path语法

    在django2.x 默认使用path,使用re_path需要重新导入 才能使用

    简单的路由配置

     request 是请求对象  所有请求信息都在request里面

    View.py 视图函数 导入 HttpResponse 响应对象 ,HttpResponse 返回是字符串

    第一个
    views.py
    from django.shortcuts import render, HttpResponse
    
    # Create your views here.
    
    
    def special_case_2003(request):
        
        return HttpResponse("special_case_2003")

    urls.py 

    special_case_2003(request)
    from django.contrib import admin
    from django.urls import path, re_path
    
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
    
        # 路由配置 ---> 视图函数
        re_path(r'^articles/2003/$', views.special_case_2003),  # special_case_2003(request)
        # re_path(r'^articles/([0-9]{4})/$', views.year_archive),
        # re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
        # re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    
    
    
    ]

    访问articles/2003/

    ^articles/2003/$ 是用正则匹配 以什么开头 以什么结尾 以2003结尾  添加^和$ 确保唯一匹配
    ^articles/2003/  以任何结尾都能匹配上 ,以articles开头
    articles/2003/$  以任意开头都可以匹配上 2003结尾
     

    第二个

    ^articles/([0-9]{4})/$  [0-9]任意一个数字 {4} 意思是重复4次  只要是4位数数字,就匹配成功 就做分组
    例如
    ^articles/2004/$
    ^articles/2005/$
    在正则里 加上() 代表分组 ,分组匹配内容作为位置参数传递给对应的视图函数,分组 必须接受新的参数,视图函数要多接受参数

    路径匹配和视图函数 是多对一关系
    views.py
    from django.shortcuts import render, HttpResponse
    
    # Create your views here.
    
    
    def special_case_2003(request):
        
        return HttpResponse("special_case_2003")
    
    
    def year_archive(request, year):
    
        return HttpResponse(year)
    urls.py
    year_archive(request, 2009)
    from django.contrib import admin
    from django.urls import path, re_path
    
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
    
        # 路由配置 ---> 视图函数
        # re_path(r'^articles/2003/$', views.special_case_2003),  # special_case_2003(request)
        re_path(r'^articles/([0-9]{4})/$', views.year_archive),  # year_archive(request, 2009)
        # re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
        # re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    
    
    ]

     第三个

    ^articles/([0-9]{4})/([0-9]{2})/$   两个组, [0-9]{4} 代表4位数 数字, [0-9]{2} 代表2位数 数字
     要接受3个参数 

    month_archive(request, 2009, 12)

    views.py
    from django.shortcuts import render, HttpResponse
    
    # Create your views here.
    
    
    def special_case_2003(request):
        
        return HttpResponse("special_case_2003")
    
    
    def year_archive(request, year):
    
        return HttpResponse(year)
    
    
    def month_archive(request, year, month):
    
        return HttpResponse(year+"-"+month)
    
    

    urls.py

    from django.contrib import admin
    from django.urls import path, re_path
    
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
    
        # 路由配置 ---> 视图函数
        # re_path(r'^articles/2003/$', views.special_case_2003),  # special_case_2003(request)
        # re_path(r'^articles/([0-9]{4})/$', views.year_archive),  # year_archive(request, 2009)
        re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),  # month_archive(request, 2009, 12)
        # re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    
    
    ]

    
    
    from django.urls import path,re_path
    
    from app01 import views
    
    urlpatterns = [
        re_path(r'^articles/2003/$', views.special_case_2003),
        re_path(r'^articles/([0-9]{4})/$', views.year_archive),
        re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
        re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    ]
    
    

    注意:

    
    
    • 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
    • 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles
    • 每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义
    示例:
        '''
     一些请求的例子:
    
    /articles/2005/03/ 请求将匹配列表中的第三个模式。Django 将调用函数views.month_archive(request, '2005', '03')。
    /articles/2005/3/ 不匹配任何URL 模式,因为列表中的第三个模式要求月份应该是两个数字。
    /articles/2003/ 将匹配列表中的第一个模式不是第二个,因为模式按顺序匹配,第一个会首先测试是否匹配。请像这样自由插入一些特殊的情况来探测匹配的次序。
    /articles/2003 不匹配任何一个模式,因为每个模式要求URL 以一个反斜线结尾。
    /articles/2003/03/03/ 将匹配最后一个模式。Django 将调用函数views.article_detail(request, '2003', '03', '03')。
       
        '''
    
    
    
     
  • 相关阅读:
    Lodop实现web套打
    oracle监听文件 内容
    【数据存储】【Redis】第四章:高并发下实现分布式锁
    Demo:第二章:Java实现随机图像生成(人像,汽车,房屋等等)
    【数据存储】【Redis】第五章:Redis缓存String类型的使用场景
    【数据存储】【Redis】第三章: Redis五大数据类型实现原理
    【Java面试】:第三章:P6级面试
    【数据存储】【Redis】第二章:底层数据结构
    实战:第二十二章:i18n国际化(已实现中文,英文,波兰文)
    Demo:第三章:权限框架spring security oauth2
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/14164491.html
Copyright © 2011-2022 走看看