11.Django_url轉換器

在項目中,有時間需要前端傳遞特定類型的參數過來,比如說int。那麼此時就需要用到Django內置的url轉換器,它可以把傳遞過來的參數轉換成指定的類型
首先看下源碼
from django.urls import converters
進入converters類,可看到提供了5種可轉換類型:

DEFAULT_CONVERTERS = {
    'int': IntConverter(),
    'path': PathConverter(),
    'slug': SlugConverter(),
    'str': StringConverter(),
    'uuid': UUIDConverter(),
}
  • IntConverter():可傳遞任意整數
    1. [0-9]整形數字
    2. +一個或多個
class IntConverter:
    regex = '[0-9]+'

    def to_python(self, value):
        return int(value)

    def to_url(self, value):
        return str(value)
  • PathConverter():可傳遞任意字符串、符號等
    1. .:任意字符
    2. +:一個或多個
class PathConverter(StringConverter):
    regex = '.+'

  • SlugConverter()
  1. ‘[-a-zA-Z0-9_]+’:由-或a-z或A-Z或0-9或_中的一個或多個組成的字符串 ;
class SlugConverter(StringConverter):
    regex = '[-a-zA-Z0-9_]+'

  • StringConverter():默認的轉換器
  1. [^/]+:除了/之外的都可以
class IntConverter:
    regex = '[0-9]+'

    def to_python(self, value):
        return int(value)

    def to_url(self, value):
        return str(value)
  • UUIDConverter()
  1. [0-9a-f]:表示只能是0到9之間的任意整形數字和a-f 之間的字母
  2. {8}:表示只能有8個這樣的字母或者數字。
  3. -即指定了這個字符,必須使用它,整個字符竄的意思就是8個[0-9a-f],後面用一個-連接
  4. 後面的以此類推
  • 總結

'int': IntConverter():一個或多個整數(0-9)
'path': PathConverter():所有字符串
'slug': SlugConverter():英文中的橫杆或者英文字符或者阿拉伯數字或者下劃線
'str': StringConverter(): 除了斜槓/以外的所有字符
'uuid': UUIDConverter():只有滿足uuid形式的字符串

例子:

例子

  1. project1/views.py添加一個視圖方法,用於接收id參數並返回
def getId(request,id):
    return HttpResponse(F'id是{id}')
  1. project1/urls.py添加對應的映射
path(r'getId/<int:id>',views.getId,name="getId")

3.訪問http://localhost:8000/project1/get_id/3

在這裏插入圖片描述

如果參數不是整數,傳遞過去後無法轉換成int類型,則會404,比如訪問http://localhost:8000/project1/get_id/8.2

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章