Django之视图

Posted yq055783

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

以上是关于Django之视图的主要内容,如果未能解决你的问题,请参考以下文章

Django之视图

Django视图层之路由配置系统(urls)

Django之视图

Django之视图层

03.Django基础三之视图函数

Django框架之视图层汇总