Django 路由设置

作者: 复仇天神 | 来源:发表于2018-03-10 22:34 被阅读0次

    由于Django的升级,更新了很多方法,这里将持续更新此文。内容均为我个人有亲身使用过的感受,由于个人学习有限,如果有错误,那就凑合着看吧

    看了下Django2.0 的文档,列出了三个特性

    • 1、更简单的URL路由语法 (Simplified URL routing syntax)

    • 2、admin应用的针对移动设备的优化改进(Mobile-friendly contrib.admin)

    • 3、支持SQL开窗表达式(Window expressions)

    在使用中,配置urls.py 的时候,看了默认注释

    
    The `urlpatterns` list routes URLs to views. For more information please see:
        https://docs.djangoproject.com/en/2.0/topics/http/urls/
    Examples:
    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  path('', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
    Including another URLconf
        1. Import the include() function: from django.urls import include, path
        2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
    

    很明显推荐使用了django.urls.path区别如下

    url(r'^user/(?P<age>[0-9]{3})/$', views.age),
    
    path('user/<age>/', views.year),
    

    这里我引用之前一个博主写的代码
    Django 1.x内容

    from django.conf.urls import url
    def year_archive(request, year):
        year = int(year) # convert str to int
        # Get articles from database
    def detail_view(request, article_id):
        pass
    def edit_view(request, article_id):
        pass
    def delete_view(request, article_id):
        pass
    urlpatterns = [
        url('articles/(?P<year>[0-9]{4})/', year_archive),
        url('article/(?P<article_id>[a-zA-Z0-9]+)/detail/', detail_view),
        url('articles/(?P<article_id>[a-zA-Z0-9]+)/edit/', edit_view),
        url('articles/(?P<article_id>[a-zA-Z0-9]+)/delete/', delete_view),
    ]
    

    Django 2.x内容

    from . import views
    urlpatterns = [
        path('articles/2003/', views.special_case_2003),
        path('articles/<int:year>/', views.year_archive),
        path('articles/<int:year>/<int:month>/', views.month_archive),
        path('articles/<int:year>/<int:month>/<slug>/', views.article_detail),
    ]
    

    我这里记录下,path所用于的代数式,好吧,叫做转换器

    - str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    - int,匹配正整数,包含0。
    - slug,匹配字母、数字以及横杠、下划线组成的字符串。
    - uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    - path,匹配任何非空字符串,包含了路径分隔符
    1.X 2.0 备注
    - django.urls.path 新增,url的增强版
    django.conf.urls.include django.urls.include 路径变更
    django.conf.urls.url django.urls.re_path 异名同功能,url不会立即废弃

    整个url的调用主要有4个步骤

    • url匹配
    • 正则捕获
    • 变量类型转化
    • 视图调用

    新的path语法多用于以下场景:
    1、类型自动转化
    2、公用正则表达式

    哈,谢谢各位了

    相关文章

      网友评论

        本文标题:Django 路由设置

        本文链接:https://www.haomeiwen.com/subject/pxsyfftx.html