gpt4 book ai didi

Django 更新/删除 View 。处理用户权限

转载 作者:行者123 更新时间:2023-12-02 01:22:14 24 4
gpt4 key购买 nike

模型.py

class Punch(models.Model):
ro_number = models.IntegerField()
flag = models.FloatField(max_length=10)
actual = models.FloatField(max_length=10)
description = models.CharField(max_length=100, blank=True)
user = models.ForeignKey(User)
created_on = models.DateTimeField(auto_now_add=True)

def efficiency(self):
return '%.2f' % (float(self.flag)/float(self.actual)*100)

def __str__(self):
return str(self.ro_number)

网址.py

url(r'^flags/update/(?P<pk>[0-9]+)/$', views.PunchEdit.as_view(), name='update_flags'),

View .py

class PunchEdit(views.LoginRequiredMixin,
UpdateView,):
model = Punch
fields = ['ro_number', 'flag', 'actual', 'description']
template_name = 'free/home.html'

def get_success_url(self):
pass

我想弄清楚如何让用户只能编辑他们创建的打洞对象。每次创建 Punch 对象时,它都会保存哪个用户创建了带有外键关系的 punch。 (在未显示的 View 中完成)

现在,如果您输入类似 mywebsite.com/punch/update/(pk)/ 的内容,用户可以写入任何打洞对象的 pk 并更新其信息。

所以我的问题是.. 在使用基于类的通用更新/删除 View 时,您如何才能防止用户触摸他们并非自己创建的打洞对象。

最佳答案

您可以在 .dispatch() 中查看用户方法,或在 .process_request() 中中间件,或创建一个权限类以在您的 View 中扩展。我会用第一个选项写一个简短的例子:

class PunchEdit(...):

def dispatch(self, request, *args, **kwargs):
# check for user logged in
...
# check for user permission:
# Take pk from kwargs
pk = kwargs.get('pk') # example
# Take user from request
user = request.user
# check permission
try:
Punch.objects.get(pk=pk, user=user)
return super(PunchEdit, self).dispatch(request, *args, **kwargs)
except Punch.DoesNotExist, e:
return HttpResponseForbidden()

HttpResponseForbidden()

关于Django 更新/删除 View 。处理用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39333682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com