我是一名 Python 初学者(顺便说一句,也是英语初学者)。 我刚刚在 Python/Django 中创建了一个简单的表单,用于创建、编辑和删除项目。 我有指向我的 URL 的 HTML 链接,例如:
文件.HTML:
<INPUT Type="BUTTON" VALUE="Edit" ONCLICK="window.location.href='/edit/{{ object.id }}/'">
URLS.PY:
url(r'^edit/(?P<id>\d+)/$', 'app.views.editobj'),
View .PY:
def editobj(request, id):
但是,当然,有一个问题,我不希望人们直接输入 URL(仅当单击按钮时),因为有人可以直接输入 URL:/removeobj/1 并删除对象 ID=1。我想做的是创建不同的 URL,也许是随机的,这样用户永远不会猜测按钮将打开的 URL 是什么,当然,它确实可以与 ID 参数一起使用,所以当它要编辑/删除,打开正确的对象。 我希望我清楚自己的需求。谢谢。
最佳答案
生成随机 URL 的效率非常低,更不用说实现起来也非常困难。执行您所要求的操作的常见方法是 POST 到 URL。我认为您应该多阅读一些关于 Django POSTing 的内容,因为它将帮助您更好地理解它的作用。无论如何,这里是一个使用它的示例:
url.py
url(r'^delete/$', 'app.views.delete_object', name="delete_obj"),
View .py
def delete_object(request):
""" Get the ID of an object via POST, then delete it. """
if request.method == 'POST' # This makes sure the request is a POST
obj_id = request.POST['obj_id']
obj = MODELNAME.objects.get(id=obj_id) # Use your model name here
# You can use if conditions here to make sure the object you just
# retrieved is allowed to be deleted by this user, or in general.
obj.delete()
messages.success(request, 'Object successfully deleted!')
return redirect(reverse('index')) # Make sure you use a name that exists
.html
<form method="POST" action="{% url 'delete_obj' %}">
{% CSRF_TOKEN %}
<input type="hidden" value="{{ obj.id }}" name="obj_id" />
<button type="submit">Submit</submit>
</form>
您可以在views.py中使用更多逻辑来确保允许删除该对象,但在大多数情况下,我编写的代码应该让您对创建POST的方式有一定的了解 -> 删除对象工作流程。欢迎在我的答案下面的评论部分提问。
关于python - Python/Django 中的个性化/随机 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29546621/