我有一个Django表单,它将向一个数据库添加一个条目,其中一个列具有唯一约束.如果提交尝试创建重复,我得到一个django.db.utls.IntegrityError声明我违反了唯一约束(谢天谢地).
处理Django表单时,有许多方法可以验证:
clean方法clean_<field>方法如果clear_<field>方法引发a django.forms.ValidationError,则错误消息将附加到_errors字段名称下的字典中的列表中.使用该clean方法时,应将错误手动插入到_errorsdict中.
现在,clean和clean_<field>方法听起来不是放置有副作用的代码的好地方,我担心此时检查值是否唯一并不能保证我不会得到IntegrityErrors.我宁愿尝试在数据库中创建行,并在违反约束时发出表单错误信号.
我的主要问题是,形式公开公共属性errors这是只读的.因此,根据文档,我应该在我的表单中添加一个完成所有工作的方法,尝试插入数据库并在IntegrityError引发时注册错误.因为验证后处理表单的操作需要大量其他数据,所以我不想将代码放在表单类本身中.
是否还有其他(有记录的或有记录的)方法可以errors在课堂外的dict中添加一个条目,或者我应该只是访问_errors"私有"变量并对此感到满意?我知道这听起来像是一个OOP漏洞,但创建一个额外的方法只是为了访问这个"私有"变量在我看来似乎并不像任何人屏蔽任何东西.
编辑:
似乎其他人已经提出了类似的问题,但似乎答案指向手动插入_errors...
我习惯使用Sphinx进行C++和Python项目.我刚刚在Clojure开始了一个项目,我想重新使用我的Sphinx/reStructuredText技能来记录我的Clojure代码.由于Clojure 没有内置域,我开始写一个.
具有讽刺意味的是,Sphinx的文档对于编写扩展程序毫无帮助.所以,从Python和Javascript的内置模式开始,我已经有了一些基本元素.我可以使用以下指令编写函数文档:
.. clj:ns:: clojure.core
.. clj:fn:: (filter f coll)
:param f: predicate
:param coll: collection
Built-in!
Run Code Online (Sandbox Code Playgroud)
但是,HTML输出会生成C/Python样式的签名.前面的示例生成如下内容:
filter(f, coll)
Parameters: * f - predicate
* coll - collection
Built-in!
Run Code Online (Sandbox Code Playgroud)
我宁愿以lisp-ish形式获得签名:
(filter f coll)
Parameters: * f - predicate
* coll - collection
Built-in!
Run Code Online (Sandbox Code Playgroud)
生成签名的代码似乎一直到docutils.addnodes模块.如何让Sphinx使用Sphinx语法生成HTML?它可以用模板完成,还是我需要通过整个构建器系统来执行此操作?
我非常喜欢Python virtualenv,它有助于维护单独的Python配置.我正在考虑将Python嵌入到C++应用程序中,并且想知道嵌入式Python在虚拟环境方面的表现如何.
特别是,我有兴趣知道是否可以基于某些用户定义的设置"选择"虚拟环境(例如,通过在配置文件中命名感兴趣的虚拟环境).
web.application接受web.py教程通过的未记录的fvars参数,如下所示:globals()
import web
class index:
def GET(self):
return "Hello, world!"
urls = (
'/', 'index'
)
if __name__ == "__main__":
app = web.application(urls, globals())
Run Code Online (Sandbox Code Playgroud)
我见过至少一个通过的应用程序locals().这是什么变量用途,以及为什么你想要通过它locals()还是globals()?
好的,我知道不推荐通过 Django 提供媒体文件。但是,我希望通过 Django 模型使用细粒度访问控制来提供“静态”文件。
示例:我想通过网络向自己提供我的电影库。我经常出差,我希望能够随时随地观看我的任何电影,前提是我可以访问互联网。所以我翻录了我的 DVD,将它们上传到我的服务器并构建了这个简单的 Django 应用程序以及一些可嵌入的视频播放器。
为了避免任何法律后果,我想确保只有具有适当权限的登录用户(即我自己和住在同一家庭的人,可以像我一样,在他们方便的时候访问真正的 DVD),但拒绝它给其他用户(即在我的博客上发表评论的人)并返回 HTTP 404。
现在,直接使用 Apache 提供这些文件mod_wsgi相当麻烦,因为当媒体文件的 HTTP 请求(即http://video.mywebsite.com/my-favorite-movie/)进来时,我需要根据我的用户数据库验证另一端的人是否具有适当的权限。
问题:我可以在不直接通过 Django 视图提供媒体文件的情况下实现这种效果吗?我有哪些选择?
我确实想到的一件事是编写一个简单的脚本,该脚本采用会话 ID 和视频的 slug 并返回一些布尔值,指示用户是否可以(或不可以)访问视频文件。然后,mod_wsgi在访问请求的 URL 之前以某种方式请求执行此脚本,如果脚本失败,则返回 HTTP 404。但是,我不知道这是否可能。
编辑:发布这个问题澄清了我的一些想法搜索,我碰到过mod_python的文件扩展名的包装。有没有人有足够的经验来验证它是一个可行的解决方案?
我最近在Clojure看了很多,我一直在想它是否适合我下一个项目的范围.不幸的是,它涉及编写不可移植的代码,我需要访问Win32 API.
我偶然发现了Java Native Access库,可以轻松地将带有C接口的本机库映射到Java.它甚至提供了一个(空的)包装器Kernel32.dll作为教程中的一个例子!
但是,我有点难过将例子从Java翻译成Clojure.我知道我可以实现接口和实现类,但是我怎样才能简单地扩展接口?
感谢Joost发布的链接,这是一个最小的工作示例:
(import (com.sun.jna Library Native Platform Pointer))
(import (com.sun.jna.win32 StdCallLibrary))
(def K32
(gen-interface
:name Kernel32
:extends [com.sun.jna.win32.StdCallLibrary]
:methods [[GetCurrentProcess [] com.sun.jna.Pointer]]))
(defn load-native-library [name interface]
(cast interface (com.sun.jna.Native/loadLibrary name interface)))
(def k32 (load-native-library "kernel32" K32))
(println (.GetCurrentProcess k32))
Run Code Online (Sandbox Code Playgroud)
输出#<Pointer native@0xffffffff>,如预期!
Python 中的堆栈跟踪显示文件路径。有什么方法可以让它们显示完全限定的函数名称吗?
例子:
class Foo(object):
def bar(self):
raise Exception, "Some error."
def inner():
return Foo().bar()
def outer():
return inner()
Run Code Online (Sandbox Code Playgroud)
我希望我的输出看起来像这样:
In __main__.Foo.bar ("scratchpad.py", line 3)
__main__.inner ("scratchpad.py", line 6)
__main__.outer ("scratchpad.py", line 9)
Exception: Some error.
Run Code Online (Sandbox Code Playgroud)
如果有什么改变的话,我正在使用 Python 2.7。
这是我到目前为止所拥有的:
import sys
class Foo(object):
def bar(self):
raise Exception, "Dummy value."
def inner():
"Inner function..."
return Foo().bar()
def outer():
return inner()
try:
outer()
except Exception, error:
traceback = sys.exc_info()[2]
while traceback is not None:
frame = traceback.tb_frame
print 'Name', frame.f_globals['__name__']+'.'+frame.f_code.co_name
docs …Run Code Online (Sandbox Code Playgroud) 我想要打印出文本文件的最后10行.使用这个程序我已经能够读取整个文本文件,但我无法弄清楚如何在保存文本文件的情况下编写数组,任何帮助?
// Textfile output
#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;
int main() {
int i=1;
char zeile[250], file[50];
cout << "filename:" << flush;
cin.get(file,50); ///// (1)
ifstream eingabe(datei , ios::in); /////(2)
if (eingabe.good() ) { /////(3)
eingabe.seekg(0L,ios::end); ////(4)
cout << "file:"<< file << "\t"
<< eingabe.tellg() << " Bytes" ////(5)
<< endl;
for (int j=0; j<80;j++)
cout << "_";
cout << endl;
eingabe.seekg(0L, ios::beg); ////(6)
while (!eingabe.eof() ){ ///(7)
eingabe.getline(zeile,250); ///(8)
cout << setw(2) << i++
<< ":" << zeile …Run Code Online (Sandbox Code Playgroud) 我刚刚将一个较大的项目从 Visual Studio 解决方案迁移到 CMake,我注意到一个奇怪的行为。我有类似以下结构:
project/CMakeLists.txt
project/code/CMakeLists.txt
project/code/library-1/CMakeLists.txt
project/code/library-1/*.hpp
project/code/library-1/*.cpp
project/code/library-2/CMakeLists.txt
project/code/library-2/*.hpp
project/code/library-2/*.cpp
...
project/code/library-n/CMakeLists.txt
project/code/library-n/*.hpp
project/code/library-n/*.cpp
project/demo/CMakeLists.txt
project/demo/demo-1/CMakeLists.txt
project/demo/demo-1/*.hpp
project/demo/demo-1/*.cpp
project/demo/demo-2/CMakeLists.txt
project/demo/demo-2/*.hpp
project/demo/demo-2/*.cpp
...
project/demo/demo-n/CMakeLists.txt
project/demo/demo-n/*.hpp
project/demo/demo-n/*.cpp
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt文件配置编译标志、宏定义等,并使用 CMakeadd_subdirectory()来包含库和演示项目定义的目标。code子文件夹包含子文件夹的平面列表,每个子文件夹都包含静态库的源代码(以及文件中定义的目标CMakeLists.txt)。demo文件夹包含子文件夹的平面列表。每个都包含可执行文件和关联CMakeLists.txt文件的源代码。code。这个设定实在是太好了。如果我想更改构建选项,我只需要修改根目录CMakeLists.txt,所有内容都会使用新设置重新编译。如果我修改树中任何位置的任何源代码,则会重新编译相应的库(如果有),并且也会重新构建所有依赖的演示程序。
但是,如果我修改树中任何位置的任何文件,则整个库和程序树都会重新编译,而不考虑依赖性。 CMakeLists.txt为了让您明白我的意思,这里有 CMake 构建脚本的几个部分。
project/demo/CMakeLists.txt
# Resolve libraries built in `code` sub-folder.
link_directories(${LIBRARY_OUTPUT_PATH})
set(demo-projects
demo-1
demo-2
...
demo-n
)
foreach(demo-project ${demo-projects})
add_subdirectory(${demo-project})
endforeach()
Run Code Online (Sandbox Code Playgroud)
project/demo/demo-n/CMakeLists.txt
# Find all …Run Code Online (Sandbox Code Playgroud) 请看一下演示代码:
class myError
{
const char* str;
public:
myError():str(NULL) {}
myError(const char* temp)
{
str = temp;
}
const char* what()
{
return str;
}
};
class ab
{
int x;
public:
ab() try :x(0)
{
throw myError("error occured in the constructor of class ab");
}
catch(myError& temp)
{
std::cout<<"Handler no. 1 of ab constructor"<<std::endl;
}
};
int main () try
{
ab bb;
cout << "Resumed execution!" << endl;
return 0;
}
catch(myError& temp)
{
std::cout<<"Handler below the main …Run Code Online (Sandbox Code Playgroud) STL List和Vector如何实现?
我在接受采访时被问到这个问题.
我刚才说可能是通过使用关于向量的二叉树或哈希表.不确定列表...我错了,我想是的......给一些想法谢谢.
我正在使用Java的新I/O包为Clojure编写一个简单的网络框架.它管理一个"选择器代理"池,每个选择器代理都有一个选择器.
我dispatch为选择器代理定义了一个动作.此操作会阻止呼叫selector.select().当返回时,选择器代理迭代所选键并执行I/O. 当I/O完成时,选择器代理会自动发送dispatch操作send-off,有效地循环调用selector.select().
当我想添加新频道或更改频道的兴趣操作时,我会向选择器代理发送相应的操作,然后取消阻止选择器(它被阻止select(),记得吗?).这确保了(send-off selector-agent dispatch)在选择器代理之后 执行(send selector-agent add-channel channel).
我认为这将是防弹的,因为调用send-off是在选择器唤醒之前执行的,因此,在选择器代理向自己发送dispatch动作之前执行.但是,这会产生不一致的行为.有时,dispatch动作首先发生,有时则不发生.
我的理解是,不保证代理按照它们来自多个线程时发送的确切顺序执行操作(即send,send-off就排队操作而言,并不是同步的).
它是否正确?
说我有以下功能:
bool foo (int a); // This method declaration can not be changed.
Run Code Online (Sandbox Code Playgroud)
如何为此创建pthread?我如何找出函数返回的内容?我看过网上看起来像我想要创建一个pthread的任何函数必须void*作为一个参数,并且必须返回void*,我不太确定所有这些的投射是如何工作的,或者我在哪里会得到返回的布尔.
我是C++的新手,所以请耐心等待我=)