类视图

基于类的视图的简介

与基于函数的通用视图一样,就是为了使得视图的开发更加容易。 然而,它们使用的Mixin解决办法使得基于类的通用视图比基于函数的视图更加容易扩展和更加灵活。

使用基于类视图

def my_views(request):  
    if request.method == "POST":   
         pass   
from django.views import View   
class MyView(View,request):   
    def get(self,request)   
        pass   
    def post(self,request)   
        pass   

因为Django的URL解析器希望将请求和关联的参数发送到可调用函数,而不是类,基于类的视图具有一个as_view()类方法,它返回一个可以在请求时调用的函数到达与相关模式匹配的URL。 该函数创建一个类的实例并调用其dispatch()方法。 dispatch 查看请求是GET 还是POST 等等,并将请求转发给相应的方法,如果该方法没有定义则引发HttpResponseNotAllowed:

urlpatterns = [   
path ("my_view",MyView.as_view())   
]   

处理基于类视图的表单

from django.http import HttpResponseRedirect   
from django.shortcuts import render   
from .forms import MyForm   
def myview(request):   
    if request.method == "POST":   
        form = MyForm(request.POST)   
        if form.is_valid():   
            # <process form cleaned data>   
            return HttpResponseRedirect('/success/')   
    else:   
        form = MyForm(initial={'key': 'value'})   
    return render(request, 'form_template.html', {'form': form})   

装饰类视图

类的方法和独立的函数不完全相同,所以你不可以直接将函数装饰器运用到方法上 —— 你首先需要将它转换成一个方法装饰器。 method_decorator 装饰器将函数装饰器转换成方法装饰器,这样它就可以用于实例方法上。 像这样:

from django.contrib.auth.decorators import login_required   
from django.utils.decorators import method_decorator   
from django.views.generic import TemplateView   
class ProtectedView(TemplateView):   
    template_name = 'secret.html'   
    @method_decorator(login_required)   
    def dispatch(self, *args, **kwargs):   
        return super(ProtectedView, self).dispatch(*args, **kwargs)    

或者,更简洁的是,您可以装饰类,并将要装饰的方法的名称作为关键字参数name传递:

@method_decorator(login_required, name='dispatch')                 
class ProtectedView(TemplateView):            
    template_name = 'secret.html'        

[参考] (https://yiyibooks.cn/xx/Django_1.11.6/topics/class-based-views/intro.html)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值