好吧,我认为这应该不是一个大问题.但是,由于我花了一天多的时间,我认为现在是时候寻求帮助了.
我有一个简单的django管理项目,它现在工作正常.问题是我想要实现的功能只允许用户使用特定的谷歌应用程序域登录我的管理站点,例如@ example.com.然后用户不必手动创建帐户,我很容易管理用户.
我相信这是许多网站所要求的共同特征.所以我做了一些搜索,我发现一些帖子介绍了一些有趣的库.
这里的帖子很有帮助:
哪个openid/oauth库将django项目连接到Google Apps帐户?
最后一个我觉得应该对我有用,但事实并非如此.
我在github上安装了adieu的python-openid补丁:https://github.com/adieu/python-openid 并且它仍然给出了同样的错误:'OpenID身份验证失败:来自身份URL主机的HTTP响应状态不是200.获得状态404'
经过一些挖掘,我无法弄清楚解决方案.
然后我开始寻找"Google帐户身份验证和授权",看看我是否可以自己构建整个事情.
现在,我的问题,我应该继续坚持现有的django库,还是应该从头开始做一些事情.
因此,理想的解决方案是在python-openid上解决错误的一些提示或为下一步行动提供指导(新库或Google帐户身份验证和授权)
提前致谢!
我正在为基于 Django 类的视图编写单元测试。
class ExampleView(ListView):
def get_context_data(self, **kwargs):
context = super(EampleView, self).get_context_data(**kwargs)
## do something else
def get_queryset(self, **kwargs):
return self.get_data()
def get_data(self):
call_external_API()
## do something else
Run Code Online (Sandbox Code Playgroud)
关键问题是call_external_API()在get_data().
当我在编写单元测试时,我真的不想调用外部 API 来获取数据。首先,这会花我的钱;其次,我可以在另一个测试文件中轻松测试该 API。
我还可以get_data()通过仅对其进行单元测试并模拟call_external_API().
但是,当我测试整个基于类的视图时,我会这样做
self.client.get('/example/url/')
Run Code Online (Sandbox Code Playgroud)
并检查状态代码和上下文数据以进行验证。
在这种情况下,call_external_API()当我测试整个基于类的视图时,我该如何模拟?
我试图在linux下用Python打开一个原始套接字.
我的简单代码:
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST, 5454))
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
[ERROR] Protocol not supported
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我在linux 12.04下使用python 2.7.3,我用root来运行代码.
有人有线索吗?
更新:我的灵魂,dstromberg给出的解决方案是正确的.如果您想要所有数据包,请使用他的解决方案.但是,还有另一种组合,
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
Run Code Online (Sandbox Code Playgroud)
也有效.
在这种情况下,您将收到所有带有IP和TCP标头的TCP数据包.如果您使用dstromberg的解决方案,您还将看到以太网标头.所以它取决于你想要你的数据包的'原始'~~
有没有人知道如何摆脱Django urlfield中的'http://'前缀.
我的意思是当我们将一个字段定义为urlfield并尝试输入一个url时,如果没有提供架构,django将自动添加'http://'前缀.我不想要那个前缀.
我尝试在clean_field和clean方法下删除它.它不起作用.
我深入研究了源代码.我看到django在UrlField类的'to_python'方法中添加'http://'.
有没有办法覆盖它以摆脱'http://'?
我知道如何在Python中四舍五入,这不是一个简单的技术问题。
我的问题是,从技术上讲,四舍五入将使一组百分比之和不等于100%。
例如:
a = 1
b = 14
Run Code Online (Sandbox Code Playgroud)
我想计算(a + b)中a和(a + b)中b的百分比。
答案应该是
a/(a + b) = 1/15
b/(a + b) = 14/15
Run Code Online (Sandbox Code Playgroud)
当我尝试四舍五入这些数字时,我得到了
1/15 = 6.66
14/15 = 93.33
Run Code Online (Sandbox Code Playgroud)
(我正在做地板),这使得这两个数字之和不等于100%。
在这种情况下,我们应该将1/15的上限设置为6.67,将14/15的上限设置为93.33。现在,它们加起来达到100%。在这种情况下,规则应为“四舍五入到最接近的数字”
但是,如果情况更复杂,请说3个数字:
a = 1
b = 7
c = 7
Run Code Online (Sandbox Code Playgroud)
地板:
1/15 = 6.66
7/15 = 46.66
7/15 = 46.66
Run Code Online (Sandbox Code Playgroud)
总计不等于100%。
天花板:
1/15 = 6.67
7/15 = 46.67
7/15 = 46.67
Run Code Online (Sandbox Code Playgroud)
总计不等于100%。
四舍五入(至最接近的数字)与上限相同。仍不等于100%。
所以我的问题是,在任何情况下我该怎么做以确保它们的总和为100%。
提前致谢。
更新:感谢您的评论提示。我从重复的帖子答案中获取了“最大余数”解决方案。
代码是:
def round_to_100_percent(number_set, digit_after_decimal=2):
"""
This function take a list …Run Code Online (Sandbox Code Playgroud) 通过阅读doc:https://docs.djangoproject.com/en/dev/topics/db/transactions/#django.db.transaction.atomic
我知道
atomic blocks can be nested. In this case, when an inner block completes successfully, its effects can still be rolled back if an exception is raised in the outer block at a later point.
Run Code Online (Sandbox Code Playgroud)
但是,我的问题是对于如下代码结构:
@transaction.atomic
def A():
## something
B()
C()
## something
@transaction.atomic
def B():
## something
@transaction.atomic
def C():
## something
Run Code Online (Sandbox Code Playgroud)
如果B和C都成功了,并且A在他们之后出错了,那么B和C会回来,对吗?
如果B成功,但C搞砸了,B会回滚吗?
关于维护此回滚功能的内存使用情况,上面的那个和后面的一个有什么区别:
@transaction.atomic
def A():
B()
C()
def B():
## something
def C():
## something
Run Code Online (Sandbox Code Playgroud)
我知道这两种结构处理不同的情况.我只是问,假设它们都成功(完全),内存使用水平有什么不同?
提前致谢.
我有一个使用tastypie的Django项目.当我尝试从auth_user中删除一行时,如下所示:
user.delete()
Run Code Online (Sandbox Code Playgroud)
它会引发错误
DatabaseError: (1146, "Table 'develop.tastypie_apikey' doesn't exist")
Run Code Online (Sandbox Code Playgroud)
我搜索了一会儿,并且知道当你创建一个新行时会发生这种情况,但我想删除.
有人知道此时可能出现的问题吗?
非常感谢!
好吧,我正在尝试用我的django项目实现谷歌oauth身份验证.
我按照这里的指南:
https://developers.google.com/accounts/docs/OAuth2Login?hl=de-DE
我得到了交换代码的响应.我有一个字符串类型json,其中包含access_token,id_token等多个信息.
Id_token是以base 64编码的加密签名的JSON对象.我尝试使用python模块base64解码id_token,但失败了.
我也试过PyJWT,失败了.
有没有办法解码和验证它?
django ×6
python ×4
google-oauth ×1
linux ×1
mocking ×1
rounding ×1
sockets ×1
tastypie ×1
unit-testing ×1
url ×1