目录
在视图文件中写视图函数的时候不能没有返回值了,默认返回的是None,页面上就会报错
- def render(request, template_name, context=None, content_type=None, status=None, using=None):
- content = loader.render_to_string(template_name, context, request, using=using)
- return HttpResponse(content, content_type, status)
json格式的数据:{"a":1}
json有什么用:跨语言传输
序列化:json.dumps
反序列化:json.loads
- from django.http import JsonResponse
- def index(request):
- # user_dict = {'username':'kevin你好'}
- user_dict = [1, 2, 3, 4]
- # res = json.dumps(user_dict,ensure_ascii=False)
- # return HttpResponse(res)
- # return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})
- return JsonResponse(user_dict,safe=False)
- # return render(request,'index.html')
form表单上传数据需要满足的条件:
- 请求方式必须是post
- enctype参数必须指定成 form-data 类型
- # form 表单上传 下载文件
- url('^ab_file/',views.ab_file),
-
username:<input type="text" name="username" class="form-control">
-
file:<input type="file" name="file" class="form-control">
- <input type="submit">
- def ab_file(request):
- if request.method == 'POST':
- # 只能获取到普通的文本数据,无法获取到文件数据
- print(request.POST)
- return render(request, 'file.html')
'username': ['dream']}>
- def ab_file(request):
- if request.method == 'POST':
- # 获取文件数据
- print(request.FILES) #
]}> - # 提取文件数据 - 文件对象
- file_obj = request.FILES.get('file')
- # 提取文件名字 file_obj.name
- with open(file_obj.name, 'wb') as f:
- # 逐行读取文件数据
- # 官方推荐 加上 chunks 方法 等价于 一行行获取
- for line in file_obj.chunks():
- f.write(line)
- return render(request, 'file.html')
'file': []}>
FBV:function based view -----》写的都是函数
CBV:class based view -----》写的都是类
CBV视图
- from django.views import View
-
-
- class MyLogin(View):
- def get(self, request):
- print('get...')
- return HttpResponse("get")
-
- def post(self, request):
- return HttpResponse("hello postman!!!")
-
- url(r'^login/', views.MyLogin.as_view()),
MBV和CBV各有各的特点,都有应用
- CBV特点
- 能够直接根据请求方式的不同直接匹配到对应的方法执行
路由对应函数内存地址:
url(r'^login/', views.MyLogin.as_view()),
方法/函数名 加 括号 执行优先级最高
- def view(request, *args, **kwargs):
- # cls:Mylogin()------>self对象
- self = cls(**initkwargs)
- return self.dispatch(request, *args, **kwargs) # View类里的dispatch
-
- def dispatch(self, request, *args, **kwargs):
- if request.method.lower() in self.http_method_names:
- handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
- else:
- handler = self.http_method_not_allowed
- return handler(request, *args, **kwargs)
-
- from django.views import View
-
-
- class MyLogin(View):
- http_method_names = ['get', 'post']
- def get(self, request):
- print('get...')
- self.index()
- return HttpResponse("get")
-
- def post(self, request):
- return HttpResponse("hello postman!!!")
-
- def index(self):
- pass
小结
url(r'^login/', views.MyLogin.as_view()),