Django视图层
视图层
FBV与CBV
FBV:基于函数的视图
CBV:基于类的视图
CBV
urlpatterns = [
url(r'^mycls/',view,MyCls.as_view()),
# 等价于url(r'^mycls/',view,MyCls.view)
]
无论是FBV还是CBV路由层都是路由对应视图函数内存地址
from django.views import View
class MyCls(View):
def get(self,request):
return render(request,'index.html')
def post(self,request):
return HttpResponse('post')
url匹配上时,视图类方法如何执行:
通过反射,取到对应请求方式的方法,执行后返回
JsonResponse
from django.http import JsonResponse
def index(request):
# res = {'name':'Jason大帅比','password':18}
# return HttpResponse(json.dumps(res))
return JsonResponse({'name':'Ja大帅比','password':'1888888'},json_dumps_params={'ensure_ascii':False})
# ensure_ascii参数取False不会将中文自动转换
简单的文件上传
前端需要注意的点:
- method需要制定为POST
- enctype需要改为formdata格式
后端暂时需要注意的点:
- 配置文件中注释掉csrfmiddleware中间件
- 通过request.FILES获取用户上传的post文件数据
file_obj = request.FILES.get('my_file')
print(file_obj.name) # 文件名
with open(file_obj.name,'wb') as f:
for line in file_obj.chunks(): # chunks()会使有游标回到0位置
f.write(line)