我的Django模板中的权限有一个小问题.
我正在尝试根据权限在菜单栏中为我的项目显示一个图标.我想拥有它,以便如果用户有权向项目添加新的后续操作,他们可以看到图标,如果他们没有该权限,则不显示该链接.
我的权限语法是follow.add_followup,我从打印中得到的user.get_all_permissions().
我在我的模板中尝试过这段代码:
...
{% if user.has_perm('followup.add_followup') %}
<li><a href="{% url followup-new p.id %}">Log</a></li>
{% endif %}
...
Run Code Online (Sandbox Code Playgroud)
但是当我显示模板时,我遇到了这个错误:
/ project/232/view /中的TemplateSyntaxError
无法解析剩余部分:来自'user.has_perm(followup.add_followup)'的'(followup.add_followup)'
有什么想法吗?这让我很头疼!:)
python django django-templates django-views django-permissions
我已经构建了一个应用程序,我想将它从我的开发服务器移动到我的生产服务器。在这个应用程序中,我定义了 3 个自定义组auth.group,每个组都有特定的权限。
我试图从 auth.group 转储数据 - 它似乎也包括权限 ID。问题是,这些 ID 在我的开发环境和生产环境之间不匹配。似乎还有一个content_type_idin auth.permission 我不知道它是如何关联的。
我的问题是,有没有办法使用dumpdata或其他方式为我的应用程序迁移组和所有相关权限?我在生产服务器上导入多个装置没有问题,但我确实希望设置所有组,而不必通过 UI 并为每个组选择适当的权限。
我创建了一个自定义用户并添加is_driver了检查我的用户是否属于的权限Driver's Group.
class CustomUser(AbstractUser):
mobile = models.CharField(max_length=16)
address = models.CharField(max_length=100)
class Meta:
permissions = (
("is_driver", "Can access driver's page")
)
Run Code Online (Sandbox Code Playgroud)
但是,当我跑manage.py makemigrations,然后manage.py migrate,它会抛出一个错误:ValueError: too many values to unpack.我是权限的新手,也许还有其他一些方法来添加权限Group.怎么了?
我有一个模型叫做Logs:
class Logs(models.Model):
entry = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
一些用户可以管理日志,其他用户可以编辑,其余用户只能查看。您将如何在Django中处理此类权限?
我当时想添加一个新many-to-many字段,一个用于管理员,另一个用于编辑,然后在保存功能中检查哪个用户属于哪个组。
但是,这似乎是静态且不好的,我可以以某种方式使用Django的内置权限吗?还有哪些其他解决方案,软件包,解决此问题的最佳方法是什么?
我已经看到您可以在Django中创建自定义权限,即
permission = Permission.objects.create(codename='can_publish',
name='Can Publish Logs',
content_type=content_type)
Run Code Online (Sandbox Code Playgroud)
但是Logs我将如何检查权限,这将在Save()方法中完成。
我有一个问题,即在视图中甚至在shell中删除用户的权限.让我解释一下我的问题:
我在shell中做了那些测试:
org = Organisateur.objects.get(user__username__contains="ghj")
content_type = ContentType.objects.get_for_model(Tournoi)
Run Code Online (Sandbox Code Playgroud)
Tournoi是模型的名称
permission_ecriture = 'ecriture_Palaiseau'
permission = Permission.objects.get(content_type=content_type, codename=permission_ecriture)
org.user.user_permissions.remove(permission)`
Run Code Online (Sandbox Code Playgroud)
但是当我写道:
org.user.has_perm('inscription.ecriture_Palaiseau')`
Run Code Online (Sandbox Code Playgroud)
它返回True
但是当我重写时:
org = Organisateur.objects.get(user__username__contains="ghj")
org.user.has_perm('inscription.ecriture_Palaiseau')`
Run Code Online (Sandbox Code Playgroud)
它返回False
这真的很奇怪.它为什么会这样?
在我的观点中,即使我写了,似乎也没有删除权限:
org = Organisateur.objects.get(user__username__contains="ghj")
Run Code Online (Sandbox Code Playgroud)
(删除权限后,用户仍然拥有它)
我想要做的是删除用户的权限,并在之后立即向同一用户添加另一个权限.但每次我这样做,用户仍然有"删除权限"......
非常感谢你
我期待很快收到你们的回复.
是否可以设置Django Admin页面以显示哪个用户在哪个组中?是否可以使用Django Admin页面将用户添加到组中?如果有,怎么样?
现在,我正在以编程方式添加客户customers group和卖家sellers group,但我在管理中看不到任何信息.
这是我的注册view:
def register_customer(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
customer_registration_form = forms.CustomerRegistrationForm(request.POST)
if form.is_valid() and customer_registration_form.is_valid():
new_user = form.save()
new_customer_profile = UserCustomerProfile(user=new_user)
new_customer_profile.save()
customers_group = Group.objects.get(name='Customers')
new_user.groups.add(customers_group)
return render(request, 'registration/complete.html')
else:
#handle errors
customer_registration_form = forms.CustomerRegistrationForm()
form = UserCreationForm()
return render(request, "registration/register.html",
{'form': form, 'customer_registration_form': customer_registration_form})
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个 API,并且正在尝试向我的 API 应用程序中的视图提供权限。我已将用户分配到管理门户中具有权限的组,然后在视图中使用DjangoModelPermissions,以便权限根据不起作用的管理门户运行。当我使用IsAdminUser时,它的工作方式是阻止其他用户读取视图。但对于DjangoModelPermissions来说它不起作用。
简单来说,我想阻止少数用户访问视图,即使在分配权限并在权限玻璃中传递此值DjangoModelPermissions后,用户仍然能够访问该视图。
我的管理组中的用户和组分配给具有所有权限的开发人员组的一名超级用户。分配给语言组的一名测试用户只能访问语言视图。
型号代码
```Python
from django.db import models
class Paradigm(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
# Create your models here.
class Language(models.Model):
name = models.CharField(max_length=50)
paradigm = models.ForeignKey(Paradigm,on_delete=models.CASCADE)
# this method will help us to get the actual Name insted of object name
def __str__(self):
return self.name
class Programmer(models.Model):
name = models.CharField(max_length=50)
languages = models.ManyToManyField(Language)
def __str__(self):
return self.name …Run Code Online (Sandbox Code Playgroud) 如何更改默认的DRF-权限被拒绝的消息来自{"detail":"You do not have permission to perform this action."}于这样的事情,
{"status": False, "message": "You do not have permission to perform this action."}
我发现这个苏答案,但它无助于改变Key的message
模型.py
class Meta:
permissions = (
("can_add_data","can add a new data"),
)
Run Code Online (Sandbox Code Playgroud)
这是我在 Models.py 中创建的自定义权限,我也创建了这些用户。
Django Admin 中的用户,即 http://localhost:8000/admin
如何向特定用户授予权限,以便我可以@permission_required('myapp.can_add_data') 在 views.py 中使用以及在哪里编写代码段?(在哪个文件中)
我是初学者,所以如果有任何错误,请告诉我。
我正在使用 Django Rest Framework 编写应用程序。
我创建了一个自定义权限。我为message自定义权限提供了一个属性,但仍然返回默认详细信息。
让我给你我的代码。
permissions.py:
from annoying.functions import get_object_or_None
from rest_framework import permissions
from intquestions.models import IntQuestion
from ..models import Candidate, CandidatePickedIntChoice
CANDIDATE_ALREADY_ANSWERED = "This candidate already answered all questions."
class CandidateAnsweredQuestionsPermission(permissions.BasePermission):
"""
Permission to check if the candidate has answered all questions.
Expects candidate's email or UUID in the request's body.
"""
message = CANDIDATE_ALREADY_ANSWERED
def has_permission(self, request, view):
candidate = None
email = request.data.get("email", None)
if email:
candidate = get_object_or_None(Candidate, email=email)
else: …Run Code Online (Sandbox Code Playgroud) django permissions django-permissions django-rest-framework django-2.1
django ×10
python ×5
permissions ×2
django-2.1 ×1
django-admin ×1
django-views ×1
migration ×1
python-3.x ×1