目录
FBV: function base view 基于函数的视图
‘‘‘python
def api1(request):
data_list = ['课程', '班级']
return HttpResponse(json.dumps(data_list))
‘‘‘
视图类:当接收到请求后,视图类直接调用封装好的dispatch调度方法(根据反射来执行其他的方法:GET/PUT/PATCH/PUT/DELETE......)
‘‘‘python
class StudentView(View):
def dispath(self, request, *args, **kwargs):
method_name = getattr(self, request.method.lower())
# 注意:这里的getattr()函数用于返回一个对象的属性值
# request.method返回的是请求的方式,即大写形式,如果我们
# 直接就把大写方式名作为执行函数的名字,系统会找不到,所有需要把
# 大写全部变成小写才可以找到并运行
result = method_name(request, *args, **kwargs)
return result
def get(self, reqeust, *args, **kwargs):
return HttpResponse('GET')
def post(self, reqeust, *args, **kwargs):
return HttpResponse('POST')
def patch(self, reqeust, *args, **kwargs):
return HttpResponse('PATCH')
def put(self, request, *args, **kwargs):
return HttpResponse('PUT')
def delete(self, request, *args, **kwargs):
return HttpResponse('DELETE')
‘‘‘python
# 由于每一个视图类都要调用dispatch方法,我们可以把它抽象出来,封装成一个基类,由视图函数来继承
class BaseView(object):
def dispatch(self, request, *args, **kwargs):
print("before")
result = super(BaseView, self).dispatch(request, *args, **kwargs)
# 基类继承自框架封装好的类并调用类中方法
print("after")
return result
class Student1View(BaseView, View):
'''
当继承多个类的时候,需要用到多继承关系,多继承关系遵循左优先原则,
希望先继承的类写在左边,一次往下写
'''
def get(self, reqeust, *args, **kwargs):
return HttpResponse('GET')
def post(self, reqeust, *args, **kwargs):
return HttpResponse('POST')
def patch(self, request, *args, **kwargs):
return HttpResponse('PATCH')
def put(self, request, *args, **kwargs):
return HttpResponse('PUT')
def delete(self, request, *args, **kwargs):
return HttpResponse('DELETE')
‘‘‘
‘‘‘python
class Test(object):
def __init__(self, a1,a2):
self.a1 = a1
self.a2 = a2
def ...
def ...
test1 = Test(111, 3333)
# 类的实例化
‘‘‘
csrf_token是中间件中的一个,放置在processs_view中,即视图函数
方式三:@method_decorator(csrf_exempt, name=‘dispatch‘),name是添加装饰器的方法名,把装饰器添加在视图类前。前两种方式都必须找到dispatch方法才能添加,这个不用再找到dispatch方法,这个方法更方便。
"method_decorator格式:@method_decorator(csrf方法, name=‘视图类中添加csrf的方法名‘)"
‘‘‘python
class BaseView(object):
@csrf_exempt
def dispatch(self, request, *args, **kwargs):
print("before")
result = super(BaseView, self).dispatch(request, *args, **kwargs)
print("after")
return result
‘‘‘
原文:https://www.cnblogs.com/ddzc/p/12115912.html