• 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)
    三个方法
  • 相关阅读:
    大数据是否有可能有效配置资源?
    在大数据时代,我们需要数据售货员
    在大数据时代,我们需要数据售货员
    粗糙的贝叶斯转化概率预测模型
    粗糙的贝叶斯转化概率预测模型
    MVC中的ViewData、ViewBag和TempData
    58被微信玩弄,你知道吗?
    你的以太网速度足够快吗?四种更快的速度正在路上······
    hibernate预编译SQL语句中的setParameter和setParameterList
    创建单线性链表的不同表示方法和操作
  • 原文地址:https://www.cnblogs.com/liangsha0/p/10896749.html
Copyright © 2020-2023  润新知