Django——视图

Django的视图(View)

  • 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
  • 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。
  • 将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中

FBV与CBV

FBV(Funciton Based View)基于函数的view

CBV(Class Based Vies)基于类的view

# 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版添加班级
from django.views import View

class AddClass(View):

    def get(self, request,*args,**kwargs):   #如果请求为GET那么就会执行该方法,而不用去判断
        return render(request, "add_class.html")

    def post(self, request,*args,**kwargs):  #如果请求为POST那么就会执行该方法,而不用去判断
        class_name = request.POST.get("class_name")
        models.Classes.objects.create(name=class_name)
        return redirect("/class_list/")

 

使用CBV的好处与注意事项:

  1. CBV需要在urls中需要修改一下。url(r'add_class/', views.AddClass.as_view()),
  2. 不需要进行发送请求的判断,有get就会运行class里的get请求。是post就会运行post

装饰器使用:

#在FBV上正常加入即可。下面是在CBV上加入装饰器

from django.utils.decorators import method_decorator
#使用method_decorator和直接使用timer的区别在于装饰器内传入参数的第一位是request对象,而timer的第一位是函数对象

#1. 加到方法上,针对自己写的请求方式
@method_decorator(timer)   #timer是写好的装饰器
def get(self,request,*args,**kwargs):
    pass
#2. 加到dispatch方法上,该方法是将post、get等所有请求全部涵盖在内。
@method_decorator(timer)    
def dispatch(self,request,*args,**kwargs):   #dispatch函数是内置的,需要更改就将其单独写在自己的函数中。
    print(111)
    ret = super().dispatch(request,*range,**kwargs)
    print(222)
    return ret
#3. 加到类上,可以将name换成单独的请求方式,get或post,如果想全部应用就写dispatch上即可。
@method_decorator(timer,name='dispatch')
class A(View):
    pass

posted @   新兵蛋Z  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2022-04-14 Python——requests(网页获取)
点击右上角即可分享
微信分享提示