1. 程式人生 > 其它 >DjangoCBV&FBV&模板層

DjangoCBV&FBV&模板層

看框架的原始碼很重要!!!

1. JsonResponse類

"""
檢視函式中的返回值
HttpResponse
render
redirect
根據報錯的反饋,證明他們本質上都是HttpResponse物件
# 參考原始碼就可以證明!! #
"""

# 1. 混合開發專案:前端頁面和後端程式碼寫到一起

# 2. 前後端分離專案:前端是一個專案,後端是一個專案,後端只需要寫介面。

json格式的資料:進行跨語言資料傳輸

json 和 pickle 方法一樣,區別在於支援的資料型別不同

# json序列化出來的資料是看得懂的,就是一個字串

# pickle序列化出來的結果看不懂,因為結果是二進位制
# pickle序列化出來的資料只能在python中使用。

# js中如何序列化
JSON.stringify()  # 序列化
JSON.parse()      # 反序列化

Json.Response(user_dict, json_dumps_params={'ensure_ascii':False})
# 可以顯示漢字了
# 參考原始碼!!!!!!!!


2. form表單上傳檔案

上傳檔案注意事項:
    1. 必須是post請求
    2. enctype引數必須是multipart/form-data
    enctype='multipart/form-data'

後端:
    在 request.FILES中接收檔案資料,其他資料一律按照請求方式接收

form表單可以傳遞的資料格式:
    1. urlencoded
    2. form-data
# 不能提交json格式的資料

"""
提交json格式的資料
    1. Ajax
    2. 第三方攻擊
        postman
        apizza

"""

資料格式有:
    1. urlencoded
    2. form-data
    3. json格式


3. FBV和CBV

FBV:fucntion based view
CBV:class based view

# CBV必須要繼承一個類
from django.views import View

class IndexView(View):
    def get(self, request):
        print('get')
        return HttpResponse('get')

"""
    CBV 中是通過請求方式確定訪問的方法
    get,post,put,delete,patch...

"""

# 路由
url(r'^indexCbv/', views.IndexView.as_view()),


4. CBV 原始碼


# @classonlymethod 本質上也是classmethod

"走幾遍之後,後面不看原始碼,思考這個CBV原始碼是怎樣走的"

5. 模板語法


"1. 傳值"
# 和變數相關的都使用 {{  }}

# 和邏輯相關的都使用 {%  %}

"模板檔案中一律使用  .點語法"

# 在模板檔案裡面的函式,不用加括號,會自動加括號呼叫的。且函式不能傳遞引數。


5.1 過濾器


# 相當於python 裡面的內建方法

語法:
    {{變數|過濾器:引數(如果有的話)}}

# 過濾器有很多個,大概六七十,我們只需要掌握5個左右

1. length
    {{c|length}}

2. default
    {{f|default:"這是預設值"}}
	
3. date
    {{d|date:'Y-m-d H:i:s'}}

4. filesizeformay
    gg = 12383822
    {{gg|filesizeformay}}

5. safe
    h = <h1>hello 啊</h1>
    {{h|safe}}
	
# 在後端避免xss攻擊
from django.utils.safestring import mark_safe
h = mark_safe('<h1>hello 啊</h1>')

# 過濾器裡面最多傳 兩個慘是,至少一個引數

# django3可以連續過濾,多個管道符分隔