Django视图层
一、视图层之必会三板斧
用来处理请求的视图函数都必须返回HttpResponse对象 # 完全正确
class HttpResponse:
pass
return HttpResponse
def render():
return HttpResponse()
return render()
def redirect():
redirect_class = 类(祖先有个类是HttpResponse)
return redirect_class()
return redirect()
二、JsonResponse对象
from django.http import JsonResponse
def index_func(request):
user_dict = {'name':'almira', 'age':24}
return JsonResponse(user_dict)
class JsonResponse():
def __init__(self,data,json_dumps_params=None):
json.dumps(data,**json_dumps_params)
JsonResponse主要序列化字典
针对非字典的其他可以被序列化的数据需要修改safe参数False
三、request对象
form表单携带文件类型的数据需要做到以下几点
1.method必须是post
2.enctype必须是multipart/form_data
django后端需要通过request.FILES获取文件类型的数据
四、视图层之FBV与CBV
FBV(Function Based views, 基于函数的视图)
def index(request):
return HttpResponse对象
CBV(Class Based Views, 基于类的视图)
from django import views
class MyLoginView(view.View):
def get(self,request):
return HttpResponse('from CBV get function')
def post(self,request):
return HttpResponse('from CBV post function')
path('login/', views.MyLoginView.as_view())
会自动根据请求方法的不同自动匹配对应的方法执行
其实,无论是FBV还是CBV,并不难
如果写的是函数那就FBV如果写的是类那就CBV
名字起的很高大上,不可怕哈哈哈
五、CBV源码剖析
1.从CBV的路由匹配切入
path('login/', views.MyLoginView.as_view())
1.类名点名字(名字的查找问题)
2.类名点名字并加括号调用(静态方法、绑定给类的方法)
2.函数名加括号执行优先级最高 项目一启动就会自动执行as_view方法
path('login/', views.view) # CBV路由本质还是FBV
3.浏览器地址栏访问login路由需要执行view函数
1.产生我们自己编写类的对象
2.对象调用dispatch方法(注意查找顺序)
4.研究父类中的dispatch方法
获取当前请求方法并转小写 之后利用反射获取类中对应的方法并执行
class View:
@classmethod
def as_view(cls, **initkwargs):
def view(request, *args, **kwargs):
self = cls(**initkwargs)
return self.dispatch(request, *args, **kwargs)
def dispatch(self, request, *args, **kwargs):
handler = getattr(self, request.method.lower())
return handler(request, *args, **kwargs)
六、虚拟环境
pycharm创建虚拟环境>>>:相当于重新下载了全新的解释器
命令行的创建语句:python -m venv pyvenv38
此方法不支持多版本共存
激活语句命令 activate
关闭语句命令 deactivate
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django视图层 - Python技术站