我正在使用django-oneall来允许我的网站上的社交登录会话身份验证.虽然它不是django-rest-framework的建议auth提供程序之一,但 rest_framework.authentication.SessionAuthentication使用django的默认会话身份验证.所以我认为整合应该相当简单.
在权限方面,最终我将使用IsAdmin,但出于开发目的,我只是将它设置为IsAuthenticated.当返回403s时,我放宽了权限AllowAny,但仍然没有骰子.这是我的休息框架配置:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
# 'rest_framework.permissions.IsAuthenticated',
# 'rest_framework.permissions.IsAdminUser',
),
'PAGE_SIZE': 100,
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
),
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我根据下面的答案得到了这个工作.事实证明,rest_framework期望csrftokencookie和aa X-CSRFToken具有相同的值,我设置我的前端代码为所有ajax请求发送该标头,一切正常.
我在 SO/elsewhere 上看到了一堆类似的问题,但没有一个答案能完全满足我的需求,所以我不认为这是一个重复的问题。
此外,我完全知道如何自己实现这一点,但我试图不必重新发明轮子。
有谁知道任何 python 包可以执行 levenshtein/其他编辑距离比较 2 个单词列表(我找到了一些),但也允许指定你自己的插入、删除、替换和换位成本?
基本上,我希望计算的距离是句子中单词的编辑次数,而不是句子不同的字符数。
我正在尝试使用 python2 的 C api 替换实际用 C 编写的自定义 python 扩展模块。我可以用纯 python 或 cython 重写,但我宁愿简单地向项目添加一个依赖项。唯一的问题是这段代码允许你为各种选项指定你自己的成本,到目前为止我还没有找到一个允许这样做的包。
我正在尝试编写一些只有用户可以移植的C代码gcc,并且已glib安装.
从我的所有研究中,我发现gcca,a wchar_t总是定义为4个字节,gliba gunichar也是4个字节.
我没想到的是,如果像a gunichar,a wchar_t也被编码为UCS4.是这样的吗?如果是这样,我应该能够简单地转换gunichar*为a wchar_t*并使用这些stdc wcs*函数,对吗?
我有两个通过pika连接到Rabbitmq的python进程。每个主题消耗一组主题,另一个主题作为响应发布。一种使用SelectConnection,另一种使用TornadoConnection。
目前,这两个都是测试程序,它们模拟用户与服务器之间的对话,并且每个程序的on_message()都经过简单的硬编码,以分支到接收到的routing_key上,并发布相应的响应。
最初,经过一段随机的时间(通常不超过2分钟),我会收到类似以下的错误消息:
UnexpectedFrame: Basic.publish: (505) UNEXPECTED_FRAME - expected content header for class 60, got non content header frame instead
Run Code Online (Sandbox Code Playgroud)
在搜索了有关堆栈溢出和其他地方的大量文章之后,我逐渐了解到此错误与竞态条件有关,竞态条件是在basic_publish完成之前消耗了一些东西。
我对代码进行了更改,因此,我不进行立即的basic_publish()而是将回调传递给connection.add_timeout(),延迟为1秒。进行此更改后,我可以进行大量运行,其中两个进程之间相互进行“对话”的时间大于1小时,而不会重现错误。
我的问题是,这仅仅是因为我在模拟一个用户而起作用?我需要两个消费和发布渠道吗?
def on_message(self, unused_channel, basic_deliver, properties, body):
if self._sibling_app_id == properties.app_id:
self.dispatch_message(basic_deliver, properties, body)
def dispatch_message(self, basic_deliver, properties, body):
(user_id, msg_type) = basic_deliver.routing_key.rsplit('.', 1)
if "login-response" == msg_type:
print body
elif "gid-assignment" == msg_type:
print body
elif "tutor-logout" == msg_type:
print body
elif "tutor-turn" == msg_type:
message = "i don't know"
routing_key = "%s.input" % user_id
callback = …Run Code Online (Sandbox Code Playgroud) 我正在开发包并将包的开发/测试/等版本上传到本地 devpi 服务器。
为了防止意外上传到PyPi,我采用了以下常见做法:
setup(...,
classifiers=[
"Programming Language :: Python",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Private :: Do not Upload"
],
...)
Run Code Online (Sandbox Code Playgroud)
效果很好,但是当我最终准备好将包上传到 PyPi 时呢?
我想出了一个完全丑陋但简单的技巧,它要求我将分类器定义为 setup() 调用之外的全局变量,如下所示:
CLASSIFIERS = [
"Programming Language :: Python",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7"
]
if "--public" not in sys.argv:
CLASSIFIERS.append("Private :: Do Not Upload")
else:
sys.argv.remove("--public")
setup(...
classifiers=CLASSIFIERS,
...)
Run Code Online (Sandbox Code Playgroud)
另一个也许更简单的选择是仅仅注释掉“私人::请勿上传”,但这似乎并不比我的黑客更专业。
我想做的是创建一个名为的上传命令的适当子类SafeUpload,并让它检查--publiccmd-line 选项。也许,由于在上传之前可能存在构建,因此SafeBuild …
python ×3
c ×1
devpi ×1
django ×1
glib ×1
permissions ×1
pika ×1
pypi ×1
python-2.7 ×1
rabbitmq ×1
setuptools ×1
unicode ×1
wchar-t ×1