内容概要
- 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
# 过滤器里面最多传两个参数,至少一个参数