Python 避免Django用户编辑表单中的用户pk
我想创建一个Django表单来编辑用户信息。我有: url.pyPython 避免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
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那么,问题是什么?