当前位置:网站首页>Descriptor implements ORM model
Descriptor implements ORM model
2022-07-06 02:51:00 【chuntian_ tester】
Catalog
1.__set__ Method : Set properties
2.__get__ Method : Access properties
3.__delete__ Method : Delete attribute
4. Descriptor implementation ORM Model :
Cannot trigger when accessing or modifying the properties of the descriptor object __setattr__ Other methods , It will only trigger __set__,__get__,__delete__ Method .
ORM Model : Class name corresponds to table name , The data row corresponding to the object , Class attribute corresponds to each field of the data row , There are several table fields , Just bind several class attributes ; Adding data to the table is creating objects , Every time an object is created , Is to add a row of data records .
ORM Functions of the framework :
1. Establish correspondence between model classes and tables , It allows us to operate the database in an object-oriented way .
2. According to the design of the model class to generate tables in the database .
3. Through convenient configuration, the database can be switched .
MySql Common data types :
1. Integers :int,bit
2. decimal :decimal(decimal Represents a floating point number ,decimal(5,2) Indicates total 5 digit , Decimal share 2 position )
3. character string :varchar( Variable length ),char( Immutable length )
4. Date time :date,time,datetime
5. Enumeration type :enum
Model cases :
"""
django Of ORM The model field
BooleanField: Boolean fields ,True or False
CharField(max_length= Maximum length ): character string , Parameters max_length Represents the maximum number of characters
IntegerField: Integers
"""
class TestReport(BaseTable):
class Meat:
verbose_name = ' Test report '
db_table = "TestReport"
report_name = models.CharField(max_length=40, null=False)
start_at = models.CharField(max_length=40, null=True)
status = models.BooleanField()
testRun = models.IntegerField()
successes = models.IntegerField()
reports = models.TextField()1.__set__ Method : Set properties
"""
As long as a class appears :
__get__(self,instance,owner)
__set__(self,instance,value)
__delete__(self,instance)
__set_name__(self,owner,name)
Any of the methods in , This class is not an ordinary class ,
Should be called :
Descriptor class ( Apply to ORM In the model )
"""
class Field(object):
"""
As long as any of the following methods appear in a class , This class is a descriptor class
"""
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
print('---set--- Method triggered ')
def __delete__(self, instance):
pass
class Model(object):
attr = Field() # attr Is a descriptor object , Cannot trigger when modifying __setattr__ Other methods ,
# Only those inside the descriptor class can be triggered __set__ Method
if __name__ == '__main__':
m = Model()
m.attr = 666 # Try to modify attr attribute
print(m.attr)
# Output :
---set - -- Method triggered
None
class Field(object):
"""
As long as any of the following methods appear in a class , This class is a descriptor class
"""
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
"""
:param instance: Modified object
:param value: Modified value
:return:
"""
print('---set--- Method triggered ')
self.value = value
print(self) # <__main__.Field object at 0x7fecc01f8a30>
print(instance) # <__main__.Model object at 0x7fecc01f8a00>
print(value) # 666
def __delete__(self, instance):
pass
class Model(object):
attr = Field() # attr Is a descriptor object , Cannot trigger when modifying __setattr__ Other methods ,
# Only those inside the descriptor class can be triggered __set__ Method
if __name__ == '__main__':
m = Model()
print(m) # <__main__.Model object at 0x7fecc01f8a00>, And instance identical
m.attr = 666 # Try to modify attr attribute
2.__get__ Method : Access properties
"""
As long as a class appears :
__get__(self,instance,owner)
__set__(self,instance,value)
__delete__(self,instance)
__set_name__(self,owner,name)
Any of the methods in , This class is not an ordinary class ,
Should be called :
Descriptor class ( Apply to ORM In the model )
"""
class Field(object):
"""
As long as any of the following methods appear in a class , This class is a descriptor class
"""
def __get__(self, instance, owner):
print('---get--- Method triggered ')
def __set__(self, instance, value):
"""
:param instance: Modified object
:param value: Modified value
:return:
"""
print('---set--- Method triggered ')
self.value = value
def __delete__(self, instance):
pass
class Model(object):
attr = Field() # attr Is a descriptor object , Cannot trigger when modifying __setattr__ Other methods ,
# Only those inside the descriptor class can be triggered __set__ Method
if __name__ == '__main__':
m = Model()
m.attr = 666 # Try to modify attr attribute
print(m.attr)
# Output :
---set - -- Method triggered
---get - -- Method triggered
None
"""
As long as a class appears :
__get__(self,instance,owner)
__set__(self,instance,value)
__delete__(self,instance)
__set_name__(self,owner,name)
Any of the methods in , This class is not an ordinary class ,
Should be called :
Descriptor class ( Apply to ORM In the model )
"""
class Field(object):
"""
As long as any of the following methods appear in a class , This class is a descriptor class
"""
def __get__(self, instance, owner):
print('---get--- Method triggered ')
print(instance) # <__main__.Model object at 0x7f80b81a09d0>
print(owner) # <class '__main__.Model'>
return self.value
def __set__(self, instance, value):
"""
:param instance: Modified object
:param value: Modified value
:return:
"""
print('---set--- Method triggered ')
self.value = value
def __delete__(self, instance):
pass
class Model(object):
attr = Field() # attr Is a descriptor object , Cannot trigger when modifying __setattr__ Other methods ,
# Only those inside the descriptor class can be triggered __set__ Method
if __name__ == '__main__':
m = Model()
m.attr = 666 # Try to modify attr attribute
print(m.attr) # 666
# Output :
---set - -- Method triggered
---get - -- Method triggered
< __main__.Model object at 0x7f80b81a09d0 >
< class '__main__.Model'>
666
3.__delete__ Method : Delete attribute
"""
As long as a class appears :
__get__(self,instance,owner)
__set__(self,instance,value)
__delete__(self,instance)
__set_name__(self,owner,name)
Any of the methods in , This class is not an ordinary class ,
Should be called :
Descriptor class ( Apply to ORM In the model )
"""
class Field(object):
"""
As long as any of the following methods appear in a class , This class is a descriptor class
"""
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
"""
:param instance: Modified object
:param value: Modified value
:return:
"""
print('---set--- Method triggered ')
self.value = value
def __delete__(self, instance):
print('---delete--- Method triggered ')
class Model(object):
attr = Field() # attr Is a descriptor object , Cannot trigger when modifying __setattr__ Other methods ,
# Only those inside the descriptor class can be triggered __set__ Method
if __name__ == '__main__':
m = Model()
m.attr = 666 # Try to modify attr attribute
del m.attr # ---delete--- Method triggered
print(m.attr) # None
# Output :
---set - -- Method triggered
---delete - -- Method triggered
666
"""
As long as a class appears :
__get__(self,instance,owner)
__set__(self,instance,value)
__delete__(self,instance)
__set_name__(self,owner,name)
Any of the methods in , This class is not an ordinary class ,
Should be called :
Descriptor class ( Apply to ORM In the model )
"""
class Field(object):
"""
As long as any of the following methods appear in a class , This class is a descriptor class
"""
def __get__(self, instance, owner):
print('---get--- Method triggered ')
print(instance) # <__main__.Model object at 0x7f80b81a09d0>
print(owner) # <class '__main__.Model'>
return self.value
def __set__(self, instance, value):
"""
:param instance: Modified object
:param value: Modified value
:return:
"""
print('---set--- Method triggered ')
self.value = value
def __delete__(self, instance):
print('---delete--- Method triggered ')
print(instance) # <__main__.Model object at 0x7ff61806a160>
self.value = None
class Model(object):
attr = Field() # attr Is a descriptor object , Cannot trigger when modifying __setattr__ Other methods ,
# Only those inside the descriptor class can be triggered __set__ Method
if __name__ == '__main__':
m = Model()
m.attr = 666 # Try to modify attr attribute
del m.attr # ---delete--- Method triggered
print(m.attr) # None
# Output :
---set - -- Method triggered
---delete - -- Method triggered
< __main__.Model object at 0x7ff61806a160 >
---get - -- Method triggered
< __main__.Model object at 0x7ff61806a160 >
<class '__main__.Model'>
None
4. Descriptor implementation ORM Model :
"""
Through the descriptor ORM Model
"""
class CharField(object):
def __init__(self,max_length=20):
self.max_length = max_length
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
# First, judge whether it is empty
if value is not None:
# Then judge whether it is a string
if isinstance(value, str):
# Then judge whether the length meets the requirements
if len(value) <= self.max_length:
self.value = value
else:
raise TypeError('length need less than {}'.format(self.max_length))
else:
raise TypeError('need a str')
else:
raise TypeError("can not be None")
def __delete__(self, instance):
self.value = None
class IntegerField(object):
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
# First, judge whether it is empty
if value is not None:
# Then judge whether it is an integer int
if isinstance(value, int):
self.value = value
else:
raise TypeError('need a int')
else:
raise TypeError("can not be None")
def __delete__(self, instance):
self.value = None
class UserModel(object):
# Define the model class of user information
name = CharField(max_length=20) # Definition :name Can only be assigned as a string
pwd = CharField(max_length=40)
age = IntegerField() # Definition :age Can only be assigned as an integer
if __name__ == '__main__':
user = UserModel()
user.name = " Springfield "
print(user.name) # Output : Springfield
user.age = 130
print(user.age) # Output : 130
user.pwd = 'wsdgdgdrgerdsfs Way van der Sar sends Arthur fisaffa sfa fda fsdf sdf fg'
print(user.pwd) # Output : TypeError: length need less than 40
边栏推荐
猜你喜欢

