码迷,mamicode.com
首页 > 其他好文 > 详细

Django之视图

时间:2020-02-19 17:32:27      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:字符   default   请求方法   splay   ext   res   加载   stat   ora   

一 视图简介

视图,又称视图函数或者视图类。它接受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之视图

标签:字符   default   请求方法   splay   ext   res   加载   stat   ora   

原文地址:https://www.cnblogs.com/yq055783/p/12331734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!