视图系统
一、实质
接收请求并返回响应
位置:views,py
二、分类
1、CBV class base view
.views.py文件
from django.views import View class Test(View): # get请求 def get(self, request): return render(request, "test.html") # post请求 def post(self, request): pass
.urls.py文件
path('test/', views.Test.as_view()),
注意:as_view()是方法
2、FBV function base view
.views.py文件
def test(request): # post请求 if request.method == "POST": pass # get请求 return render(request, "test.html")
.urls文件
path('test/', views.test),
三、请求
1、request.method 获取请求的方式(POST、GET) 2、request.GET GET请求方式 应用场景:获取网址、搜索引擎索引 注意:长度有限,无隐私,获取的结果是字典 3、requset.POST POST请求方式 应用场景:表单提交、文件输出、隐私数据 注意:获取的结果是字典 4、request.path_info(了解) 获取:url 不包含IP、端口和参数
四、响应
基础三件套
1、HttpResponse() 作用:返回数据 2、render(request, "") 作用:返回HTML和修改模板语言(替换字符串) 3、redirect("") 作用:重定向网址
基础三件套导入模块
from django.shortcuts import render from django.shortcuts import redirect from django.shortcuts import HttpResponse
序列化
# python import json def json_test(request): dic = {'name': 'tom', 'age': 23} dic_str = json.dumps(dic) return HttpResponse(dic_str)
# Django from django.http import JsonResponse def json_test(request): dic = {"name": 'tom', "age": 23} return JsonResponse(dic)
注意:序列化只能是字典,当是其它类型时,safe=False
五、上传文件的例子
def test(request): request.FILES if request.method == "POST": filename = request.FILES.get("upload_file").name print(filename) with open(file=filename, mode="wb") as f: for i in request.FILES.get("upload_file").chunks(): f.write(i) return HttpResponse("上传成功") return render(request, "test.html")