Django类视图
from django.views import View
class ImageView(View):
def get(self, request):
pass
def post(self, request):
pass
def put(self, request):
pass
def delete(self, request):
pass
# 路由
url/path("image",ImageView.as_view())
python Mixin模式
【普通继承】
【喜鹊】继承 【飞行动物】
【飞行动物】 继承 【动物】
"""
这种继承
当继承链条 很长很复杂的时候
这就很不友好了
"""
【Mixin模式】
【喜鹊】 继承 【动物】
【喜鹊】 继承 【可飞行Mixin】
class 喜鹊 (动物,可飞行Mixin):
pass
Mixin
class ReturnCode:
"""
返回码的类
"""
SUCCESS = 0
FAILED = -100
WRONG_PARMAS = -101
RESOURCE_NOT_FOUND = -102
UNAUTHORIZED = -500
BROKEN_AUTHORIZED_DATA = -501
@classmethod
def message(cls, code):
if code == cls.SUCCESS:
return 'success'
elif code == cls.FAILED:
return 'failed'
elif code == cls.UNAUTHORIZED:
return 'unauthorized'
elif code == cls.WRONG_PARMAS:
return 'wrong params'
elif code == cls.RESOURCE_NOT_FOUND:
return 'resources not found'
class CommonResponseMixin(object):
@classmethod
def wrap_json_response(cls, data=None, code=None, message=None):
response = {}
if not code:
code = ReturnCode.SUCCESS
if not message:
message = ReturnCode.message(code)
if data:
response['data'] = data
response['result_code'] = code
response['message'] = message
return response
继承Mixin
class ImageView(View, CommonResponseMixin):
def get(self, request):
md5 = request.GET.get('md5')
imgfile = os.path.join(settings.IMAGES_DIR, md5 + '.jpg')
print(imgfile)
if os.path.exists(imgfile):
data = open(imgfile, 'rb').read()
# return HttpResponse(data, content_type='image/jpg')
return FileResponse(open(imgfile, 'rb'), content_type='image/jpg')
else:
# 这就是重点了,Mixin使用
# 无需引用这个函数,再次调用
# 这样这个类视图就和Mixin在一起了
# 这是一种面向对象的技巧技术
response = self.wrap_json_response(code=ReturnCode.RESOURCE_NOT_FOUND)
return JsonResponse(data=response, safe=False)
"""
以上代码并不完整
"""