美文网首页
Django框架的url路由规则系统(七)

Django框架的url路由规则系统(七)

作者: 梦捷者 | 来源:发表于2019-08-03 21:02 被阅读0次

一、 urls.py的作用(项目目录下的urls.py为根配置)

1、 URL配置(URL conf)就像是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。url的加载就是从根配置文件中开始。
2、注意事项:

  • 当一个请求来到时,首先先到项目目录下的urls.py(根URLconf模块)中,查找相应的路由规则。在urls.py中urlpatterns是一个列表,它里面的每个元素就是一个路由规则。
  • 根配置模块中,里面定义了urlpatterns变量。
  • urlpatterns里面含有django.urls.path,django.urls.re_path对象。
  • 按顺序运行每个url路由规则,在被第一个匹配的url的规则(模式)匹配后停止。
  • 一旦匹配成功,django导入并且调用给定的视图。
  • 如果中间出错误或则没有匹配到相应的路由规则,返回404。

二、url(路由规则)例子

1、在项目目录下urls.py文件中写路由规则


2、在项目目录创建了一个views.py文件
3、在地址栏中输入url来进行访问django服务器 注意:只有当你输入的url跟后台配置的url一致才会调用url对应的视图函数。当地址为:127.0.0.1:8000/test/python

三、 path方法的基本规则(重点):

1、示例:path('test/<xx>/',views.test)

  • 使用尖括号(<>)从url中捕获值。包含一个转化器类型(converter type),将匹配任何字符串,当然也包括了 / 字符。
  • 当前面的url匹配成功后就会调用后面的视图函数。

2、基本格式:path(route,view,kwargs=None,name=None)

  • route:是一个字符串形式的url规则。
  • view:是一个视图函数。
  • kwargs:是一个额外参数,传递给view,必须是一个字典形式。
  • name:url的命名。

3、在url中捕获参数

  • 在url规则中可以使用'<对应视图函数的参数>'就可以捕获url中的值,传递给相应的视图函数。

4、类型转化器

  • 主要将捕获的url转化为相应的类型。

四、path方法中支持的转换器

  • str
    匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式。
  • int
    匹配正整数,包含0。
  • slug
    匹配字母、数字以及横杠、下划线组成的字符串。
  • uuid
    匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  • path
    匹配任何非空字符串,包含了路径分隔符。

五、转换器的使用

1、设置url路由规则:
path('test/<int:xx>/',views.test3)#指定被捕获的参数为整数类型。
2、在视图中将获取到的参数和参数的类型打印出来:

def test3(request,xx):

    print(xx,type(xx))

    return HttpResponse('hello %s'%xx)

注意:注意:xx名称必须要一致。
3、完整示例:

path('detail/<pk>-<slug>/', views.detail) #可以用-来连接,但是参数必须位置相同。
def detail(request, pk, slug):   
        return HttpResponse('这是第%s个学生,%s太坏了'% (pk, slug))

六、re_path方法的正则匹配

1、urls.py文件中的代码

re_path('^hello/$',views.test5),

re_path('^hello/(?P<yy>[0-9]+)/',views.test6),

2、views.py文件中的代码

def test5(request):

    return HttpResponse('这是用的re_path设置的')

def test6(request,yy):

    print(yy,type(yy))

    return HttpResponse('hello %s'%yy)

3、注意注意:

  • re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students),当分了组就要和位置参数一一对应,不分组和关键字参数一一对应。
  • django的url只搜索路径部分,跟参数以及请求方法无关。

七、项目目录下和app下的urls.py

1、一个url对应一个视图函数,但我们的视图越来越多时,url也就越来越多。

2、include的作用:一个project有一个总的urls.py,各个app也可以自己建立自己的urls.py,用include()函数在project的urls.py文件进行注册。

3、include使用的例子如下:

  • 项目目录下的主urls.py
from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [ path('admin/', admin.site.urls), path('book/',include('book.urls')),] 
  • 为APP中books里面的urls.py
from django.urls import path

from . import views

urlpatterns = [ path('index/',views.index), ] 
  • 为APP中books里面的views.py
from django.http import HttpResponse
def index(request):
return HttpResponse('这个book的首页!!')

八、kwargs参数的作用

1、kwargs传递一个Python 字典作为额外的参数传递给视图函数。

# 主urls.py文件
from django.contrib import admin
from django.urls import path,include
urlpatterns = [ path('admin/', admin.site.urls), path('book/',include('book.urls'),{'switch':'true'}),]

2、Kwargs为字典类型可以传递额外的参数到views中使用,include的时候需要统一给下面的url一些参数的时候可以用此参数。并且视图函数中可以通过关键字参数获取到。

# 为APP中books里面的views.py
from django.http import HttpResponse
import datetime
def index(request,**kwargs):
    if kwargs.get('switch') == 'true':
        print(datetime.datetime.now())
    return HttpResponse('这个book的首页!!') 

3、注意事项

  • 在path,re_path方法中,可以向视图函数传递一个kwargs字典参数。
    当kwargs中的key与url捕获的key一致的时候,以kwargs中的key为主。
re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students, kwargs={'swich': True})
ef students(request, year, month, swich):

        return HttpResponse('这是%s年%s月%s'% (year,month, swich))
  • 如果是在根配置urls.py中的话,即如下面所示:
urlpatterns = [ path('admin/', admin.site.urls), path('teacher/', include('teacher.urls'),kwargs={'swich': True})]

这样就会给teacher子应用的每条路由规则传一个{'swich': True}参数,有的时候业务需求要。

相关文章

  • Django框架的url路由规则系统(七)

    一、 urls.py的作用(项目目录下的urls.py为根配置) 1、 URL配置(URL conf)就像是Dja...

  • 4.Django路由系统

    Django路由系统 URL调度器Django 允许自由地设计你的URL,不受框架束缚。Django认为,对于高质...

  • django框架进阶

    @[toc] Django的URL路由机制 Django的URL路由配置 路由是关联URL及其处理函数关系的过程 ...

  • django路由url.py详解_Django学习笔记(四)-p

    django路由url.py详解_Django学习笔记(四)-python3 url路由方式: 1. patter...

  • Django框架路由系统

    路由系统(controller) 路由系统(URL配置)它就是URL与要为该URL调用的视图函数之间的映射表,也就...

  • 浅谈python web三大框架

    Django(ORM、URL分发系统、MTV ) Django是一个开放源代码的Web应用框架,由Python写成...

  • Django2.0中URL的路由机制

    路由是关联url及其处理函数关系的过程。 Django的url路由配置在setting.py文件中ROOT_URL...

  • thinkphp5学习笔记(三)路由配置

    URL请求的执行流程 路由模式 路由注册 路由规则 路由地址 路由参数 变量规则 路由分组 别名路由 路由绑定

  • Django--路由控制

    一 Django中路由的作用 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要...

  • ThinkPHP5路由

    路由作用 1.根据实现定义的路由规则,检验URL请求,确定执行或者拒绝; 2.路由规则可自定义,隐藏了原URL地址...

网友评论

      本文标题:Django框架的url路由规则系统(七)

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