Django(五)

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

过滤器里面最大传两个参数,至少一个参数

xss攻击

posted @ 2022-03-02 19:23  丶祈安  阅读(60)  评论(0)    收藏  举报