一、小白三板斧
# 视图函数必须返回一个HttpResponse对象
HttpResponse
class HttpResponse:
pass
render
def render(...):
return HttpResponse(...)
redirect
def redirect(...)
# redirect_class是HttpResponse子类
return redirect_class(...)
二、JsonResponse
"""
前后端不分离
django写项目(前端直接使用模板层及模板语法)
前后端分离
django写项目(前端使用其他框架和语言)
不同编程语言之间如何交互???
json格式数据
python中如何序列化反序列化
dumps()
loads()
js中如何序列化反序列化
JSON.stringfy()
JSON.parse()
"""
原理:
import json
json.dumps()内的参数介绍:
ensure_ascii=True
# 默认是T,也就是使用ASCII码,当数据ASCII不行时,使用unicode码
# 当改为False后,是编码的数据,就传什么编码的数据
from django.http import JsonResponse
JsonResponse()内的参数介绍:
1、data
# 传入的数据
2、safe=True
# 默认为T,传非字典的data 时,会报错
# 改为False的时候,可以将其他类型的数据传到前端
3、json_dumps_params={}
# 默认为空
# 当传入字典的时候,json_dumps_params={"ensure_ascii":False}
# 底层原理是可以通过这个参数,
# **json_dumps_params打散传给json.dumps(ensure_ascii=False)
案例:
def index(request):
d = {'username': 'jason老师', 'pwd': 123, 'hobby': [111, 222, 333]}
l = [111,222,333,444,555]
# json_str = json.dumps(d) # 序列化默认会对中文字符做转码
# json_str = json.dumps(d,ensure_ascii=False) # 序列化默认会对中文字符做转码
# return HttpResponse(json_str)
# return JsonResponse(d, json_dumps_params={'ensure_ascii': False})
# 源码会将字典打散为ensure_ascii=False传给json.dumps
return JsonResponse(l,safe=False)
Tips:
只有json格式的数据,打印出来的是""双引号,这是一个标志
json.encoder可以查看有哪些可以序列化
三、form表单发送文件
form表单的参数
1.method必须是post
2.enctype参数必须是multipart/form-data
request.POST无法获取到文件类型的数据
request.FILES获取文件类型的数据
前端获取文件数据
<input type="file" name="file"> 只能获取一个
<input type="file" name="file" multiple> 可以一次性获取多个
后端获取文件数据
request.FILES.get()
request.FILES.getlist()
案例:
传 “单文件”
def index(request):
if request.method == "POST":
file_obj = request.FILES.get("file") # 得到文件对象
print(file_obj.name) # 得到文件名
with open(r"C:\Users\Lenovo\Desktop\文件保存\{}".format(file_obj.name),"wb") as f:
for line in file_obj: # 一行行读写到空文件内
f.write(line)
print("%s 文件已上传" % file_obj.name)
return render(request,"index.html")
--------------------------------------
<form action="" method="post" enctype="multipart/form-data">
<p>
<input type="text" value="哈哈哈" name="text">
</p>
<p>file:
<input type="file" name="file">
</p>
<input type="submit">
</form>
传 “多文件”
def index(request):
# 传多文件
if request.method == "POST":
for file_obj in request.FILES.getlist("file"):
with open(r"C:\Users\Lenovo\Desktop\文件保存\{}".format(i.name),"wb") as f :
for line in file_obj:
f.write(line)
print("%s 文件已上传"%file_obj.name)
return render(request,"index.html")
--------------------------------------
<form action="" method="post" enctype="multipart/form-data">
<p>
<input type="text" value="哈哈哈" name="text">
</p>
<p>file:
<input type="file" multiple name="file"> # 加了multiple
</p>
<input type="submit">
</form>