django版本區別

朱饱饱發表於2024-03-19

"""
1.django1.X路由層使用的是url方法
    而在django2.Xhe3.X版本中路由層使用的是path方法
    url()第一個引數支援正則
    path()第一個引數是不支援正則的 寫什麼就匹配什麼
    
    
    如果你習慣使用path那麼也給你提供了另外一個方法
        from django.urls import path, re_path
        from django.conf.urls import url
        
        re_path(r'^index/',index),
    url(r'^login/',login)
  2.X和3.X裡面的re_path就等價於1.X裡面的url
 
 
2.雖然path不支援正則 但是它的內部支援五種轉換器
    path('index/<int:id>/',index)
    # 將第二個路由裡面的內容先轉成整型然後以關鍵字的形式傳遞給後面的檢視函式

    def index(request,id):
    print(id,type(id))
    return HttpResponse('index')
    
  
  
  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...)
"""

相關文章