小编Nic*_*ton的帖子

使用django进行自定义身份验证?

因为我不想使用Django的内置认证系统(也许我应该这样做,请告诉我是否是这种情况),我创建了一个简单的小auth类:

import random
import hashlib
from myapp import models

class CustomerAuth:
    key = 'customer'

    def __init__(self, session):
        self.session = session

    def attempt(self, email_address, password):
        password_hash = hashlib.sha1(password).hexdigest()
        try:
            return models.Customer.objects.get(
                email_address=email_address,
                password_hash=password_hash)
        except models.Customer.DoesNotExist:
            return None

    def login(self, customer):
        self.session[self.key] = customer

    def logout(self):
        if self.session.has_key(self.key):
            self.session[self.key] = None

    def is_logged_in(self):
        return self.session.has_key(self.key)
            and self.session[self.key] != None

    def get_active(self):
        if self.is_logged_in():
            return self.session[self.key]
        else:
            raise Exception('No user is logged in.')

    def redirect_to_login(self):
        return HttpResponseRedirect('/login/')

    def redirect_from_login(self):
        return HttpResponseRedirect('/account/')
Run Code Online (Sandbox Code Playgroud)

问题是,当我想用​​它来阻止未经授权的访问时,我必须在每个单一的视图方法中使用这个代码片段:

def …
Run Code Online (Sandbox Code Playgroud)

authentication django

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

如何从boost线程访问我的类实例?

我有以下代码(这是一些半sudo代码,可能无法编译):

class FooBar {
public:
    void a();
    void b();
    boost::shared_ptr<boost::thread> m_thread;
    std::string m_test;
};

void FooBar::a() {
    m_test = "Foo bar"
    m_thread = shared_ptr<thread>(new thread(bind(&FooBar::b, this)));
}

void FooBar::b() {
    cout << m_test;
}
Run Code Online (Sandbox Code Playgroud)

代码cout << test不会产生任何输出,因为m_test""代替"Foo bar".为什么是这样?我认为this作为第二个参数传递bind将允许我访问同一个实例b()- 我不正确吗?

c++ multithreading boost

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

为什么我使用Perl的DBI-> connect会无声地失败?

为什么这段代码会无声地失败?我如何让它向我展示SQL错误究竟是什么?

$dbh=DBI->connect($db_name,$db_user,$db_pass);
Run Code Online (Sandbox Code Playgroud)

我将代码修改为如下所示:

$dbh=DBI->connect($db_name,$db_user,$db_pass)
    or die("could not connect to db: $db_name");
Run Code Online (Sandbox Code Playgroud)

而不是允许我使用$dbh未分配的,它将按预期失败,但它并没有告诉我它为什么失败.$db_name就我所见,etc 的值都设置为有效值.

我知道真正的错误(MySQL服务器实际上没有运行)但是为了将来的参考,我希望看到真正的错误,例如我导致auth失败.

perl dbi

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

我应该在LaTeX和MetaPost上还是仅在MetaPost上都买一本书?

我觉得LaTeX语法很容易使用。但是,我开始在文档中包含图表。我发现了MetaPost令人兴奋的世界!事实是,MetaPost语法看起来比LaTeX更加强烈...所以我想我会买一本关于它的书。我想知道,是否最好买一本同时谈论LaTeX(也许我可以学到一些东西)和MetaPost的通用书籍,还是应该买一本只专注于MetaPost的书呢?鉴于这本专门书籍将涉及更多内容,因此我认为入门的内容可能会更好。

如果相关,则该文档为软件项目规范;因此它包含UML和数据流程图。老实说,我实际上是想知道LaTeX是否与此问题有关-如果是这样,是否有有关MetaPost的权威书籍?

上日期:

我只是意识到我在不经意间使用了MetaUML,而不是原始的MetaPost。因此,对于那些不知道的人,MetaUML是MetaPost的软件包。正如用户Little Bobby Tables指出的那样,没有适用于MetaUML的书。

latex metapost

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

如何在C中通过TCP发送整数数组?

我认为write()只能发送byte的数据缓冲区(即signed char),那么如何使用write()sys/socket.h库中的C 函数发送长整数数组呢?

显然,我不能只是强制转换或转换为char,因为任何超过127的数字都会格式不正确.

我看了一下这个问题,如何将整数数组分解为一个字节数组(像素编码),但无法理解它 - 如果这是我正在寻找的东西,请有人愚蠢一点吗?

跟进问题:

当从TCP套接字读取整数数组时,为什么会出现奇怪的结果?

c sockets tcp

2
推荐指数
2
解决办法
3万
查看次数

发明命令名称的好方法是什么?

我们正努力为我们的所有目的"开发人员助手"工具提出一个命令名称,我们正在我们的项目中使用它.这就像我们现有的一样的工具的包装cmakehg.命令的目的只是通过将多个命令合并为一个(例如,发布包)来使我们的生活更轻松.例如,我们有如下命令:

do conf
do build
do install
do publish
Run Code Online (Sandbox Code Playgroud)

我们已经考虑了一些模糊的名称do(如上所述)run,但很明显,它do是一个Linux bash命令并且run非常模糊.

我们希望我们的命令是2个字符短,最好 - 但谁认为我们问的是不可能的?有没有一种实用的方法可以检查命令名称的可用性(除了只是在终端中键入它们),还是仅仅选择一个并希望其他人不会使用它?我们什么都不担心?

command-line

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

我如何错误地使用 CA2W?

请有人解释为什么这不起作用?

char *test = "test";
_TCHAR *szTest = CA2W(test);
Run Code Online (Sandbox Code Playgroud)

请告诉我我应该做什么。

它没有给我同等的文字,而是给了我:

????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

char tchar

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

如何使用Python在注册表中找到Visual Studio的路径?

我们有这个代码,但它不再起作用了:

def get_vcvarsall(generator):
 value = None
 type = None
 key_name = r'SOFTWARE\Microsoft\VisualStudio\SxS\VC7'
 key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, key_name)
 if generator.startswith('Visual Studio 8'):
  value,type = _winreg.QueryValueEx(key, '8.0')
 elif generator.startswith('Visual Studio 9'):
  value,type = _winreg.QueryValueEx(key, '9.0')
 elif generator.startswith('Visual Studio 10'):
  value,type = _winreg.QueryValueEx(key, '10.0')
 else:
  raise Exception('Cannot determin vcvarsall.bat location for: ' + generator)
 path = value + 'vcvarsall.bat'
 if not os.path.exists(path):
  raise Exception("'%s' not found.")
 return path
Run Code Online (Sandbox Code Playgroud)

这似乎已经停止工作,因为我从x86升级到Python 2.6 x64(但我不能确定).本来可以升级到导致问题的Win7.

registry visual-studio

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

我应该使用二进制文件还是文本文件来存储protobuf消息?

使用Google protobuf,我将序列化的消息数据保存到文件中 - 在每个文件中都有几条消息.我们有C++和Python版本的代码,所以我需要使用两种语言都可用的protobuf函数.我已经尝试使用SerializeToArray和SerializeAsString,似乎有以下不幸的条件:

  1. SerializeToArray:正如在一个答案中所建议的,使用它的最佳方法是为每条消息添加前缀数据大小.这对C++来说非常有用,但在Python中看起来不太可能 - 我错了吗?

  2. SerializeAsString:这会生成一个等效于它的二进制对应的序列化字符串 - 我可以将其保存到文件中,但是如果序列化结果中的一个字符是\n - 我们如何找到行结尾或消息的结尾会发生什么?那件事?

更新:

请允许我稍微改写一下.据我所知,我无法用C++编写二进制数据,因为我们的Python应用程序无法读取数据,因为它只能解析字符串序列化的消息.那么我应该SerializeAsString在C++和Python中使用吗?如果是,那么最好将这些数据存储在文本文件而不是二进制文件中吗?我的直觉是二元的,但你可以看到这看起来不是一个选择.

protocol-buffers

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

是否在调用终止时调用自动对象的析构函数?

当我们throw来自析构函数时会发生什么?我知道它会导致terminate()被调用,并且内存确实被释放并且析构函数被调用,但是,这是在调用之前还是之后 ?也许这里的问题是在堆栈展开时使用的问题.throwfoothrow

c++ stack throw brainbench

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