一、小白三板斧

  1. # 视图函数必须返回一个HttpResponse对象
  2. HttpResponse
  3. class HttpResponse:
  4. pass
  5. render
  6. def render(...):
  7. return HttpResponse(...)
  8. redirect
  9. def redirect(...)
  10. # redirect_class是HttpResponse子类
  11. return redirect_class(...)

二、JsonResponse

  1. """
  2. 前后端不分离
  3. django写项目(前端直接使用模板层及模板语法)
  4. 前后端分离
  5. django写项目(前端使用其他框架和语言)
  6. 不同编程语言之间如何交互???
  7. json格式数据
  8. python中如何序列化反序列化
  9. dumps()
  10. loads()
  11. js中如何序列化反序列化
  12. JSON.stringfy()
  13. JSON.parse()
  14. """
  15. 原理:
  16. import json
  17. json.dumps()内的参数介绍:
  18. ensure_ascii=True
  19. # 默认是T,也就是使用ASCII码,当数据ASCII不行时,使用unicode码
  20. # 当改为False后,是编码的数据,就传什么编码的数据
  21. from django.http import JsonResponse
  22. JsonResponse()内的参数介绍:
  23. 1data
  24. # 传入的数据
  25. 2safe=True
  26. # 默认为T,传非字典的data 时,会报错
  27. # 改为False的时候,可以将其他类型的数据传到前端
  28. 3json_dumps_params={}
  29. # 默认为空
  30. # 当传入字典的时候,json_dumps_params={"ensure_ascii":False}
  31. # 底层原理是可以通过这个参数,
  32. # **json_dumps_params打散传给json.dumps(ensure_ascii=False)
  33. 案例:
  34. def index(request):
  35. d = {'username': 'jason老师', 'pwd': 123, 'hobby': [111, 222, 333]}
  36. l = [111,222,333,444,555]
  37. # json_str = json.dumps(d) # 序列化默认会对中文字符做转码
  38. # json_str = json.dumps(d,ensure_ascii=False) # 序列化默认会对中文字符做转码
  39. # return HttpResponse(json_str)
  40. # return JsonResponse(d, json_dumps_params={'ensure_ascii': False})
  41. # 源码会将字典打散为ensure_ascii=False传给json.dumps
  42. return JsonResponse(l,safe=False)

Tips:

  1. 只有json格式的数据,打印出来的是""双引号,这是一个标志
  2. json.encoder可以查看有哪些可以序列化

三、form表单发送文件

  1. form表单的参数
  2. 1.method必须是post
  3. 2.enctype参数必须是multipart/form-data
  4. request.POST无法获取到文件类型的数据
  5. request.FILES获取文件类型的数据
  6. 前端获取文件数据
  7. <input type="file" name="file"> 只能获取一个
  8. <input type="file" name="file" multiple> 可以一次性获取多个
  9. 后端获取文件数据
  10. request.FILES.get()
  11. request.FILES.getlist()

案例:

传 “单文件”

  1. def index(request):
  2. if request.method == "POST":
  3. file_obj = request.FILES.get("file") # 得到文件对象
  4. print(file_obj.name) # 得到文件名
  5. with open(r"C:\Users\Lenovo\Desktop\文件保存\{}".format(file_obj.name),"wb") as f:
  6. for line in file_obj: # 一行行读写到空文件内
  7. f.write(line)
  8. print("%s 文件已上传" % file_obj.name)
  9. return render(request,"index.html")
  10. --------------------------------------
  11. <form action="" method="post" enctype="multipart/form-data">
  12. <p>
  13. <input type="text" value="哈哈哈" name="text">
  14. </p>
  15. <p>file:
  16. <input type="file" name="file">
  17. </p>
  18. <input type="submit">
  19. </form>

传 “多文件”

  1. def index(request):
  2. # 传多文件
  3. if request.method == "POST":
  4. for file_obj in request.FILES.getlist("file"):
  5. with open(r"C:\Users\Lenovo\Desktop\文件保存\{}".format(i.name),"wb") as f :
  6. for line in file_obj:
  7. f.write(line)
  8. print("%s 文件已上传"%file_obj.name)
  9. return render(request,"index.html")
  10. --------------------------------------
  11. <form action="" method="post" enctype="multipart/form-data">
  12. <p>
  13. <input type="text" value="哈哈哈" name="text">
  14. </p>
  15. <p>file:
  16. <input type="file" multiple name="file"> # 加了multiple
  17. </p>
  18. <input type="submit">
  19. </form>