"""
1.django1.X路由層使用的是url方法
而在django2.X和 3.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...)
"""