上一篇:Django之创建项目【二】点击跳转
目录篇:Django之前后端交互篇目录 点击跳转
下一篇:Django之view视图处理【交互篇二】点击跳转
目录
实战Django的URL路由映射关系:https://blog.csdn.net/Burgess_zheng/article/details/86528727
1.(静态url)一个url对应一个执行函数,或者执行类
FBV:
path('burgess_web/', views.func),#最新版本的Django路由使用path url(r'^burgess_web/', views.func), #2.0版本使用的是url #匹配该url执行对应的函数 views下的func函数
CBV:
path('burgess_web/', views.Class.as_view()), #最新版本的Django路由使用path url(r'^burgess_web/', views.Class.as_view()), #2.0版本使用的是url #匹配该url执行对应views下的自定义类Class(该类继承djangon的类)
2.(动态url)一类的url对应一个执行函数
FBV:
#动态url
#1.位置形参 re_path('burgess01-(\d+)-(\d+).html/', views.test01), #最新版本的Django路由使用path #url(r'^burgess01-(\d+)-(\d+).html/', views.test01), #2.0版本使用的是url #2.关键形参 re_path('burgess02-(?P
\d+)-(?P \d+).html/', views.test02), #最新版本的Django路由使用path #url(r'^burgess02-(?P \d+)-(?P \d+).html/', views.test02), #2.0版本使用的是url #关键形参数量对应接收 re_path('burgess03-(?P \d+)-(?P \d+).html/', views.test03), #最新版本的Django路由使用path # url(r'^burgess03-(?P \d+)-(? #动态url对应处理函数的3种接收方式
def test01(request,*args): print(args) return HttpResponse('args:%s'%json.dumps(args)) def test02(request,*args,**kwargs): print(kwargs) return HttpResponse('kwargs:%s'%json.dumps(kwargs)) def test03(request,nid,uid): print(nid,uid) return HttpResponse('nid:%s,uid:%s' %(uid,nid))
CBV: 和FBV一样的就是把处理函数改成处理的类而已
实战Django的URL路由name值:https://blog.csdn.net/Burgess_zheng/article/details/86529185
name的出现是为了什么?就是为了构架自己想要的url
1.html(模板)通过name获取url并且可以进行修改 (两种方式)
1.{% url 'indexx' 2 6 %}
URL:re_path('burgess01-(\d+)-(\d+).html/', views.test01,name='burgess01'),#最新版本的Django路由使用path
#url(r'^burgess01-(\d+)-(\d+).html/', views.test01,name='burgess01'), #2.0版本使用的是url
Templates:{% url 'burgess01' 2 6 %} #修改用户访问的url的动态参数
burgess01 == burgess01-(\d+)-(\d+).html #用户访问的真实url
'burgess01' 2 6 == burgess01-2-6.html
#如果用户访问的url:burgess01-13-16.html
#该url对应函数进行render
#render的html使用{% url 'burgess01' 2 6 %} == burgess01-2-16.html
2.{{ request.path_info }}
URL:re_path('burgess01-(\d+)-(\d+).html/', views.test01,name='burgess01'), #最新版本的Django路由使用path
#url(r'^burgess01-(\d+)-(\d+).html/', views.test01,name='burgess01'), #2.0版本使用的是urlTemplates:
{{ request.path_info }} #获取用户访问的真实url
request.path_info ==burgess01-(\d+)-(\d+).html #用户访问的真实url
#如果用户访问的url:burgess01-1-2.html
#该url对应函数进行render
#render的html使用{ request.path_info }} == burgess01-1-2.html2.func函数通过name获取url并且可以进行修改(两种方式)
1.位置参数
URL:
re_path('burgess01-(\d+)-(\d+).html/', views.test01,name='burgess01'), #最新版本的Django路由使用path
#url(r'^burgess01-(\d+)-(\d+).html/', views.test01,name='burgess01') #2.0版本使用的是url
FUNC:
def test01(request,*args):
from django.urls import reverse #修改用户访问的url动态参数
names = reverse('burgess01', args={90,88,}) #修改用户的url的动态参数
print(names)
return render(request,'burgess.html',{'names':names}) #进行模板渲染,返回指定的html2.关键参数
URL:
re_path('burgess02-(?P\d+)-(?P \d+).html/', views.test02,name='burgess02'),
#url(r'^burgess02-(?P\d+)-(?P \d+).html/', views.test02,name='burgess02'),
FUNC:
def index(request,nid,uid):
from django.urls import reverse
names = reverse('burgess02',kwargs={"nid":80,"uid":90})
print(names)
return render(request,'burgess.html',{'names':names}) #进行模板渲染,返回指定的html
实战Django的URL路由分发:https://blog.csdn.net/Burgess_zheng/article/details/86529768
多个app的时候我们使用路由分发,因为如果把所有的app写在统一个urls.py里面会导致复杂不说,以后分工就有点麻烦。
如:一个做运维自动化平台的,Monitor(监控)的团队,一个做cmdb的团队,然后2个团队修改同个urls.py完全没必要.,这样后期修改就不会乱了也无需修改对方团队的东西(互不影响)
应用场景:构架你自己的运维平台的话,有资产管理啊,Monitor啊,openstyle..等之类project(urls.py):
from django.contrib import admin from django.urls import path,re_path #Django版本2.0以上 from django.conf.urls import url #Django2.0 from django.conf.urls import include urlpatterns = [ path('admin/', admin.site.urls), #路由分发 #cmdb_app re_path('cmdb/',include("cmdb.urls")), #url(r'^cmdb/', include("cmdb.urls")), #monitor_app re_path('monitor/', include("monitor.urls")), # url(r'^monitor/', include("monitor.urls")), ]
app(urls.py):
from django.urls import path,re_path #Django版本2.0以上 from app_name import views from django.conf.urls import url #Django2.0 from django.conf.urls import include urlpatterns = [ re_path('',views.burgess_func), #url(r'',views.burgess_func), ]
就是在url自定义一个关键实参,用户访问的时候,url对应的函数也需要写个关键形参接收
#URL定义默认值
from django.contrib import admin from django.urls import path,re_path #Django版本2.0以上 from project_burgess import views from django.conf.urls import url #Django2.0 urlpatterns = [ path('admin/', admin.site.urls) re_path('xxx/', views.func,{'name':'root'}), #{'name':'root'}:默认值==关键形参 #url(r'^xxx/', views.func,{'name':'root'}), #{'name':'root'}:默认值==关键形参 ]
#URL对应函数接收默认值
from django.shortcuts import render,HttpResponse,redirect def func(requst,name): #name形参:接收来自url的默认值 return HttpResponse('name')
实战Django的URL的命名空间:https://blog.csdn.net/Burgess_zheng/article/details/86530913
简单理解是用户访问的两个不同的父URL指向相同的子URL
#定义父URL
from django.contrib import admin from django.urls import path,re_path #Django版本2.0以上 from project_burgess import views from django.conf.urls import url #Django2.0 from django.conf.urls import include urlpatterns = [ path('admin/', admin.site.urls) #命名空间namespace re_path('a/',include("namespace.urls", namespace='author')), #url(r'^a/', include("namespace.urls", namespace='author')), re_path('b/',include('namespace.urls', namespace='publisher')), #url(r'^b/', include('namespace.urls', namespace='publisher')), ]
#定义子URL(app下)
__author__ = "Burgess Zheng" #!/usr/bin/env python #-*- coding:utf-8 -*- from django.urls import path,re_path #Django版本2.0以上 from namespace import views from django.conf.urls import url #Django2.0 app_name='namespace' urlpatterns = [ re_path('index/',views.index,name='index'), #url(r'^index/', views.index,name='index'), ]
#URL对应函数使用命名空间+name值重生URL
from django.shortcuts import render,HttpResponse,redirect # Create your views here. def index(request): from django.urls import reverse # 根据URL name 进行生成 url a = reverse('author:index') #根据前缀的url生成该前缀的整个父子url print(a)#打印结果 127..../a/index/ b = reverse('publisher:index') #根据前缀的url生成该前缀的整个父子url print(b)#打印结果 127..../b/index/ return HttpResponse('a:%s b:%s'%(a,b))
上一篇:Django之创建项目【二】点击跳转
目录篇:Django之前后端交互篇目录 点击跳转
下一篇:Django之view视图处理【交互篇二】点击跳转