• 反向解析的应用示例: 多个页面的删除函数合并为一个


    在开发后台管理系统的时候,通常会有多个展示页面,比如book展示页面, author的展示页面, 还有出版社的展示页面. 

    通常我们会对每一个页面写增删改查, 这样就会写3套重复的函数. 这些函数的逻辑都是一样的,只有部分的参数不一样.

    这里我们以删除为例,看看怎么把多个函数重复的函数用一个函数实现所有的功能.

    我们以book展示页和author的展示页为例子,通过一个delete函数,控制这两个页面的删除键

    第一步: 在url中配置路径, 把需要删除的页面对应的表名写进去,拼路径

    知识点: 正则表达式, 分组命名

        #把书籍,作者,出版社的删除 合并成一个删除路径
        re_path("(^book|publish|author)/delete/(d+)$",views.delete),
                  #表名小写

    第二步: 在view视图函数中定义删除函数

    知识点: 反向解析, 反射, 还有一点就是table直接用表名小写,通过 table.capitalize() 转换成对应的表名, 然后进行ORM操作

    # 通过反向解析 和 反射实现的
    #把书籍,作者,出版社的删除 合并成一个删除路径
    def delete(request,table,pk):
        #table ---> ‘book’ 'publish' 'author'   pk 要删除对象的ID
        table_dict={
        "book":models.Book,
        "publish":models.Publish,
        "author":models.Author
        }
        # table.capitalize() #大写 ‘book’ ——》  “Book”
        table_class=getattr(models,table.capitalize()) #getattr(models, 'Book') ——》 models.Book
        # ‘Book’ 'Publish'
        table_class.objects.filter(pk=pk).delete()
        return redirect(reverse(table))
        # 反向解析  ‘book’  ——》 ‘/books/’  跳转到book的展示页面的url
        #重定向到展示页面, 给展示页面的url 取别名=对应的表名小写

    第三步:在url 中写book 和 author 的别名

    path("books/",views.book_view,name="book"),
    
    path("author_view/",views.author_view,name="author"),

    第四步:分别在 book和author 的展示页面的html中写删除时走的路径

    <a href="/book/delete/{{ book.pk }}" class="btn btn-danger btn-sm">删除</a>
    <a href="/author/delete/{{ author.pk }}" class="btn btn-danger btn-sm">删除</a>

    这样就可以用一个函数,控制多个页面的删除按钮了.

  • 相关阅读:
    保存会话数据——cookie学习
    HttpServletRequest学习
    HttpServletResponse 学习
    Servlet学习
    Http协议简单学习笔记
    利用tomcat配置网站
    PHPCMS-V9 获取一级栏目、二级栏目、三级栏目
    PHP判断当前访问的是 微信、iphone、android 浏览器
    二维数组根据某个字段排序
    动物界的再生一个故事
  • 原文地址:https://www.cnblogs.com/kenD/p/10073047.html
Copyright © 2020-2023  润新知