小编And*_*ron的帖子

在Django中外部添加表单错误

我有一个Django表单,它将向一个数据库添加一个条目,其中一个列具有唯一约束.如果提交尝试创建重复,我得到一个django.db.utls.IntegrityError声明我违反了唯一约束(谢天谢地).

处理Django表单时,有许多方法可以验证:

  1. 覆盖表单类的clean方法
  2. 覆盖表单类的clean_<field>方法

如果clear_<field>方法引发a django.forms.ValidationError,则错误消息将附加到_errors字段名称下的字典中的列表中.使用该clean方法时,应将错误手动插入_errorsdict中.

现在,cleanclean_<field>方法听起来不是放置有副作用的代码的好地方,我担心此时检查值是否唯一并不能保证我不会得到IntegrityErrors.我宁愿尝试在数据库中创建行,并在违反约束时发出表单错误信号.

我的主要问题是,形式公开公共属性errors这是只读的.因此,根据文档,我应该在我的表单中添加一个完成所有工作的方法,尝试插入数据库并在IntegrityError引发时注册错误.因为验证后处理表单的操作需要大量其他数据,所以我不想将代码放在表单类本身中.

是否还有其他(有记录的或有记录的)方法可以errors在课堂外的dict中添加一个条目,或者我应该只是访问_errors"私有"变量并对此感到满意?我知道这听起来像是一个OOP漏洞,但创建一个额外的方法只是为了访问这个"私有"变量在我看来似乎并不像任何人屏蔽任何东西.

编辑: 似乎其他人已经提出了类似的问题,但似乎答案指向手动插入_errors...

django django-forms

6
推荐指数
1
解决办法
2719
查看次数

Clojure的Sphinx域名

我习惯使用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?它可以用模板完成,还是我需要通过整个构建器系统来执行此操作?

clojure docutils python-sphinx

6
推荐指数
1
解决办法
776
查看次数

虚拟环境和嵌入Python

我非常喜欢Python virtualenv,它有助于维护单独的Python配置.我正在考虑将Python嵌入到C++应用程序中,并且想知道嵌入式Python在虚拟环境方面的表现如何.

特别是,我有兴趣知道是否可以基于某些用户定义的设置"选择"虚拟环境(例如,通过在配置文件中命名感兴趣的虚拟环境).

python embed virtualenv

6
推荐指数
1
解决办法
1871
查看次数

将"globals()"作为web.py fvars传递的目的是什么?

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()

web.py

6
推荐指数
1
解决办法
1856
查看次数

Django:控制对“静态”文件的访问

好的,我知道不推荐通过 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文件扩展名的包装。有没有人有足够的经验来验证它是一个可行的解决方案?

django video mod-wsgi static-files

5
推荐指数
1
解决办法
1686
查看次数

在Clojure中扩展(不实现)Java接口

我最近在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>,如预期!

clojure jna

5
推荐指数
1
解决办法
1135
查看次数

带模块名称的 Python 回溯

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)

python

5
推荐指数
1
解决办法
2564
查看次数

打印出文件的最后10行

我想要打印出文本文件的最后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)

c++ cout file tail

4
推荐指数
1
解决办法
5693
查看次数

CMake add_subdirectory 并重新编译

我刚刚将一个较大的项目从 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)
  1. CMakeLists.txt文件配置编译标志、宏定义等,并使用 CMakeadd_subdirectory()来包含库和演示项目定义的目标。
  2. code子文件夹包含子文件夹的平面列表,每个子文件夹都包含静态库的源代码(以及文件中定义的目标CMakeLists.txt)。
  3. demo文件夹包含子文件夹的平面列表。每个都包含可执行文件和关联CMakeLists.txt文件的源代码。
  4. 每个库都是一个独立的组件,并且独立于所有其他库和演示项目而构建。
  5. 每个演示程序都依赖于子文件夹中的一个或多个不同的库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)

cmake

4
推荐指数
1
解决办法
7237
查看次数

关于异常处理的一些问题

请看一下演示代码:

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)

c++ exception-handling

3
推荐指数
1
解决办法
149
查看次数

STL List和Vector是如何实现的?

STL List和Vector如何实现?

我在接受采访时被问到这个问题.

我刚才说可能是通过使用关于向量的二叉树或哈希表.不确定列表...我错了,我想是的......给一些想法谢谢.

c++ stl

2
推荐指数
1
解决办法
9352
查看次数

Clojure的"发送"是异步的吗?

我正在使用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就排队操作而言,并不是同步的).

它是否正确?

clojure

2
推荐指数
1
解决办法
675
查看次数

C++,为具有返回类型的函数创建pthread?

说我有以下功能:

bool foo (int a); // This method declaration can not be changed.
Run Code Online (Sandbox Code Playgroud)

如何为此创建pthread?我如何找出函数返回的内容?我看过网上看起来像我想要创建一个pthread的任何函数必须void*作为一个参数,并且必须返回void*,我不太确定所有这些的投射是如何工作的,或者我在哪里会得到返回的布尔.

我是C++的新手,所以请耐心等待我=)

c++ posix pthreads

1
推荐指数
1
解决办法
5512
查看次数