1. 程式人生 > 其它 >Django版本區別

Django版本區別

Django版本區別

"""
1、django1.x路由層使用的是url方法
django2.x和3.x版本中路由層使用的是path方法
    url() 第一個引數支援正則
    path() 第一個引數是不支援正則的 寫什麼就匹配什麼
    
    如果你不習慣使用path  那麼也提供給你了另外一個方法 re_path
    from django.urls import path,re_path
    
    urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'index/',index)
]
    2.x和3.x裡面的re_path就等價於1.x裡面的url
    


2、雖然path不支援正則 但是它的內部支援五種轉換器
    path('index/<int:id>/',index)
    # 將第二個路由裡面的內容先轉成整型 然後以關鍵字的形式傳遞給後面的檢視函式
    
詳情參考部落格:https://www.cnblogs.com/xiaoyuanqujing/articles/11642628.html

    str,匹配除了路徑分隔符(/)之外的非空字串,這是預設的形式
    int,匹配正整數,包含0。
    slug,匹配字母、數字以及橫槓、下劃線組成的字串。
    uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-    6c931e272f00。
    path,匹配任何非空字串,包含了路徑分隔符(/)(不能用?)
    

3、除了有預設的五個轉換器之外 還支援自定義轉換器(瞭解)
# 自定義
class MonthConverter:
    regex='\d{2}' # 屬性名必須為regex

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

    def to_url(self, value):
        return value # 匹配的regex是兩個數字,返回的結果也必須是兩個數字
   
# 使用
from django.urls import path,register_converter
from app01.path_converts import MonthConverter
# 先註冊轉換器
register_converter(MonthConverter,'mon')

from app01 import views


urlpatterns = [
    path('articles/<int:year>/<mon:month>/<slug:other>/', views.article_detail, name='aaa'),

]
    
    

4、模型層裡面1.x外來鍵預設都是級聯更新刪除的
    但是到了2.x和3.x中需要你自己手動配置引數
    models.ForeignKey(to='Publish')
    
    models.ForeignKey(to='Publish',ON_delete=models.CASCADE)
"""