4.5、Django - URL之Django内置的URL转换器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012111465/article/details/84929376

1、 转化器

可以通过

from django.urls import converters

引入转换器,或查看对应的有哪些转换器 。

2.1 整型int转换器

控制参数类型,比如,控制出版社的id为整型 。

在douAPI项目APP为douBook的views.py中:

from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse

# def book_info(request):
#     return HttpResponse("图书详情")

# def book_info_detail(request,book_id):
#     # 从数据库中拿book_id,省略
#     your_book_id = 'your book id is :{book_id}'.format(book_id = book_id)
#     return HttpResponse(your_book_id)

# 注意book_author_detail函数与book_info_detail(request,book_id)的区别,前者的除了request参数写在括号内,其余不写,在函数体内部体现
# def book_author_detail(request):
#     # 从数据库中拿id
#     author_id = request.GET.get('id') # 或者author_id = request.GET['id']
#     content = "Author's id of the book is : {input_id}".format(input_id = author_id)
#     return HttpResponse(content)


def book_publisher_id(request,publisher_id):
    content = "Publisher's id of the book is : {input_id}".format(input_id = publisher_id)
    return HttpResponse(content)

在douAPI项目下的urls.py中:

from django.urls import path
from douBook import views

urlpatterns = [
    # path('douBook/', views.book_info),
    # # 注意:参数<book_id>必须与APP为douBook下的views.py中book_info_detail函数的参数book_id保持一致!!!
    # path('douBook/<book_id>/', views.book_info_detail),
    # 注意:通过查询字符串的形式传参,即GET请求方法,不需要加<>,author_id部分也可以随意写,比如写成Auth_id
    # path('douBook/author/', views.book_author_detail),
    path('douBook/<int:publisher_id>/', views.book_publisher_id),
]

当输入整数时,结果如下:

在这里插入图片描述

当输入非整数时,结果会报404错误:

在这里插入图片描述

2.2 str转换器

除了/其余都可以作为str类型,默认时str转换器 。

2.3 uuid转换器

uuid转换器具有唯一性,只满足uuid.uuid4()类型的 。

import uuid
print(uuid.uuid4())
# output:  d4d16dd7-5b81-42f8-9c2a-397c2e193ad3

在douAPI项目APP为douBook的views.py中:

from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse

# def book_info(request):
#     return HttpResponse("图书详情")

# def book_info_detail(request,book_id):
#     # 从数据库中拿book_id,省略
#     your_book_id = 'your book id is :{book_id}'.format(book_id = book_id)
#     return HttpResponse(your_book_id)

# 注意book_author_detail函数与book_info_detail(request,book_id)的区别,前者的除了request参数写在括号内,其余不写,在函数体内部体现
# def book_author_detail(request):
#     # 从数据库中拿id
#     author_id = request.GET.get('id') # 或者author_id = request.GET['id']
#     content = "Author's id of the book is : {input_id}".format(input_id = author_id)
#     return HttpResponse(content)


def book_publisher_id(request,publisher_id):
    content = "Publisher's id of the book is : {input_id}".format(input_id = publisher_id)
    return HttpResponse(content)

在douAPI项目下的urls.py中:

from django.urls import path
from douBook import views

urlpatterns = [
    # path('douBook/', views.book_info),
    # # 注意:参数<book_id>必须与APP为douBook下的views.py中book_info_detail函数的参数book_id保持一致!!!
    # path('douBook/<book_id>/', views.book_info_detail),
    # 注意:通过查询字符串的形式传参,即GET请求方法,不需要加<>,author_id部分也可以随意写,比如写成Auth_id
    # path('douBook/author/', views.book_author_detail),
    # path('douBook/<int:publisher_id>/', views.book_publisher_id),
    path('douBook/<uuid:publisher_id>/', views.book_publisher_id),
]

当随意输入一个字符串时,结果报404错误:

在这里插入图片描述

当将上面生成的uuid输入时,结果如下:

在这里插入图片描述

2.4 slug转换器

该转换器满足:regex = '[-a-zA-Z0-9]'
即:数字、大小写字母、-满足,其余不行 。

2.5 path转换器

上面谈及str转换器不能有/ 而path转换器是可以包含任意字符的,包括/
在这里插入图片描述

2.6 自定义转化器(省略)

猜你喜欢

转载自blog.csdn.net/u012111465/article/details/84929376