django中findbyproperty用法的用法

python property
在2.6版本中,添加了一种新的类成员函数的访问方式--property。
class property([fget[, fset[, fdel[, doc]]]])
fget:获取属性
fset:设置属性
fdel:删除属性
doc:属性含义
1.让成员函数通过属性方式调用
class C(object):
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
print C.x.__doc__ #打印doc
print a.x #调用a.getx()
a.x = 100 #调用a.setx()
del a.x #调用a.delx()
print a.x #已被删除,报错
except Exception, e:
输出结果:
I'm the 'x' property.None
'C' object has no attribute '_x'
2.利用property装饰器,让成员函数称为只读的
class Parrot(object):
def __init__(self):
self._voltage = 100000
def voltage(self):
"""Get the current voltage."""
return self._voltage
a = Parrot()
print a.voltage #通过属性调用voltage函数
print a.voltage() #不允许调用函数,为只读的
except Exception as e:
输出结果:
'int' object is not callable
3.利用property装饰器实现property函数的功能
class C(object):
def __init__(self):
self._x = None
def x(self):
"""I'm the 'x' property."""
return self._x
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
1.bottle源码中的应用
class Request(threading.local):
""" Represents a single request using thread-local namespace. """
def method(self):
''' Returns the request method (GET,POST,PUT,DELETE,...) '''
return self._environ.get('REQUEST_METHOD', 'GET').upper()
def query_string(self):
''' Content of QUERY_STRING '''
return self._environ.get('QUERY_STRING', '')
def input_length(self):
''' Content of CONTENT_LENGTH '''
return int(self._environ.get('CONTENT_LENGTH', '0'))
except ValueError:
def COOKIES(self):
"""Returns a dict with COOKIES."""
if self._COOKIES is None:
raw_dict = Cookie.SimpleCookie(self._environ.get('HTTP_COOKIE',''))
self._COOKIES = {}
for cookie in raw_dict.values():
self._COOKIES[cookie.key] = cookie.value
return self._COOKIES
2.在django model中的应用,实现连表查询
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=30)
tel = models.CharField(max_length=30)
class Score(models.Model):
pid = models.IntegerField()
score = models.IntegerField()
def get_person_name():
return Person.objects.get(id=pid)
name = property(get_person_name) #name称为Score表的属性,通过与Person表联合查询获取name
阅读(...) 评论()Django外键查询及@property在model中的妙用
上篇文章中聊了聊@property的用法,这篇文章则聊聊@property在model中的一些小技巧,同时也会涉及些Django在数据库建模的过程中,外键查询和反向查询方面的内容。
不多说,看例子
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=64)
age = models.IntegerField()
tel = models.CharField(max_length=64)
def all_cars(self):
return cars.all()
def info(self):
# return the name and tel of person
return '%s %s' % (self.name, self.tel)
class Car(models.Model):
owner = models.Foreignkey(Person, related_name='cars')
name = models.CharField(max_length=64)
price = models.FloatField()
在上面的两个表中,Person表是主表,Car是字表,Car表外键至Person表。
子表查询主表:
car = Car.objects.get(id=1)
# 查询该车的车主
owner = car.owner
主表查询子表,即反向查询:
Tom = Person.objects.get(id=1)
# 查询此人有多少车
# Django默认每个主表对象都有一个外键的属性
# 可以通过它来查询所有属于主表的子表信息
# 查询方式:主表.子表_set()
# 返回值为一个queryset对象
Tom.Car_set().all()
# 方式二:
# 通过在外键中设置related_name属性值既可
Tom.cars.all()
# 方式三:
# 通过@property装饰器在model中预定义方法实现
Tom.all_cars()
查询一些自己需要的组合数据,比如获取某人的关键信息
另外,在新的需求突然提出的时候,在不改动原有查询代码的情况下,在表模型中添加此装饰器装饰过的方法既可。标签:至少1个,最多5个
声明property的语法为:
@property (参数1,参数2) 类型 名字;
@property(nonatomic,retain) UIWindow *
其中参数主要分为三类:
读写属性: (readwrite/readonly)
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite: 产生settergetter方法
readonly: 只产生简单的getter,没有setter。
assign: 默认类型,setter方法直接赋值,而不进行retain操作
retain: setter方法对参数进行release旧值,再retain新值。
copy: setter方法进行Copy操作,与retain一样
nonatomic: 禁止多线程,变量保护,提高性能
@property的参数:
(1)set 方法内存管理相关的参数
(a)retain:release 旧值,retain 新值(适用于 OC对象类型)
(b)assign:直接赋值(默认,适用于非OC对象类型), 常用在 BOOL 、int
等基本数据类型。
(c)copy:release 旧值,copy新值, 常用在 NSString对象
(2)是否要生成 set 方法
(a)readwriter:同时生成set和get方法的声明和实现(b)readonly:只生成 get的声明和实现
(3)多线程管理
(a)nonatomic:性能高(一般都是使用这个)(b)atomic:性能低(默认)
(4)set 和 get 方法的名称
(a)setter:决定了 set 方法的名称,一定要加个冒号“:“(b)getter:决定了 get 方法的名称,不要加冒号
(5)strong 和 weak
(a) strong: 用于一般对象(b) weak: 用于UI控件
id万能指针
Person *p = [Person new];
id p = [Person new];
注意 id 和 p 之间不要再加了,id 中默认就带了。
详情请参考博文:
0 收藏&&|&&3
你可能感兴趣的文章
1 收藏,852
12 收藏,9.8k
分享到微博?
我要该,理由是:
在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?相关文章推荐
HttpRequest
HttpRequest代表一个来自uesr-agent的HTTP请求。
大多重要的请求信息都是作为HttpRequest 对象的属性出现(see Table H-1...
Django的views.py中定义的函数的requst参数,可以读request.method确定是POST还是GET
首先,request.GET 和 request.POST是两个对象,类...
Django 每一个view函数的第一个参数都是request,有没想过request里面到底有什么呢?
Django使用request和response对象在系统间传递状态。
两个问题:
1.在使用django时,前台页面使用post或者get方法给后台传递数据 django如何获得
首先可以用HttpRequest.method 方法判断是post还是get
请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象,然后Django加载合适的view方法,把这个HttpRequest 对象作为第一个参数传给view方法。...
原文地址:/power_mr/blog/static//
request.REQUEST...
QueryDict类型的对象包含get请求方式的所有参数与url请求地址中的参数对应,位于?后面参数的格式是键值对,如key1=value1多个参数之间,使用&连接,如key1=va...
在Django中,view是指一个方法,这个方法接收一个request,然后返回一个response.
当客户端发送一个请求的时候,Django会创建一个HttpRequest对象,这个对象包含...
之前在网上看过一些介绍Django处理请求的流程和Django源码结构的文章,觉得了解一下这些内容对开发Django项目还是很有帮助的。所以,我按照自己的逻辑总结了一下Django项目的运行方式和对R...
location: django.http
1. HttpResponse(content= ' ', mimetype=DEFAULT_CONTENT_TYPE)
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)相关文章推荐
转载自/blog/archive//66/use-south-migrate-django-project-database/
图片右键另存为到本地,改成docx就可以看了
这篇文章主要介绍了C++操作SQLite简明教程,包含创建表、插入数据、查询数据等常用操作,需要的朋友可以参考下
SQLite是一款轻型的本地文件数据库,是遵守ACID的关联式数据库管理系统...
转自/tugenhua0707/p/4050072.html
一:Git是什么?
Git是目前世界上最先进的分布式版本控制系统。
...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 qt setproperty的用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信