这是一个关于Python Mixins的问题,一般来说可能很有用.我只是使用Django模型,因为这是我最熟悉的用例.
如果mixin继承自该类,它是否设计为与'object'混合使用?
代码示例,更正确或更好,或更好,取决于您想要实现的目标?
这个
class TaggingMixin(models.Model):
tag = models.ForeignKey(Tag)
class Meta:
abstract = True
class MyModel(models.Model, TaggingMixin):
title = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
或这个:
class TaggingMixin(object):
tag = models.ForeignKey(Tag)
class Meta:
abstract = True
class MyModel(models.Model, TaggingMixin):
title = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
我认为从对象继承是正确的方法.但我正在网上看到第一个案例的例子......
编辑:我已将我的后续问题转移到一个单独的问题:Django抽象模型与简单Python混合与Python ABCs
我似乎无法理解我发现并研究用于跟踪外部代码的不同解决方案.更别说了解如何将它们应用到我的用例中......
你们真的很善于对此有所了解并帮助我解决具体的用例吗?对于以下具体问题,最佳解决方案是什么?(我不会试图概括我的问题,因为我可能会对事情做出错误的假设,特别是因为我对这一切都很新......)
我正在Django(Python中的Web框架)中构建一个网站.现在,有许多第三方插件可供Django使用(Django称之为"应用程序"),您可以放入项目中.其中一些应用程序可能需要一些修改才能像我想要的那样工作.但是,如果您开始对第三方代码进行修改,则会引入在更新版本出现时更新该代码的问题,同时保留您的本地修改.
所以,我在Subversion中这样做的方法是使用供应商分支.我的存储库布局如下所示:
/trunk
...
/apps
/blog-app
...
/tags
...
/branches
...
/vendor
/django-apps
/blog-app
/1.2
/1.3
/current
/other-app
/3.2
/current
Run Code Online (Sandbox Code Playgroud)
在这种情况下,/ trunk/apps/blog-app将被复制到/ vendor/django-apps/blog-app中的一个标签.说它是v1.2.而且我现在想将我的版本在trunk中升级到v1.3.如您所见,我已将/ vendor/django-apps/blog-app/current(使用svn_load_dirs)和'tagged'(svn copy)更新为/vendor/django-apps/blog-app/1.3.现在我可以通过svn合并/ trunk/apps上的/vendor/django-apps/blog-app/1.2和/vendor/django-apps/blog-app/1.3之间的更改来更新/ trunk/apps/blog-app /博客应用程序内.这将保留我当地的变化.(对于未知此过程的人,请参阅Subversion手册:http: //svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html)
现在我想在Git中完成整个过程.我怎样才能做到这一点?
让我重新讨论一下这些要求:
额外(奖励积分;-)):
可以使用两种方法的组合的解决方案将更加可取,因为可能有应用程序开发人员不使用源代码管理或不公开他们的回购.(意思是svn_load_dirs之类的行为和直接从Subversion重新定位(或其他Git)跟踪)
我想我要么必须使用子树,子模块,rebase,分支......或者这些的组合,但是如果我知道哪一个或者怎么做就打倒我:S
我急切地等待你的回复!回复时请尽可能详细,因为我已经很难理解在线发现的其他例子.
提前致谢
如果服务器在使用Uploadify上传文件时返回错误(HTTP响应代码!= 200),则上传的文件将显示红色背景,并显示如下消息:
file.jpg (52.78KB) - HTTP Error
Run Code Online (Sandbox Code Playgroud)
表示存在HTTP错误.但这对用户来说并不是很有用.如何让它显示更详细的错误消息?喜欢:'不是有效图像'或'配额满'?
我在考虑在HTTP响应体中传递这些消息,但是Uploadify没有接收它们.有没有已知的方法将错误消息传递回Uploadify?
Django提供了抽象基类功能(它与Python中的ABC类不同?)因此可以创建一个可以继承的模型(Django的models.Model),但是没有该模型在数据库中有一个实际的表.一个通过在Model的Meta类中设置'abstract'属性来触发此行为.
现在的问题是:为什么Django会这样解决?为什么需要这种特殊的'抽象基类'模型?为什么不通过继承对象类并将其与现有模型混合来制作模型mixin?或者这也可以通过Python ABCs的任务?(请注意,我对Python中的ABC类不是很熟悉,我的无知可能会在这里显示)
我希望我的代码能够自动尝试多种方式来创建数据库连接.一旦工作,代码需要继续前进(即它不应该再尝试其他方式).如果它们都失败了,那么脚本就会爆炸.
所以在 - 我的想法,但很可能不是 - 天才的一击,我试过这个:
import psycopg2
from getpass import getpass
# ouch, global variable, ooh well, it's just a simple script eh
CURSOR = None
def get_cursor():
"""Create database connection and return standard cursor."""
global CURSOR
if not CURSOR:
# try to connect and get a cursor
try:
# first try the bog standard way: db postgres, user postgres and local socket
conn = psycopg2.connect(database='postgres', user='postgres')
except psycopg2.OperationalError:
# maybe user pgsql?
conn = psycopg2.connect(database='postgres', user='pgsql')
except psycopg2.OperationalError: …Run Code Online (Sandbox Code Playgroud) 我要说实话:这是我上周在Django-Users邮件列表上提出的一个问题.由于我还没有得到任何回复,我将它重新发布在Stack Overflow上,希望它能在这里获得更多关注.
我想创建一个应用程序,使您可以轻松地在自己的应用程序中进行用户友好,多个/大量文件上传.用户友好,我的意思是上传,如Gmail,Flickr,...用户可以在浏览文件对话框中一次选择多个文件.然后按顺序或并行上载文件,并在页面上显示所选文件的精美概述,旁边有进度条."取消"上传按钮也是一种可能的选择.
所有这些好处通常都是通过使用Flash对象来解决的.完整的解决方案是在那里的客户端,如:SWFUpload的 http://swfupload.org/,FancyUpload http://digitarald.de/project/fancyupload/ ,YUI 2提供者http://developer.yahoo.com/yui/uploader /可能还有更多.
当然,诀窍是将这些解决方案集成到您的项目中.特别是在像Django这样的框架中,如果你希望它可以重复使用,请加倍.
所以,我有一些想法,但我既不是Django的专家,也不是基于Flash的上传解决方案.我将在这里分享我的想法,希望从更有知识和经验丰富的人那里获得一些反馈.(或者甚至只是一些'我也想要这个!'回复:))
您会注意到我做了一些假设:这是为了控制应用程序的(初始)范围.这些假设当然值得商榷:
好吧,我的想法到目前为止:
如果要批量上传多个文件,您将拥有一个包含每个文件的模型.即模型将包含一个FileField或一个ImageField.具有多个(但有限量)FileFields/ImageFields的模型不需要轻松大量上传imho:如果你有一个带有100个FileFields的模型你做错了什么:)你想要我想象的那种大量上传的例子:
能够为您喜爱的Flash上传解决方案配置或扩展应用程序会很不错.我们可以选择上面三个中的一个作为默认值,但实现应用程序,以便人们可以轻松添加其他实现(有点像Django可以使用多个数据库).让它与任何特定的客户端解决方案无关.
如果我们需要选择一个开头,也许选择占地面积最小的那个?(最小的客户端东西下载)
基于Flash的解决方案异步(并且顺序或并行)将文件POST到URL.我建议将url设置为我们的通用应用程序的本地(因此,对于您使用我们的应用程序的每个应用程序,它都是相同的).该网址将转到我们的通用应用提供的视图.
该视图将执行以下操作:创建新模型实例,添加文件,OPTIONALLY DO EXTRA STUFF并保存实例.
DO EXTRA STUFF是使用我们的应用程序的应用程序想要运行的代码.它不必提供任何额外的代码,如果模型只有FileField/ImageField,标准视图代码将完成这项工作.但大多数应用程序都希望做更多我认为的东西,比如填写其他字段:title,date_added,foreignkeys,manytomany,...
我还没有想过DO EXTRA STUFF的机制.只想包装通用应用程序视图,但这不是开发人员友好的,因为您必须编写自己的url模式和自己的视图.然后你必须告诉Flash解决方案使用一个新的URL等...我觉得像这样的信号可以在这里使用?
表单/管理员:我仍然非常粗略地说明如何将所有这些最好地集成到Admin或通用Django表单/窗口小部件/ ...(这是我缺乏Django体验节目):
在我开始使用这个应用程序之前,可能还有几十个问题需要回答.所以请告诉我你的想法!给我输入!你喜欢什么?什么不是?你会做什么不同的?这个想法是否稳固?它不在哪里?
谢谢!