视图层
三板斧
"""
HttpResponse
返回字符串类型
render
返回 HTML 页面 并且还可以给 html 页面传值
redirect
重定向
视图函数必须要返回一个 HttpResponse
render 简单的内部原理
from django.template import Template.Context
res = Template("<h1>{{ user }}</h1>")
con = Context({"user": { "username":"jason", "password": 123 }})
ret = res.render(con)
print(ret)
return HttpResponse(ret)
"""
JsonResponse对象
"""
json 格式的数据的作用
前后端数据交互需要 json 作为过渡 实现跨语言传输数据
"""
JSON.stringify()
JSON.parse()
from django.http import JsonResponse
def ab_json(request):
user_dict = {
"username": "aoteman奥特曼",
"password": "123"
}
l = [111, 222, 333]
return JsonResponse(l, safe=False)
文件上传以及获取
"""
form 表单上传文件
1. method 必须为 post
2. enctype 必须换成 form-data
"""
def ab_file(request):
if request.method == "POST":
print(request.FILES)
file_obj = request.FILES.get("file")
print(file_obj.name)
with open(file_obj.name, "wb") as f:
for line in file_obj.chunks():
f.write(line)
return render(request, "form.html")
request 对象方法
"""
request.GET
request.POST
request.method
request.FILES
request.path # 只拿到路由
request.path_info
request.get_full_path # 不仅拿到路由,还包括问好后面的参数
request.body # 原生浏览器发送的二进制数据
"""
FBV 和 CBV
from django.views import View
class MyLogin(View):
def get(self, request):
return render(request, "form.html")
def post(self, request):
return HttpResponse("post方法")
urls(r"^cbv/", views.MyLogin.as_view())
"""
两者各有千秋
CBV 特点
能够直接根据请求方式的不同直接匹配到对应的方法执行
"""
CBV源码剖析
views.MyLogin.as_view()
"""
函数名/方法名 加括号执行优先级最高
猜测
as_view()
要么是被@staticmethod 修饰的静态方法
要么是被@classmethod 修饰的类方法
@classonlymethod
def as_view(cls, **initkwargs):
psss
# 根据源码分析,上述代码再启动 django 的时候就会立刻执行 as_view 方法
# url(r"^login", view.view) 和 FBV 一样
# CBV 和 FBV 再本质上是一样的 都是 路由 对应函数内存地址
"""