我试图限制使用2个用户级别的页面访问.超级用户和管理员.超级用户是指定了"is_superuser"的常规Django用户.管理员用户也是普通用户,仅分配了"is_staff"权限.
问题是当我为管理员用户使用这个装饰器时,它没有通过测试:
@permission_required('is_staff')
def my_view(....)
Run Code Online (Sandbox Code Playgroud)
@permission_required('is_staff')对匿名用户返回false.(正确)
@permission_required('is_superuser')仅对超级用户返回true(正确)
@permission_required('is_staff')对于分配了'is_staff'perm的用户返回FALSE.(错误).
有什么想法吗?
我有一个示例表格:
class AdminDiscountForm(ModelForm):
class Meta:
model = Discount
exclude = ('company',)
Run Code Online (Sandbox Code Playgroud)
它指向的模型是:
class Discount(models.Model):
class Meta:
verbose_name=_('Discount')
verbose_name_plural=_('Discounts')
unique_together = ('company','type')
company = models.ForeignKey(Company)
type = models.CharField(max_length=5, choices=DISCOUNT_CHOICES)
discount = models.DecimalField(max_digits=7, decimal_places=2, verbose_name=_('Discount'))
Run Code Online (Sandbox Code Playgroud)
该表单排除了"公司"字段,因为用户已使用UI选择了此字段.
我打算做一个:
company = blah
if form.is_valid():
obj = form.save(commit=False)
obj.company = company
obj.save()
Run Code Online (Sandbox Code Playgroud)
问题是'company'和'type'的组合应该是唯一的(因此'unique_together').这是在数据库中强制执行的,所以django并不关心.我需要扩展此表单的clean()方法以检查唯一性:
def clean(self):
cleaned_data = self.cleaned_data
# check for uniqueness of 'company' and 'type'
Run Code Online (Sandbox Code Playgroud)
这里的问题是'公司'不在那里,因为它被排除在外.在这种情况下,提出表单验证错误的最佳方法是什么?
- 编辑这仅用于添加折扣条目.没有初始实例.
我正在尝试使用 Django 和我客户端的 smtp 服务器发送电子邮件。该服务器仅支持 AUTH LOGIN 命令。
默认情况下(据我所知使用wireshark)django发送这个位:
250-AUTH=LOGIN CRAM-MD5 PLAIN
Run Code Online (Sandbox Code Playgroud)
作为电子邮件的一部分。
我已将其跟踪到 /usr/lib/python/smtplib.py:569 ,它在其中选择了身份验证方法(AUTH_LOGIN 有一个选项,这正是我想要的)。
据我所知,我无法在 settings.py (http://docs.djangoproject.com/en/dev/topics/email/) 中使用 vars 设置身份验证方法
有谁知道我如何告诉 Django 使用 auth_login 而不是 auth_cram_md5?