1. 程式人生 > >五、自定義轉化器,檢視層之httprequest對像、HttpResponse、JsonRepons

五、自定義轉化器,檢視層之httprequest對像、HttpResponse、JsonRepons

一、虛擬環境

1 用pychanrm建立--->files-->newproject--->選擇虛擬環境
2 settings-->project建立
3 用命令列建立,詳見https://www.cnblogs.com/liuqingzheng/p/9508851.html

二、django 2.0和django 1.0 路由層區別

(*****url,re_path分組分出來的資料,是字串)
-re_path:跟1.0的url用法相同
-path:傳的路徑,是準確路徑
-re_path ---->等於原來的url (re_path模組)
5個轉換器-->path('test/<path:year>', views.re_test),
	str,匹配除了路徑分隔符(/)之外的非空字串,這是預設的形式
	int,匹配正整數,包含0。
	slug,匹配字母、數字以及橫槓、下劃線組成的字串。
	uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
	path,匹配任何非空字串,包含了路徑分隔符(/)(不能用?)

-自定義轉換器(django2.0)

print('%010d'%12)
# 結果 :0000000012 (共10位,不足的用0補齊)

urls.py

# 1、定義一個類:
# 自定義轉換器 
class MyCon:
    # 寫一個正則表示式,名字必須命名為regex
    regex='[0-9]{4}'

    # 匹配出來的資料,會傳到這裡,retrun回去的,會被檢視函式接收
    def to_python(self,value):
        return int(value)   # ×××
        # return value   # 字串型別

    # 反向解析用的
    def to_url(self,value):
        return "%04d" %value
# 2 匯入模組        
from django.urls import register_converter        
# 轉換器 register_converter
register_converter(MyCon,'yyy')
# 3 寫入表示式
urlpatterns = [
path('test/<yyy:year>',views.re_test),
]

views.py

def re_test(request,year):
    return HttpResponse('ok')

訪問:http://127.0.0.1:8000/test/2018

返回:ok 


urls.py

from django.urls import path,re_path,register_converter
from app01 import views
class MyCon:
    regex='[0-9]{4}'
    def to_python(self,value):
        return value
    def to_url(self,value):
        return "%04d" %value
register_converter(MyCon,'yyy') 
urlpatterns = [   
    path('test/<yyy:year>',views.re_test,name='test'),
]

views.py

from django.shortcuts import render,HttpResponse,reverse
def re_test(request,year):
    url=reverse('test',args=(9,))
    print(url)
    return HttpResponse('ok')

返回:/test/0009

三、APPEND_SLASH

settings.py

# 預設為True ,設定為False 後 http://127.0.0.1:8000/test 不會為test補全後面的'/',開啟網頁後會成為404(若沒有這個頁面的話)
APPEND_SLASH=False

四、檢視層之http request對像