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): pass
from 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
底层的源码还是调用HttpResponse
def 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': pass
2、使用类的方式创建的视图
其实使用类的方式创建,底层先调用
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
中导入视图文件