Django 路由设置
2018-03-10 本文已影响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、公用正则表达式
哈,谢谢各位了