- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 User Authentication 构建一个简单的应用程序.
我的应用有 3 个模型:
我还有一系列 View ,允许用户登录、创建和编辑位置/站点等。
我想知道的是,将模型实例的编辑限制为用户创建的实例的最佳做法是什么?例如。在没有修改的情况下,两个用户可以创建数据并且都可以编辑其他用户。我如何将其限制为自己编辑?
我知道长格式的方法是在每个模型上放置一个 ForeignKey(User)
以使用 queryset
限制 View ,但这看起来冗长且麻烦。我缺少 Django 技巧吗?也许是装饰师?
最佳做法是什么?
最佳答案
最简单的方法是编辑您的模型,使它们具有 owner
或 user
ForeignKey
字段给创作者。
class Locations(models.Model):
owner = ForeignKey(User)
...
在您看来:
def edit_location(request, location_id):
location = Locations.objects.get(pk=location_id)
if request.user is not location.owner:
# return a 401 or redirect to somewhere
else:
# do stuff
你可以使用 Django 的 ManyToManyField
如果每个选项 Location
和 User
可以有多个关系。例如:
class Locations(models.Model):
owners = models.ManyToManyField(User)
user = User.objects.create(username='Ian')
location = Locations.objects.create(...)
location.owners.add(user)
然后是 User
/Locations
两者都可用:
>>> location.owners.all()
[<User: Ian>]
>>> user.locations_set.all()
[<Locations: ...>]
设置在 User
上将自动创建并命名为 <Model Name>_set
.
然后您可以使用 in
运算符(operator)检查所有权:
def edit_location(request, location_id):
location = Locations.objects.get(pk=location_id)
if request.user in location.owners.all():
# return a 401 or redirect to somewhere
else:
# do stuff
关于python - 编辑模型实例时限制用户权限的最佳做法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32161516/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!