內容概要
- JsonResponse類的使用
- form表單上傳文件
- CBV和FBV
- CBV的源碼分析
- 模板層
內容詳細
JsonResponse類的使用
# 1. 混合開發項目:前端頁面和后端代碼寫到一塊
# 2. 前后端分離項目:前端是一個項目,后端是一個項目,后端只需要寫接口
json格式的數據:進行跨語言數據傳輸
import json
'''支持的數據類型:str,list, tuple, dict, set'''
# 序列化出來的數據是可以看得懂的,就是一個字符串
dumps
loads
dump
load
import pickle
'''支持的數據類型:python中的所有數據類型'''
# 序列化出來的結果看不懂,因為結果是一個二進制
# pickle序列化出的來的數據只能在python中使用
dumps
loads
dump
load
# js中如何序列化?
JSON.stringify() # 序列化
JSON.parse() # 反序列化
**在形參和實參中的用法不一樣
from django.http import JsonResponse
def index(request):
# print(123)
# return HttpResponse('ok')
# return redirect()
# return render()
user_dict = {'username':'ly很帥', 'password':123}
l = [1, 2, 3]
# json_str = json.dumps(l, ensure_ascii=False)
# return HttpResponse(json_str)
# return JsonResponse(user_dict, json_dumps_params={'ensure_ascii':False})
return JsonResponse(l,safe=False)
form表單上傳文件
上傳文件注意事項:
1. 必須是post請求
2. 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格式
if request.method == 'POST':
print(request.FILES)
file_obj = request.FILES.get('myfile')
print(file_obj.name) # 文件名
import random
import uuid
aa = str(uuid.uuid4()) + '.png'
with open(aa, 'wb') as f:
for line in file_obj:
f.write(line)
return render(request, 'upload_file.html')
CBV和FBV
FBV: function based view
CBV: class based view
class IndexView(View):
def get(self, request):
print('get')
return HttpResponse('get')
def post(self, request):
print('post')
return HttpResponse('POST')
# url(r'^indexCbv/', views.IndexView.as_view()),
CBV的源碼
如何通過請求方式確定的方法?
#############入口################################
def view(request, *args, **kwargs):
self = cls(**initkwargs) # self = IndexView(**initkwargs)
# self => IndexView
return self.dispatch(request, *args, **kwargs)
##############核心方法################################
def dispatch(self, request, *args, **kwargs):
# GET POST => get post
if request.method.lower() in self.http_method_names:
# 反射:get set has del
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs) # get(request, *args, **kwargs)
模板語法
1. 傳值
# 跟變量相關的都使用雙括號 {{}}
# 跟邏輯相關的都使用 {% %}
'''模板文件中取值一律使用點語法 . '''
# 在模板文件里面的函數,不用加括號,會自動加括號調用, 不能傳遞參數
模板語法之過濾器
# 相當於python里面的內置方法
語法:
{{變量|過濾器:參數}}
過濾器有很多個,大概有六七十,我們只需要掌握5個左右
1. length
2. defalut
3. date
4. filesizeformat
5. safe
# 過濾器里面最多傳兩個參數,至少一個參數