zoukankan      html  css  js  c++  java
  • Django之视图

    一 视图简介

    视图,又称视图函数或者视图类。它接受Web请求并且返回Web响应。请求封装到视图函数的参数中,一般该参数写成request。响应方式有renderredirectHttpResponse。任何视图函数最终都要返回一个响应。

     二 视图写法

     视图写法有两种:基于函数的处理请求方式和基于类的处理请求方式。

    1.视图函数(FBV

    from django.http import HttpResponse
    def home(request):
       return HttpResponse('OK')
    #在urls.py里写法:
    url(r'^home/', views.home),

    2.视图类(CBV

    1)写法

    from django.http import HttpResponse
    from django.views import View
    class MyView(View):
          def get(self, request):
             return HttpResponse('OK')
          def post(self,request):
             pass
            return HttpResponse('OK')

    相应的,在urls.py里要修改如下:

    from django.conf.urls import url
    from myapp.views import MyView   #引入我们在views.py里面创建的类

      urlpatterns = [

         url(r'^index/$', MyView.as_view()),

    
    

    ]

    2)注意:

    视图类里必须有getpost函数(名字必须叫getpost),一个用来处理get请求,一个用来处理post请求。

     url(r'^login2/', views.LoginView.as_view())的views.LoginView.as_view()实质在执行views.view。看as_view源码可知,as_view返回的是view,view返回的是个dispatch()函数。

    dispath()是个反射。因此只有类里面的函数名是getpost,才能找到相应的请求方法。在视图函数里,就要if判断request.methodGET还是POST,再进行相应的逻辑处理。

     三 给视图加装饰器

     1.FBV加装饰器

     给函数加装饰器,直接在函数上一行加语法糖:@装饰器名 

    def wrapper(func):
        def inner(*args, **kwargs):
            ret = func(*args, **kwargs)
            return ret
        return inner

     # FBV 

    @wrapper
    def func(request):
        pass
        return render(request, "xx.html")

      2.CBV加装饰器

     Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。 

    from django.utils.decorators import method_decorator
    @method_decorator(wrapper)
    def get(self,request):
        # print("get方法执行了")
        return render(request,'login2.html')

    四 requestresponse对象

     1.request

     当一个页面被请求时,Django就会创建一个包含本次请求原信息(请求报文中的请求行、首部信息、内容主体等)的HttpRequest对象。视图函数的参数承接这个对象,一般这个参数写成request

    请求相关的常用值 

    path_info     返回用户访问url,不包括域名
    method        请求中使用的HTTP方法的字符串表示,全大写表示。
    GET              包含所有HTTP  GET参数的类字典对象
    POST           包含所有HTTP POST参数的类字典对象
    body            请求体,byte类型 request.POST的数据就是从body里面提取到的

    2.response

     我们写的每个视图都需要实例化,填充和返回一个HttpResponse

     响应对象主要有三种形式 

    HttpResponse()
    render()
    redirect()

    HttpResponse()括号里直接跟个字符串。 

    render()结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

     参数: 

    request: 用于生成响应的请求对象。
    template_name:要使用的模板的完整名称,可选的参数
    context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
    content_type:生成的文档要使用的MIME类型。默认为 DEFAULT_CONTENT_TYPE 设置的值。默认为'text/html'
    status:响应的状态码。默认为200。
    useing: 用于加载模板的模板引擎的名称。
    redirect() :给浏览器了一个30x的状态码。进行重定向。 临时重定向(响应状态码:302)和永久重定向(响应状态码:301)
  • 相关阅读:
    HTML总结
    js五角星评分特效
    正则表达式
    C#文件路径的写法
    vs2010发布网站
    INI文件阅读器
    .net读取xml文件中文乱码问题解决办法
    js利用定时器动态改变层大小
    c#中ref和out的用法
    分享一篇关于C#对文件操作的日志,方法很全
  • 原文地址:https://www.cnblogs.com/yq055783/p/12331734.html
Copyright © 2011-2022 走看看