4. File modification
![[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 15](/img/72/0fe9cb032339d5f1ccf6f6c24edc57.jpg)
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 15

XSS challenges绕过防护策略进行 XSS 注入

Httprunnermanager installation (III) - configuring myql Database & initialization data under Linux
![[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 11](/img/6a/398d9cceecdd9d7c9c4613d8b5ca27.jpg)
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 11

ReferenceError: primordials is not defined错误解决

PMP practice once a day | don't get lost in the exam -7.5
![[pointer training - eight questions]](/img/fd/1aa3937548a04078c4d7e08198c3a8.png)
[pointer training - eight questions]

Reverse repackaging of wechat applet

CobaltStrike-4.4-K8修改版安装使用教程
随机推荐
Redis installation
[Chongqing Guangdong education] higher mathematics I reference materials of Southwest Petroleum University
[kubernetes series] learn the exposed application of kubernetes service security
[matlab] access of variables and files
微服务间通信
How to improve the enthusiasm of consumers when the member points marketing system is operated?
华为、H3C、思科命令对比,思维导图形式从基础、交换、路由三大方向介绍【转自微信公众号网络技术联盟站】
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 14
2.13 simulation summary
张丽俊:穿透不确定性要靠四个“不变”
Universal crud interface
Differences and usage scenarios between TCP and UDP
Software design principles
【若依(ruoyi)】设置主题样式
不赚钱的科大讯飞,投资价值该怎么看?
Redis skip table
Modeling specifications: naming conventions
[Digital IC manual tearing code] Verilog asynchronous reset synchronous release | topic | principle | design | simulation
What is the investment value of iFLYTEK, which does not make money?
【 kubernets series】 a Literature Study on the Safe exposure Applications of kubernets Service