我正在开发一个大型Django应用程序,其中绝大多数需要登录才能访问.这意味着我们在整个应用程序中都洒了:
@login_required
def view(...):
Run Code Online (Sandbox Code Playgroud)
这很好,只要我们记得在任何地方添加它,它就会很好用!可悲的是,有时我们会忘记,而失败往往不是非常明显.如果一个视图的唯一链接在@login_required页面上,那么你不可能注意到你可以在没有登录的情况下实际到达该视图.但坏人可能会注意到,这是一个问题.
我的想法是扭转系统.而不是必须在任何地方键入@login_required,而是我有类似的东西:
@public
def public_view(...):
Run Code Online (Sandbox Code Playgroud)
只是为了公众的东西.我试图用一些中间件来实现它,我似乎无法让它工作.我想,我尝试的所有内容都与我们正在使用的其他中间件进行了很好的交互.接下来,我尝试编写一些东西来遍历URL模式,以检查那些不是@public的东西是否被标记为@login_required - 至少如果我们忘记了某些内容,我们会得到一个快速错误.但后来我无法弄清楚如何判断@login_required是否已应用于视图......
那么,正确的方法是什么?谢谢您的帮助!
我正在与PayPal的REST API集成,我需要测试错误条件.PayPal称之为"负面测试",此链接描述了它对"Classic API"的工作原理:
https://developer.paypal.com/docs/classic/lifecycle/sb_error-conditions/
我在他们的REST API中找不到任何关于它如何工作的信息.当然,他们不能指望我们在没有测试错误的情况下开发客户端代码,是吗?
谢谢您的帮助!
我糊涂了.考虑一下这段代码的工作方式:
>>> foo = u'Émilie and Juañ are turncoats.'
>>> bar = "foo is %s" % foo
>>> bar
u'foo is \xc3\x89milie and Jua\xc3\xb1 are turncoats.'
Run Code Online (Sandbox Code Playgroud)
而且这段代码完全没有按照我期望的方式工作:
>>> try:
... raise Exception(foo)
... except Exception as e:
... foo2 = e
...
>>> bar = "foo2 is %s" % foo2
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这里发生了什么吗?为什么unicode数据是在普通的unicode字符串中还是存储在Exception对象中?为什么这会解决它:
>>> bar = …Run Code Online (Sandbox Code Playgroud)