我想知道创建自定义权限的最佳方法,该权限检查用户是否在特定组中.以前,我有一个装饰器,我可以在视图上使用一组元组名称和用户对象传入,然后检查该用户是否在指定的组中.
即:
def in_group_views(*group_names):
"""Requires user membership in at least one of the groups passed in."""
def in_groups(u):
if u.is_authenticated():
if bool(u.groups.filter(name__in=group_names)) | u.is_superuser:
return True
return False
return user_passes_test(in_groups)
Run Code Online (Sandbox Code Playgroud)
我如何为视图集执行此操作,考虑到我需要检查不同操作的不同组成员身份(POST,PUT,GET)等.
非常感谢,本
我有一个问题,有多个应用程序试图在Django项目中覆盖相同的管理命令.
INSTALLED_APPS,或最后定义的应用程序?对于上下文,我试图得到django_pdb(参见github)更好地使用south和django.contrib.staticfiles.
我有一个测试,我正在检查一些身份验证行为.在此测试中,我需要显式检查CSRF行为,因此我使用的测试客户端enforce_csrf_checks设置为True:
self.csrf_client = Client(enforce_csrf_checks=True)
Run Code Online (Sandbox Code Playgroud)
我的问题是,对于我来说,最简单的方法是手动获取CSRF令牌,并通过POST请求发送给我的客户端?
是定义返回的自定义测试视图,csrf(request)向该视图发出请求,提取CSRF令牌然后在POST请求中使用它的最佳选择,还是有一些更简单的方法可以使用CSRF令牌?
我是否正确地假设只有"所有者"才能推出新版本,或者'维护者'也可以这样做?
Maintainer的角色列为"可以提交和更新特定包名称的信息".具体来说,维护者可以编辑哪些信息?
我在asyncio事件循环中运行了一些Python3代码.
我想使用它的功能os.chmod(...),但理想情况下会像这样的非阻塞版本,以便我可以使用await os.chmod(...),并避免进行阻塞系统调用.
我不相信有任何可用的库提供此功能,至少从我能看到的.
我如何os.chmod(...)从头开始实现非阻塞?更好的是,是否存在预先存在的解决方案?
我在Django中有一个简单的表单,看起来像这样:
class SearchForm(forms.Form):
text = forms.CharField()
from = forms.DateField()
until = forms.DateField()
Run Code Online (Sandbox Code Playgroud)
哪个因SyntaxError而失败,因为它from是一个Python关键字.
我宁愿不改变字段的名称; 它比任何替代方案都更合适,而且我对最终用户的看法非常挑剔.(表单使用'GET',因此字段名称在URL中可见.)
我意识到我可以使用某些东西,比如说from_,但我最初认为可能有某种方法可以明确地提供字段名称,对于这样的情况.(例如,通过name='whatever'在Field构造函数中提供参数.)它没有.
目前我正在使用动态表单生成来解决问题,这不是太糟糕,但它仍然是一个黑客...
class SearchForm(forms.Form):
text = forms.CharField()
from_ = forms.DateField()
until = forms.DateField()
def __init__(self, *args, **kwargs):
super(SearchForm, self).__init__(*args, **kwargs)
self.fields['from'] = self.fields['from_']
del self.fields['from_']
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来命名一个表单字段from,或任何其他Python关键字?
足够简单的例子 - 我有一些以查询集开头的Django代码......
queryset = MyModel.objects.all()
Run Code Online (Sandbox Code Playgroud)
稍后它会执行各种过滤,具体取决于一些可配置的选项......
if something:
queryset = self.queryset.filter(foo=some_foo)
if another_thing:
queryset = self.queryset.filter(bar=some_bar)
Run Code Online (Sandbox Code Playgroud)
最后它执行查找...
try:
obj = queryset.get()
except ObjectDoesNotExist:
raise ValidationError('Does not exist')
Run Code Online (Sandbox Code Playgroud)
现在,由于过滤需要灵活的方式发生,some_foo或者some_bar变量可能不是正确的类型(例如,我们最终会得到一个空字符串,试图过滤整数字段.)所以它是可能的为此代码最终提出一个TypeError或一个ValueError.
那很好,我可以适当地处理这个案子,但是我从ORM合同中不清楚的是,我应该在什么时候期望提出这些例外.
.filter()声明中出现吗?....get()声明上?......我一直在和South合作开发一个新的Django项目.
我刚刚添加了一个新模型Client,我想确保任何运行的测试或任何新的数据库设置总是填充一个实例Client,所以我添加了一个新的实例到项目的initial_data.json.
现在每当我运行测试或填充新数据库时,它看起来像是initial_data.json在第一次创建表之后加载两次.(失败并带有追溯).在迁移应用之后第二次.(成功就好了)
例如,running manage.py syncdb --migrate --noinput给我以下输出:
Syncing...
Creating tables ...
<snip>
Installing custom SQL ...
Installing indexes ...
Problem installing fixture 'initial_data.json': Traceback (most recent call last):
File ".../django/core/management/commands/loaddata.py", line 174, in handle
obj.save(using=using)
File ".../django/core/serializers/base.py", line 165, in save
models.Model.save_base(self.object, using=using, raw=True)
File ".../django/db/models/base.py", line 522, in save_base
manager.using(using).filter(pk=pk_val).exists())):
File ".../django/db/models/query.py", line 496, in exists
return self.query.has_results(using=self.db)
File ".../django/db/models/sql/query.py", line 424, in has_results
return bool(compiler.execute_sql(SINGLE)) …Run Code Online (Sandbox Code Playgroud) 通常当我使用Python时,我会发现自己编写的列表推导看起来像这样:
num_foobars = 10
foobars = [create_foobar() for idx in xrange(num_foobars)]
Run Code Online (Sandbox Code Playgroud)
显然这样做很好,但是当我实际上根本没有使用那些信息时,我仍然觉得创建一个范围并在其上迭代虚拟索引有点尴尬.
我并不以任何方式关注性能或类似的东西,它只是感觉不像Python通常那么优雅.
我想知道是否有任何好的惯用方法来避免列表理解语法的不必要的部分,也许使用类似的map东西itertools,给我看起来更像的代码......
num_foobars = 10
foobars = repeat(create_foobar, num_foobars)
Run Code Online (Sandbox Code Playgroud)