zoukankan      html  css  js  c++  java
  • django3-视图函数进阶

    1.视图函数的分类

      FBV(fucntion base view)

      CBV(class base view) ,CBV根据定义的方法名 ,判断什么请求执行什么函数

    2.FBV转换CBV (不太对劲)

      在CBV的url中指定执行类名.as_view()方法 ,根据源码得知dispatch函数中执行了我们自定义的类中方法 !

    ####################FBV
    def
    pressedit(request, edit_id, test_id): obj = models.presslist.objects.get(pk=edit_id) print(test_id, edit_id) msg = '' if request.method == 'POST': obj.name = request.POST.get('pressname') if models.presslist.objects.filter(name=obj.name): msg = '已存在' if not obj.name: msg = '不能为空' if not models.presslist.objects.filter(name=obj.name) and obj.name: obj.save() return redirect(reverse('presslist')) return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg}) #######################CBV class pressedit1(View): def get(self, request, edit_id, test_id): obj = models.presslist.objects.get(pk=edit_id) msg = '' print(edit_id, test_id) print(id(obj)) return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg}) def post(self, request, edit_id, test_id): msg = '' obj = models.presslist.objects.get(pk=edit_id) obj.name = request.POST.get('pressname') print(id(obj)) if models.presslist.objects.filter(name=obj.name): msg = '已存在' if not obj.name: msg = '不能为空' if not models.presslist.objects.filter(name=obj.name) and obj.name: obj.save() return redirect(reverse('presslist')) return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg})

    3.视图函数使用装饰器

    import time
    import functools
    from django.utils.decorators import method_decorator
    def wapp(func): @functools.wraps(func) def inner(*args, **kwargs): time1 = time.time() ret = func(*args, **kwargs) print(time.time() - time1) return ret return inner

    #######FBV
    #url
    url(r'^press/edit/(?P<edit_id>d+)/(?P<test_id>d+)/', views.pressedit, name='pressedit'),
    #views
    @wapp
    def presslist(request):
    msg_all = models.presslist.objects.all()
    return render(request, 'cbs.html', {'msg': msg_all})


    #######CBV
    #url
    url(r'^press/edit/(?P<edit_id>d+)/(?P<test_id>d+)/', views.pressedit1.as_view(), name='pressedit'),

     #views

    @method_decorator(wapp, name='get')    ###通过method_decorator这个装饰器指定自己的装饰器 和要装饰的函数 ,可以直接作用dispatch函数,对所有函数生效
    class pressedit1(View):

    def get(self, request, edit_id, test_id, msg=''):
    obj = models.presslist.objects.get(pk=edit_id)
    return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg})

    def post(self, request, edit_id, test_id):
    msg = ''
    obj = models.presslist.objects.get(pk=edit_id)
    obj.name = request.POST.get('pressname')
    if models.presslist.objects.filter(name=obj.name):
    msg = '已存在'
    if not obj.name:
    msg = '不能为空'
    if not models.presslist.objects.filter(name=obj.name) and obj.name:
    obj.save()
    return redirect(reverse('presslist'))
    return self.get(request, edit_id, test_id, msg)
  • 相关阅读:
    学习进度二
    课后感想2
    .NET 软件下面win10自动启动配置
    windows server 2012 ftp搭建
    ABP 切换mysql 数据库报错mysqlexception: incorrect string value: ‘xe7xaex80xe4xbdx93…’ for column display name
    .NET CORE 热更新,否则提示DLL文件在使用中
    .NETCore部署步骤
    解压版mysql安装步骤
    Asp.NET CORE安装部署
    PL/SQL 连接oracle步骤
  • 原文地址:https://www.cnblogs.com/quguanwen/p/11391327.html
Copyright © 2011-2022 走看看