0

我正在编写一个多用户应用程序,问题是如果我编辑产品我有 URL:

re_path(r'backend/produkter/edit/(?P<artikel_id>[0-9]+)/$', backend_views.edit_artikel_view),

结果:

http://127.0.0.1:8000/backend/produkter/edit/36/

现在另一个用户可以使用这个 URL,因为他已经过身份验证,而且对我来说它看起来不干净。是否可以从视图/网址:

http://127.0.0.1:8000/backend/produkter/

http://127.0.0.1:8000/backend/produkter/edit/

并以另一种方式将ID提供给editView?

4

2 回答 2

1

我认为按照您要求的格式做的一种方法是使用 Django Session。

流程将是这样的:

  1. 当您单击 Edit Product 时,向同一视图发出 post 请求,参数为“edit_product_id”,值为所选产品的 id

  2. 在同一视图函数中为 edit_product_id 设置会话变量,如下所示:

edit_product_id = request.POST.get('edit_product_id')
request.session['edit_product_id'] = edit_product_id

在此重定向到editView之后

  1. 在产品 editView 上,检索 edit_product_id 并使用它来更新数据库。
edit_product_id = request.session.get('edit_product_id')
于 2021-04-02T05:14:57.363 回答
0

如果这个产品不能被其他用户修改,那么这肯定会与登录用户有某种关系。

1.) 在这种情况下,你不需要 pk。相反,您可以从中获取视图本身中的用户信息request.user,现在您可以获取要为该用户编辑的产品。在这种情况下,您的网址将是

http://127.0.0.1:8000/backend/produkter/edit

2.) 第二种方法是检查登录用户并将其与产品用户进行比较,这可以通过 request.user 完成。像这样的东西:

if request.user.id == product.user.id:

考虑到您在用户和产品之间存在这种关系。

于 2021-04-02T05:05:23.553 回答