[英]How can I enable the users delete and edit post they create in Django?
[英]Django: How to enable users to delete their account
我不确定出了什么问题,但我仍然无法删除我自己的帐户。
我只是被重定向到主页。
视图.py
def delete_user(request, username):
if request.method == 'DELETE':
try:
user = User.objects.get(username = username)
user.delete()
context['msg'] = 'Bye Bye'
except Exception as e:
context['msg'] = 'Something went wrong!'
else:
context['msg'] = 'Request method should be "DELETE"!'
return render(request, 'HomeFeed/snippets/home.html', context=context)
网址.py
from account.views import (
delete_user,
)
path('delete/<username>', delete_user, name='delete_account'),
account.html
<form action="{% url 'account:delete_account' username=request.user.username %}" method="GET">
<a class="mt-4 btn btn-danger deleteaccount" onclick="return confirm('Are you sure you want to delete your account')" href="">Delete Account</a>
</form>
您的代码只是停用用户不要删除用户。 因此用户在不活动时无法再次登录。
虽然您希望用户删除自己,而不是其他任何人。 直接从请求中获取用户。 无需 url。
def delete_user(request, username):
context = {}
if not request.user.is_authenticated:
return redirect("login")
if request.method == 'DELETE':
try:
user = request.user
user.delete()
context['msg'] = 'Bye Bye'
except Exception as e:
context['msg'] = 'Something went wrong!'
else:
context['msg'] = 'Request method should be "DELETE"!'
return render(request, 'template.html', context=context)
路径应该看起来像
path('account/delete', delete_user, name='delete_account'),
注意:请求应该是DELETE
而不是GET
或POST
request.user
中调用它<form method="delete">
。 However Django correct handle 'PUT' and 'DELETE' (and all others) http methods.You can make PUT and DELETE http calls thought the ajax. 仅用于测试,使用 DELETE 方法localhost:8000/delete/user1
调用 Postman
from django.contrib import admin
from django.urls import path
from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth.models import User
from django.views.decorators.csrf import csrf_exempt
# Create your views here.
@csrf_exempt
def delete_user(request, username):
if request.method == 'DELETE':
try:
user = User.objects.get(username=username)
user.delete()
return HttpResponse('Bye bye')
except Exception as e:
return HttpResponse('Something went wrong!')
else:
return HttpResponse('Request method should be "DELETE"!')
urlpatterns = [
path('admin/', admin.site.urls),
path('delete/<username>', delete_user)
]
注意:我使用@csrf_exempt
跳过 CSRF_TOKEN 验证
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.