在Django中,当你有一个父类和多个从它继承的子类时,你通常会通过parentclass.childclass1_set或parentclass.childclass2_set访问一个子节点,但如果我不知道我想要的特定子类的名称呢?
有没有办法在不知道子类名的情况下获取parent-> child方向的相关对象?
我已经让Django设置为在自己的线程中运行一些重复的任务,我注意到他们总是留下未完成的数据库连接进程(pgsql"Idle In Transaction").
我查看了Postgres日志,发现事务没有完成(没有ROLLBACK).我尝试在我的函数上使用各种事务装饰器,没有运气.
我切换到手动事务管理并手动执行回滚,但仍然有效,但仍将进程保留为"空闲".
所以我调用了connection.close(),一切都很顺利.
但是我想知道,为什么Django的典型事务和连接管理不适用于从主Django线程生成的这些线程任务?
我正在尝试在同一域下的子目录中设置两个(或更多)Django应用程序,例如:
http://example.com/site1/
http://example.com/site2/
Run Code Online (Sandbox Code Playgroud)
我知道通常这可以通过设置这样的apache虚拟主机来正常工作:
<VirtualHost *:80>
...
WSGIScriptAlias /site1 /path/to/site1.wsgi
WSGIScriptAlias /site2 /path/to/site2.wsgi
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
现在,我已经确认每个网站都是单独运作的.但是当我尝试并排运行时,apache会将我发送到工作进程首先加载的任何站点.例:
实际上,对于任何给定数量的工作进程,无论WSGIScriptAlias指令如何,它都会循环执行将请求发送到其首先命中的总数.无论我做什么(设置WSGIProcessGroup,守护进程模式与嵌入模式或指令),它都会继续表现出这种行为.
如果有人能指出我在这里做错了什么,那就太惊人了!
我想为我的Django网站实现Facebook连接登录,我已经检查了现有的应用程序.
到目前为止,为此我找到了Django-Socialauth,django-socialregistration和django-facebookconnect.
问题是选择哪一个,我想听听其他任何有这些应用程序经验的开发人员的意见.
对我来说,Facebook Connect登录应用程序与@login_required,默认的auth系统以及django-registration一起使用非常重要.
请分享你的经验:)
我有一段代码,我无法弄清楚如何进行单元测试!该模块使用urllib2从外部XML提要(twitter,flickr,youtube等)中提取内容.这是一些伪代码:
params = (url, urlencode(data),) if data else (url,)
req = Request(*params)
response = urlopen(req)
#check headers, content-length, etc...
#parse the response XML with lxml...
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是挑选响应并加载它以进行测试,但显然urllib的响应对象是不可序列化的(它引发了异常).
仅仅从响应主体保存XML并不理想,因为我的代码也使用了头信息.它旨在作用于响应对象.
当然,在单元测试中依赖外部数据来源是一个可怕的想法.
那么我该如何为此编写单元测试呢?
以下代码:
var str= "<strong>English Comprehension<\/strong>
<br\/>
<ul>
<li> Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>
<li> Complete the Sentence (Grammar)<\/li>
<li> Spot error/Correct sentence (Grammar/sentence construction)<\/li>
<li> Sentence Ordering (Comprehension skills)<\/li>
<li> Questions based on passage (Comprehension skills)<\/li>
<\/ul>
<br\/>";
Run Code Online (Sandbox Code Playgroud)
给出错误:"未终止的字符串文字".有什么问题?
我正在尝试为一些具有FileField的模型构建测试.该模型如下所示:
class SolutionFile(models.Model):
'''
A file from a solution.
'''
solution = models.ForeignKey(Solution)
file = models.FileField(upload_to=make_solution_file_path)
Run Code Online (Sandbox Code Playgroud)
我遇到了两个问题:
使用时将数据保存到夹具时./manage.py dumpdata
,不保存文件内容,只将文件名保存到夹具中.虽然我发现这是预期的行为,因为文件内容没有保存到数据库中,我想以某种方式将这些信息包含在夹具中进行测试.
我有一个用于上传文件的测试用例,如下所示:
def test_post_solution_file(self):
import tempfile
import os
filename = tempfile.mkstemp()[1]
f = open(filename, 'w')
f.write('These are the file contents')
f.close()
f = open(filename, 'r')
post_data = {'file': f}
response = self.client.post(self.solution.get_absolute_url()+'add_solution_file/', post_data,
follow=True)
f.close()
os.remove(filename)
self.assertTemplateUsed(response, 'tests/solution_detail.html')
self.assertContains(response, os.path.basename(filename))
Run Code Online (Sandbox Code Playgroud)虽然此测试工作正常,但在完成后将上传的文件保留在媒体目录中.当然,删除可以照顾tearDown()
,但我想知道Django是否有另一种处理方式.
我想到的一个解决方案是使用不同的媒体文件夹进行测试,必须与测试夹具保持同步.有没有办法在settings.py
运行测试时指定另一个媒体目录?我可以在dumpdata中包含某种钩子,以便同步媒体文件夹中的文件吗?
那么,是否有更多的Pythonic或Django特定方式处理涉及文件的单元测试?
默认情况下,当您调用ElementTree.parse(someXMLfile)时,Python ElementTree库会为每个已解析的节点添加前缀,并在Clark的Notation中使用它的命名空间URI:
{http://example.org/namespace/spec}mynode
这使得在代码中稍后按名称访问特定节点非常痛苦.
我已经阅读了有关ElementTree和命名空间的文档,看起来该iterparse()
函数应该允许我改变解析器前缀命名空间的方式,但对于我的生活,我实际上无法让它改变前缀.似乎在ns-start事件发生之前可能会在后台发生这种情况,如下例所示:
for event, elem in iterparse(source):
if event == "start-ns":
namespaces.append(elem)
elif event == "end-ns":
namespaces.pop()
else:
...
Run Code Online (Sandbox Code Playgroud)
如何更改前缀行为以及函数结束时返回的内容是什么?
可能重复:
如何在python中获取/设置逻辑目录路径
我有一个Python脚本,我从一个符号链接的目录运行,我在其中调用os.getcwd(),期望得到我运行它的符号链接路径.相反,它给了我"真正的"路径,在这种情况下,这没有帮助.我需要它来实际给我符号链接版本.
Python有命令吗?
我有一些看起来像这样的Django表单代码:
class GalleryAdminForm(forms.ModelForm):
auto_id=False
order = forms.CharField(widget=forms.HiddenInput())
Run Code Online (Sandbox Code Playgroud)
这使得表单字段消失了,但它在Django管理页面中留下了标签"Order".如果我使用:
order = forms.CharField(widget=forms.HiddenInput(), label='')
Run Code Online (Sandbox Code Playgroud)
我仍然留下了字段和标签之间的":".
我如何隐藏整个事情?!
python ×8
django ×5
unit-testing ×2
apache ×1
apache2 ×1
database ×1
django-admin ×1
django-apps ×1
elementtree ×1
facebook ×1
filefield ×1
javascript ×1
many-to-many ×1
mod-wsgi ×1
namespaces ×1
path ×1
symlink ×1
transactions ×1
urllib ×1
urllib2 ×1
wsgi ×1
xml ×1