如果没有执行登录,我试图制作有限的用户编辑页面。
登录后,将打开编辑页面,其中包含网址中的任何user_id。
虽然只有user_id已登录用户才能打开编辑页面。
例如,我使用user_id = 7登录,因此只有一个下一个网址(http://127.0.0.1:8000/user/7/edit)必须有权访问编辑页面。
此编辑页面也可供任何下一个网址(http://127.0.0.1:8000/user/ /编辑)
使用我的代码中是否有任何错误或错误?
我已经在Opera和Chrome中清除了缓存,但问题仍然存在。
Django ver。 1.11.9。
在settings.py
中未定义LOGIN_URLurls.py
urlpatterns = [
url(r'^login/$', user_login, name='user-login',),
url(r'^(?P<user_id>\d+)/edit$', user_edit, name='user-edit',),
]
views.py
def user_login(request):
login_form = AuthenticationForm(request.POST or None)
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user:
login(request, user)
print("next is {}".format(request.GET.get('next')))
return redirect(user_edit, user.id)
else:
return redirect(user_login)
return render(request, 'user_login.html', {'form': login_form})
@login_required(login_url='/user/login/')
def user_edit(request, user_id):
print(request, request.user)
print("next is {}".format(request.GET.get('next')))
return render(request, 'user_edit.html', {'userid': user_id, 'user': request.user})
答案 0 :(得分:1)
login_required
装饰器仅检查用户是否已登录。如果要检查登录用户是否可以访问对象,则需要在视图中执行此操作。例如:
from django.http import Http404
@login_required(login_url='/user/login/')
def user_edit(request, user_id):
print(request, request.user)
if request.user.id != user_id:
raise Http404
return render(request, 'user_edit.html', {'userid': user_id, 'user': request.user})