Python 避免Django用户编辑表单中的用户pk

Python 避免Django用户编辑表单中的用户pk,python,django,Python,Django,我想创建一个Django表单来编辑用户信息。我有: url.py url(r'^settings/(?P<pk>[0-9]+)/', views.edit_profile, name='edit'), @login_required def edit_profile(request, pk): user = get_object_or_404(User, pk=pk) if request.method == 'POST': form = UserF

我想创建一个Django表单来编辑用户信息。我有:

url.py

url(r'^settings/(?P<pk>[0-9]+)/', views.edit_profile, name='edit'),
@login_required
def edit_profile(request, pk):
    user = get_object_or_404(User, pk=pk)
    if request.method == 'POST':
        form = UserForm(request.POST, instance=user)

        if form.is_valid():
            form.save()
    else:
        form = UserForm(instance=user)
    return render(request, 'edit_user.html', {'form': form})
这样,当用户编辑其信息时,可以从url更改pk并查看其他用户的信息。如何在url中隐藏此pk


谢谢。

您可以创建一个自定义模板过滤器,用于检查用户是否正在编辑自己的配置文件

创建自定义标记:

首先发送名为
pk
的上下文,该上下文等于配置文件pk,然后

在app目录中创建一个名为
templatetags
的目录,并在其中添加一个名为
\uuuuuu init\uuuuuuuuuuuuupy.py的python文件
-两个分数以下-现在创建另一个名为
profile\u extras.py的文件
键入以下内容:

from django.template.loader_tags import register
@register.filter(name="ownPro")
def ownPro(user, id):
    if Profile.objects.get(id=id).user == user:
        return True
    else:
        return False
现在,在编辑配置文件模板中添加以下内容

{% load profile_extras %}

{% if user|ownPro:pk %}

....
allow to edit

{% else %}
    <p>you are not allowed </p>
{% endif %}
{%load profile\u extras%}
{%if用户| ownPro:pk%}
....
允许编辑
{%else%}
你是不允许的

{%endif%}
别忘了重新启动服务器


根本不需要接受URL中的pk。登录的用户始终作为
request.user
可用,因此您可以将其作为实例参数直接传递给表单

if request.method == 'POST':
    form = UserForm(request.POST, instance=request.user)

    if form.is_valid():
        form.save()
else:
    form = UserForm(instance=request.user)
return render(request, 'edit_user.html', {'form': form})
更新你的网址

url(r“^settings/”,views.edit_profile,name='edit')


尝试将POST请求发送到该url,但没有人看到您向服务器发送的内容。

是的,我知道该请求。用户始终是登录名user@P.Rodoreda那么,问题是什么?