免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3062 | 回复: 2
打印 上一主题 下一主题

关于django中FileField源代码的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-24 12:20 |只看该作者 |倒序浏览
本帖最后由 liyan5953 于 2014-04-24 12:36 编辑

最近用django写一个缩略图上传的小应用,开始研究FileField的源代码。作为一个python新手,一看源代码就迷茫了。
所以想请教一下各位老鸟。
在源代码中
# The class to wrap instance attributes in. Accessing the file object off
# the instance will always return an instance of attr_class.
attr_class = FieldFile

# The descriptor to use for accessing the attribute off of the class.
descriptor_class = FileDescriptor

description = _("File")

The class to wrap instance attributes in.是什么意思啊,是一种python的惯用写法吗?
具体该如何实现呢?
哪位对这个有研究的老鸟,能给具体解释一下FileField的实现原理,以及FileField,FieldFile,FileDescriptor这三个类的具体关系呢?最好能举个简单的例子:)
3Q,very much。

论坛徽章:
0
2 [报告]
发表于 2014-04-26 01:40 |只看该作者
这个帖子发了很长时间了。一直没有人答复。不知道是咱们社区对python的理解就这么点?还是大家觉得我实在太菜,提这样的问题很可笑。
今天google到一篇说明问题的文章,发出来,给跟我一样在这个问题上的迷茫的菜鸟么。

究竟为什么要使用元类?
现在回到我们的大主题上来,究竟是为什么你会去使用这样一种容易出错且晦涩的特性?好吧,一般来说,你根本就用不上它:
“元类就是深度的魔法,99%的用户应该根本不必为此操心。如果你想搞清楚究竟是否需要用到元类,那么你就不需要它。那些实际用到元类的人都非常清楚地知道他们需要做什么,而且根本不需要解释为什么要用元类。”  —— Python界的领袖 Tim Peters
元类的主要用途是创建API。一个典型的例子是Django ORM。它允许你像这样定义:
class Person(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()
但是如果你像这样做的话:
guy  = Person(name='bob', age='35')
print guy.age
这并不会返回一个IntegerField对象,而是会返回一个int,甚至可以直接从数据库中取出数据。这是有可能的,因为models.Model定义了__metaclass__, 并且使用了一些魔法能够将你刚刚定义的简单的Person类转变成对数据库的一个复杂hook。Django框架将这些看起来很复杂的东西通过暴露出一个简单的使用元类的API将其化简,通过这个API重新创建代码,在背后完成真正的工作。

论坛徽章:
2
辰龙
日期:2013-09-24 12:26:05卯兔
日期:2013-09-24 12:27:37
3 [报告]
发表于 2014-04-29 23:42 |只看该作者
我最近也在看代码, 对 metaclass 也不太理解。
description = _("File") ,第一开始看到 _ ,还以为是 interactive 模式下保留上一次运行的结果,查了下是本地化
from django.utils.translation import ugettext_lazy as _

ref: http://stackoverflow.com/questio ... s-do-in-django-code

相互学习吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP