django中视图的认识
一、定义视图的两种方式
1、使用函数的方式定义
from django.http import HttpResponse from django.shortcuts import render # Create your views here. def index(request): return HttpResponse('我的app2的主页')2、使用类的方式创建
from django.views import View class Home(View): def get(self, request): return HttpResponse('我的使用类创建的') def post(self, request): passfrom django.urls import path from . import views urlpatterns = [ path('index/', views.index), path('home/', views.Home.as_view()) ]
二、关于视图的返回值
- 1、
render(request, "模板")直接渲染模板(模板章节会介绍) - 2、
HttpResponse(字符)直接返回字符串 - 3、
redirect(地址)重定向 - 4、
render_to_response("模板")与render功能一样的 - 5、
render_to_string自行了解 - 6、
get_template自行了解
总结:
- 1.在项目开发中常用的是
render和redirect 2.
render底层的源码还是调用HttpResponsedef render(request, template_name, context=None, content_type=None, status=None, using=None): """ Return a HttpResponse whose content is filled with the result of calling django.template.loader.render_to_string() with the passed arguments. """ content = loader.render_to_string(template_name, context, request, using=using) return HttpResponse(content, content_type, status)
三、判断请求方式
1、使用函数方式创建的视图
def index(request): if request.method == 'GET': return HttpResponse('我的app2的主页') elif request.method == 'POST': pass2、使用类的方式创建的视图
其实使用类的方式创建,底层先调用
dispatch函数from django.views import View class Home(View): def dispatch(self, request, *args, **kwargs): print(request.method) return super(Home, self).dispatch(request, *args, **kwargs) def get(self, request): return HttpResponse('我的使用类创建的') def post(self, request): pass关于
dispatch的源码,其实就是通过反射来执行... def dispatch(self, request, *args, **kwargs): # Try to dispatch to the right method; if a method doesn't exist, # defer to the error handler. Also defer to the error handler if the # request method isn't on the approved list. 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) ...
四、获取客户端的参数
1、获取
path参数def index1(request, id='0'): print(id) return HttpResponse(id)2、获取
get请求的参数... request.GET ...3、获取
post请求的参数... request.POST ...4、如果客户端传递的值是多个的话就要使用,常见复选框及多选下拉框
... request.POST.getlist() ...
五、视图分发
- 1、前面我们介绍了
url分发,其实视图也可以分发,这样就不会造成一个views.py文件很大,查找不方便 - 2、在
app下面新建一个views的包 - 3、删除之前的
views.py的文件 - 4、使用的时候直接用
views中导入视图文件