自定義URL(PATH)轉換器筆記


自定義URL(PATH)轉換器筆記:

需求:

實現一個獲取文章列表的demo,用戶可以根據/articles/文章分類/的方式來獲取文章。其中文章分類采用的是分類1+分類2+分類3...的方式拼接的,並且如果只有一個分類,那就不需要加號。示例如下:

# 1. 第一種:獲取python分類下的文章
/articles/python/
# 2. 第二種:獲取python和django分類下的文章
/articles/python+django/
# 3. 第三種:獲取python和django和flask分類下的文章
/articles/python+django+flask/
以此類推...

在“文章分類”參數傳到視圖函數之前要把這些分類分開來存儲到列表中。
比如參數是python+django,那么傳到視圖函數的時候就要變成['python','django']

以后在使用reverse反轉的時候,限制傳遞“文章分類”的參數應該是一個列表,並且要將這個列表變成python+django的形式。

自定義URL轉換器:

之前已經學到過一些django內置的url轉換器,包括有int、uuid等。有時候這些內置的url轉換器並不能滿足我們的需求,因此django給我們提供了一個接口可以讓我們自己定義自己的url轉換器。

自定義url轉換器按照以下五個步驟來走就可以了:

  1. 定義一個類,直接繼承自object就可以了。
  2. 在類中定義一個屬性regex,這個屬性是用來限制url轉換器規則的正則表達式。
  3. 實現to_python(self,value)方法,這個方法是將url中的值轉換一下,然后傳給視圖函數的。
  4. 實現to_url(self,value)方法,這個方法是在做url反轉的時候,將傳進來的參數轉換后拼接成一個正確的url。 5. 將定義好的轉換器,使用django.urls.converters.register_converter方法注冊到django中。

示例代碼如下:

from django.urls import register_converter

class CategoryConverter(object):
    regex = r'\w+|(\w+\+\w+)+'

    def to_python(self,value):
        # python+django+flask
        # ['python','django','flask']
        result = value.split("+")
        return result

    def to_url(self,value):
        # value:['python','django','flask']
        # python+django+flask
        if isinstance(value,list):
            result = "+".join(value)
            return result
        else:
            raise RuntimeError("轉換url的時候,分類參數必須為列表!")

register_converter(CategoryConverter,'cate')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM