相关疑难解决方法(0)

在Django测试中设置HTTP_REFERER标头

我正在开发一个Django Web应用程序,其中(除其他外)需要处理使用POST请求发送的事务状态信息.

除了支付网关支持的HTTP安全性之外,我的视图还会检查request.META['HTTP_REFERER']条目settings.py以防止有趣的业务:

if request.META.get('HTTP_REFERER', '') != settings.PAYMENT_URL and not settings.DEBUG:
    return HttpResponseForbidden('Incorrect source URL for updating payment status')
Run Code Online (Sandbox Code Playgroud)

现在我想弄清楚如何测试这种行为.

我可以很容易地产生故障; HTTP_REFERER是(可预测)None正常的页面加载:

def test_transaction_status_succeeds(self):
    response = self.client.post(reverse('transaction_status'), { ... })
    self.assertEqual(response.status_code, 403)
Run Code Online (Sandbox Code Playgroud)

但是,如何假冒成功提交?我已经尝试过HTTP_REFERER进入extra,例如 self.client.post(..., extra={'HTTP_REFERER': 'http://foo/bar'}),但这不起作用; 该视图显然仍然看到一个空白标题.

测试客户端是否支持自定义标头?如果没有解决方法吗?我正在使用Django 1.1,如果可能的话,我宁愿不升级.

django http-referer django-testing

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

Python的`*`和`**`说明符有名字吗?

可能重复:
python*运算符的专有名称?

*拆包当清楚地使用的参数的任意数量

**在将关键字参数解压缩为字典时使用.

这是传统的使用*args**kwargs,我倾向于这些发音为"ARGS"和"quargs",忽略了*秒.

这个问题中,星号被称为指针.

BDFL如何引用这些符号?


关闭后.

感谢您找到相关问题,这就是我所寻求的.准确地搜索(甚至非常特定的)网络真的很棘手*!

对那些回答他们如何发音"*"的评论员来说,这不是我问的问题(如果我的问题误导了你,我会道歉).我想知道的是这些说明符是如何在Python中命名,这不是一个主观问题(因此引用了BDFL).

python naming args kwargs

9
推荐指数
0
解决办法
435
查看次数

相当于 Python 中 R 的 `do.call`

do.callpython中是否有相当于R的?

do.call(what = 'sum', args = list(1:10)) #[1] 55
do.call(what = 'mean', args = list(1:10)) #[1] 5.5

?do.call
# Description
# do.call constructs and executes a function call from a name or a function and a list of arguments to be passed to it.
Run Code Online (Sandbox Code Playgroud)

python r python-2.7

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

访问所有组合的最佳方式是什么

作为测试人员的工作,我的一个顾虑是始终确保完整的测试覆盖率.这可能会变得困难,因为有时可能的组合数量确实很多.让我们举一个例子.一个很好的制作茶的例子

  • 要泡茶,你可以使用红茶,绿茶或白茶.(3个变量)

  • 你可以使用牛奶或水(2个变量)

  • 你可以使用糖或蜂蜜或没有(3个变量)

  • 你可以让它冰或热(2个变量)

正如你所看到的,现在如果我想测试所有可能的制茶方法(假设有一个允许创造各种茶的假设软件),那么我必须测试:3x2x3x2组合= 36,因为确实36种独特的制茶方式

在这种情况下哪种算法最好.我可以看到嵌套的for循环是最好的.我对吗?

language-agnostic algorithm combinations for-loop

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

除了乘法和取幂之外,星号在Python中的作用是什么?

在Peter Norvig用Python编写的Lisp解释器(http://norvig.com/lispy.html)中,他将Lisp定义eval如下:

def eval(x, env=global_env):
    "Evaluate an expression in an environment."
    if isa(x, Symbol):             # variable reference
        return env.find(x)[x]
    elif not isa(x, list):         # constant literal
        return x                
    elif x[0] == 'quote':          # (quote exp)
        (_, exp) = x
        return exp
    elif x[0] == 'if':             # (if test conseq alt)
        (_, test, conseq, alt) = x
        return eval((conseq if eval(test, env) else alt), env)
    elif x[0] == 'set!':           # (set! var exp)
        (_, var, exp) = …
Run Code Online (Sandbox Code Playgroud)

lisp python eval

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

这个功能有什么作用?(Python迭代器)

def partition(n, iterable):
   p = izip_longest(*([iter(iterable)] * n))
   r = []
   for x in p:
       print(x) #I added this
       s = set(x)
       s.discard(None)
       r.append(list(s))
   return r
Run Code Online (Sandbox Code Playgroud)

这实际上是在SO上的一个职位发布,并且是一个新手我觉得它很有趣.所以你得到如下输出:

partition(5, L)
(1, 2, 3, 4, None)
Out[86]: [[1, 2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)

对我来说,这已经令人困惑,因为我认为izip_longest(*([iter(iterable)] * n))izip_longest在n个相同迭代器的列表上运行该函数,所以我首先要预期输出(1,1,1,1,1)然后输出(2,2,2,2,2)等等.

这个问题的简短版本就是这一行:

 p = izip_longest(*([iter(iterable)] * n))
Run Code Online (Sandbox Code Playgroud)

解析它我会想[iter(iterable)]*n创建一个长度为n的相同iterables的列表,它们都指向同一个东西 - 这就是它在命令行上的作用,但这似乎不是它的作用这里基于上面印刷的输出.

另外我认为开头的*...longest(*...是因为列表的长度未知,但我认为这完全没有意义.*函数调用中的第一个符号是什么?似乎它不是简单地指出一个未知长度的参数列表......

所以在一天结束的时候,我完全迷失了.有人可以告诉我这个语法吗?

非常感谢任何输入!


感谢所有有用的答案,每个人.我不确定我是否正在寻找答案或问题,但在我看来,这个列表理解将对列表和元组做同样的事情(我意识到迭代器也适用于字典,自定义类,其他东西.. .)

[L[i*n:(i+1)*n] for i in range(int(ceil(len(L)/float(n)))) ]
Run Code Online (Sandbox Code Playgroud)

python iterator

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

numpy中'*'的含义是什么?

>>> shape=(2,2)
>>> np.random.randn(*shape)
array([[-1.64633649, -0.03132273],
   [-0.92331459,  1.05325462]])
Run Code Online (Sandbox Code Playgroud)

我在numpy的文档中找不到它.任何帮助表示赞赏.

python numpy

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

add_header期望3个参数而不仅仅是键/值

我遇到此错误消息:

TypeError: add_header() takes exactly 3 arguments (2 given)

使用这些参数时:

testService("SomeServiceName", "POST", "[redacted valid url]", ('Content-type','application/json'), [redacted valid json])

通常这个错误意味着我没有将"self"作为参数传递,但是看到这个方法没有在类中调用,我不知道该怎么做.我已经尝试将self in作为参数传递给参数和方法内部.我已经尝试将标题括在括号和括号中.当我传递"self"时,我收到self未定义的错误消息,当我使用括号而不是括号时,我得到与上面相同的错误.

有魔术Python调试技巧的人吗?非常感谢您抽出宝贵的时间来检查这个!

def testService(name, verb, url, header="", requestBody=""):

#Log out the name of the request we're testing
if (name is not None) or (name.strip() is not ""):
    print "Checking  " + name + "\n\n"

    # Make URL with StoreNumber
    if (url is not None) or (url is not ""):
        testUrl = url

        # If specified verb is GET …
Run Code Online (Sandbox Code Playgroud)

python urllib2 request-headers

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

将元组列表格式化为小数并将其添加到文件中

我有一个元组列表作为坐标(必须这样)

points = [(x1, y1), (x2, y2), ...]
Run Code Online (Sandbox Code Playgroud)

在matplotlib中绘制一个多边形.为了获得这些坐标,我首先创建了一个空列表points = [],然后编写了一个函数来计算中心坐标,边数,边长和旋转角度的每个点.在函数之后,我编写了一个代码,用于从用户输入中读取上述初始值并检查其有效性,然后在检查成功时调用该函数.

现在我想将坐标和点数存储在文件中,如下所示:

点数
x1,y1
x2,y2
...
xn,yn

其中每个坐标写入3个小数位.因此,我需要将我的元组格式化为3位小数,然后将它们转换为字符串,然后将它们写入文件中,我希望它以最短的方式.

我以为我会做类似的事情lines = [float("{:.3f}".format(j)) for j in points](因为我有元组,因此无效)

lines.insert(0, len(points))
with open('points.txt', 'w') as f:
f.writelines("%s\n" % l for l in lines)
Run Code Online (Sandbox Code Playgroud)

上面的解决方案对我来说似乎很好,但是我找不到为元组做第一行(格式化为小数)的方法,所以我想知道如何将元组列表格式化为小数以将它们存储在一个元组中列表用于以下使用writelines和转换为字符串?或者,如果有更短更好的方法,我会感激任何提示.谢谢!

python tuples string-formatting python-3.x

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

带有未知参数的Python包装函数

如果我有这个功能:

def foo(arg_one, arg_two):
    pass
Run Code Online (Sandbox Code Playgroud)

我可以像这样包装它:

def bar(arg_one, arg_two):
    return foo(arg_one, arg_two)

foo = bar
Run Code Online (Sandbox Code Playgroud)

是否有可能在不知道foo必需参数的情况下这样做,如果是这样,怎么做?

python arguments function

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