下面的代码允许用户更新他的公司资料,并且工作正常。我面临的问题是,要获取用户的CompanyProfile,我必须在网址中传递“ pk”变量,就像这样
<a class="btn btn-outline-success btn-lg" role="button" href="{% url 'user_profile_update' CompanyProfile.user_id %}"
style="font-family: 'slabo'">Edit</a>
url(r'^companyprofile_update_form/(?P<pk>\d+)/$', UpdateCompanyProfile.as_view(), name='user_profile_update'),
这是视图
class UpdateCompanyProfile(UpdateView):
model = CompanyProfile
form_class = CompanyProfileForm
# fields = ['contactNumber', 'address', 'areaCode', 'deliveryEmails', 'keywords']
template_name_suffix = '_update_form'
您可以想象,数据库中有许多用户拥有自己的CompanyProfiles。问题是用户可以更改URL中的pk变量,然后可以访问另一个用户的CompanyProfile,然后对该配置文件执行更新,这当然是未经授权的访问,我如何避免这种情况。
答案 0 :(得分:0)
您可以为此覆盖get_object()
方法:
from django.http import Http404
class UpdateCompanyProfile(UpdateView):
model = CompanyProfile
form_class = CompanyProfileForm
# fields = ['contactNumber', 'address', 'areaCode', 'deliveryEmails', 'keywords']
template_name_suffix = '_update_form'
def get_object(self, queryset=None):
company = super(UpdateCompanyProfile, self).get_object(queryset)
if company.user != self.request.user:
raise Http404("Company does not exist")
return company