博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
视图系统
阅读量:4451 次
发布时间:2019-06-07

本文共 3383 字,大约阅读时间需要 11 分钟。

Django的view

一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。

一个简单的视图

from django.http import HttpResponseimport datetimedef current_datetime(request):    now = datetime.datetime.now()    html = "It is now %s." % now    return HttpResponse(html)

 

CBV和FBV

FBV

def add_class(request):    if request.method == "POST":        class_name = request.POST.get("class_name")        models.Classes.objects.create(name=class_name)        return redirect("/class_list/")    return render(request, "add_class.html")

 CBV

# CBV版添加班级from django.views import Viewclass AddClass(View):    def get(self, request):        return render(request, "add_class.html")    def post(self, request):        class_name = request.POST.get("class_name")        models.Classes.objects.create(name=class_name)        return redirect("/class_list/")

 

 

 给视图加装饰器

使用装饰器装饰FBV

FBV本身就是一个函数,所以和给普通的函数加装饰器无差:

def wrapper(func):    def inner(*args, **kwargs):        start_time = time.time()        ret = func(*args, **kwargs)        end_time = time.time()        print("used:", end_time-start_time)        return ret    return inner# FBV版添加班级@wrapperdef add_class(request):    if request.method == "POST":        class_name = request.POST.get("class_name")        models.Classes.objects.create(name=class_name)        return redirect("/class_list/")    return render(request, "add_class.html")

 

使用装饰器装饰CBV

类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。

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

# CBV版添加班级from django.views import Viewfrom django.utils.decorators import method_decoratorclass AddClass(View):    @method_decorator(wrapper)    def get(self, request):        return render(request, "add_class.html")    def post(self, request):        class_name = request.POST.get("class_name")        models.Classes.objects.create(name=class_name)        return redirect("/class_list/")

 

Request对象 和 Response对象

1.request对象

当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。

Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

请求相关的常用值

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

属性

所有的属性应该被认为是只读的,除非另有说明。

 

response 对象

与由Django自动创建的HttpRequest对象相比,HttpResponse对象是我们的职责范围了。我们写的每个视图都需要实例化,填充和返回一个HttpResponse。

传递字符串

from django.http import HttpResponseresponse = HttpResponse("Here's the text of the Web page.")response = HttpResponse("Text only, please.", content_type="text/plain")

 设置或删除响应头信息

response = HttpResponse()response['Content-Type'] = 'text/html; charset=UTF-8'del response['Content-Type']

 

属性

HttpResponse.content:响应内容

HttpResponse.charset:响应内容的编码

HttpResponse.status_code:响应的状态码

 

json response的对象

JsonResponse是HttpResponse的子类,专门用来生成JSON编码的响应。

from django.http import JsonResponseresponse = JsonResponse({'foo': 'bar'})print(response.content)b'{"foo": "bar"}'

 Django shot cut function

参数:     request: 用于生成响应的请求对象。     template_name:要使用的模板的完整名称,可选的参数     context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。     content_type:生成的文档要使用的MIME类型。默认为 DEFAULT_CONTENT_TYPE 设置的值。默认为'text/html'     status:响应的状态码。默认为200。    useing: 用于加载模板的模板引擎的名称。

redirect()

参数可以是:

  • 一个模型:将调用模型的get_absolute_url() 函数
  • 一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称
  • 一个绝对的或相对的URL,将原封不动的作为重定向的位置。

默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

示例:

你可以用多种方式使用redirect() 函数。

 

转载于:https://www.cnblogs.com/legend27/p/10999844.html

你可能感兴趣的文章
GitHub and Git
查看>>
Django--数据库查询操作
查看>>
自定义配置文件的使用
查看>>
js-20170609-运算符
查看>>
ALV弹出窗口   REU…
查看>>
算法笔记_065:分治法求逆序对(Java)
查看>>
CSS中关于字体大小的定义 em px rem pt %
查看>>
MSP430FLASH小结
查看>>
STM32 ADC转换时间
查看>>
kylin cube 构建过程
查看>>
结合实际业务场景聊一聊MVP模式的应用
查看>>
我爱 哐 哐 哐,我是哐人类!-【废话区】
查看>>
WinPE启动U盘的制作方法与软件下载(通用PE工具箱/老毛桃/大白菜WinPE)(转载)...
查看>>
行为型设计模式之5--中介者模式
查看>>
Android DevArt6:Android中IPC的六种方式
查看>>
oracle练习题
查看>>
PMP学习感想
查看>>
Zookeeper全解析——Paxos作为灵魂
查看>>
集合-强大的集合工具类:java.util.Collections中未包含的集合工具
查看>>
CSS清除浮动
查看>>