Django基础三之视图函数

一 、定义:

FBV(function base views) 就是在视图里使用函数处理请求。之前都是FBV模式写的代码,所以就不写例子了。

CBV(class base views) 就是在视图里使用类处理请求。

CBV优点:

  1. 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
  2. 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性

二、使用步骤:

views中:

1、导入:from django.views import view

2、创建新类(继承View类):class LoginView(View):

3、重写dispatch方法:def dispatch (self,request,*args,**kwargs):

4、其中需执行父类的dispactch:ret=super().dispatch(request,*args,**kwargs)

5、最后需返回ret值(get或post的值):return ret (send到浏览器)

urls中:

url(r'^login/', views.LoginView.as_view())

源码:1.as_view()--view    2用户请求到了 view     3view里面执行了dispatch,反射找到请求方法对应的自己视图的方法。

三、装饰器

FBV:

#装饰器
def xxx(func1):
def inner(request,*args,**kwargs):
print('xx1')
ret = func1(request,*args,**kwargs)
print('xx2')
return ret
return inner
@xxx
def index(request):pass

CBV:

方式一:
@method_decorator(xxx)
def dispatch(...):....                    放在dispatch上面,相当于装饰了get和post方法。

方式二:
@method_decorator(xxx)
def get(self,request):pass
def post(self,request):pass        只加在get上面,相当于只装饰了get方法。

方式三:
@method_decorator(xxx,name='get')
class IndexView(View):              放在整个类的上面,须有name指示装饰谁,不可连写,装饰几个写几行。

四、request对象

request.body:#得到用户提交数据的原始数据类型 b'username=chao&passowrd=123'
request.GET
request.POST
request.method# 获取请求方法。请求中使用的HTTP方法字符串表示,全大写表示
request.path_info  #获取用户请求路径,返回用户当前访问的url,不包括域名,不包括参数
request.get_full_path() #获取除域名之外的全路径,包括请求参数
request.META # 获取请求头的元信息
request方法

五、response对象

HttpResponse('xxx')  #返回一个字符串(封装了 响应头+专程byte类型)
render(request,'index.html',{'name':'chao'}) 
#相应的html文件中: index.html  {{ name }}--chao
redirect('/login/')# -- 给浏览器发送了一个重定向的请求,浏览器拿到你要重定向的url,然后自动发送了一个ip+端口+路径/login/,的一个请求,后端在配置对应url('^login/',views.login)
三个方法
原文地址:https://www.cnblogs.com/liangsha0/p/10896749.html