路由层--反射删除

1、在app下urls.py中定义函数关系

   url(r'^delete/([a-zA-Z]+)/(d+)/$', views.delete),

2、在项目下views.py中定义函数

def delete(request, table_name, delete_id):
    print(table_name, delete_id)
    # 需要判断一下 表名和id值是否都是正经的数据

    # models.Book.objects.get(id=1).delete()
    # 从另外一个文件 根据字符串 反射具体的变量
    table_name = table_name.capitalize()
    if hasattr(models, table_name):
        # 如果能找到
        table_class = getattr(models, table_name)
        # 监测id是否存在
        try:
            table_class.objects.get(id=delete_id).delete()
        except Exception as e:
            print(str(e))
            print("id值不存在!")
        return HttpResponse("表名:{} id:{}".format(table_name, delete_id))
    else:
        return HttpResponse("表不存在!")

3、新建数据库、添加author表,添加数据

 

 4、执行结果:

(1)输入表名不存在的情况

 

 (2)表存在id不存在的情况

(3)表和id都存在的情况

  

   

"""
反射
由字符串反向找 变量、函数、类
"""
import sys

class Person(object):
    def __init__(self, name):
        self.name = name

    def eat(self, food):
        print("{} 在吃 {}".format(self.name, food))

    def dream(self):
        print("{} 在做白日梦!".format(self.name))

s = "person"

# 字符串首字母大写
s = s.capitalize()
print(s, type(s))           # Person  <class 'str'>

# 反射
#sys.modules[__name__]:从系统的包里找到当前的这个文件。[__name__]指当前这个文件
if hasattr(sys.modules[__name__], s):
    print("找到了")
    the_class = getattr(sys.modules[__name__], s)  # 获取属性 s 值,赋值给the_class,此时the_class就是一个Person类

    print(the_class)   # <class '__main__.Person'>
    #有了这个Person类之后我们就能拿它去用了
    obj = the_class(name="赵导")
    obj.eat("炒饼")    # 赵导 在吃 炒饼


# 补充:
# print(locals())          # 打印下当前所有可用的变量
print(locals()["s"])       #Person
print(locals().get("s"))   #Person

def f():
    a = 1
    b = 2
    c = 3
    print(locals())

f()  # {'c': 3, 'b': 2, 'a': 1}
反射复习
原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/12772632.html