一、小白三板斧
# 视图函数必须返回一个HttpResponse对象HttpResponse class HttpResponse: passrender 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>