Skip to main content
 首页 » 编程设计

python之Django-registration:如何允许用户删除他们的帐户

2025年05月04日41davidwang456

我有一个简单的网站,用户可以在其中注册以访问私有(private)内容并接收时事通讯。我用过django-registration用于用户注册和身份验证,并使用了来自 here 的一些 HTML 模板.

整个系统都在工作(登录、注销、密码恢复等),但我意识到用户无法从网站上删除他们的帐户。是否有为此设计的插件,或者如何扩展注册类来做到这一点?通过删除,我更喜欢真正的抑制,而不仅仅是让用户不活跃。

请您参考如下方法:

你可以这样做:

def delete_user(request, username): 
    context = {} 
     
    try: 
        u = User.objects.get(username=username) 
        u.delete() 
        context['msg'] = 'The user is deleted.'        
    except User.DoesNotExist:  
        context['msg'] = 'User does not exist.' 
    except Exception as e:  
        context['msg'] = e.message 
 
    return render(request, 'template.html', context=context)  

并且有一个像这样的 url 模式:

url(r'^delete/(?P<username>[\w|\W.-]+)/$', views.delete_user, name='delete-user') 

这将完成工作。它将通过给定的用户名删除用户。

但是,如the docs说:

is_active

Boolean. Designates whether this user account should be considered active. We recommend that you set this flag to False instead of deleting accounts; that way, if your applications have any foreign keys to users, the foreign keys won’t break.

将用户设置为非事件而不是将其从数据库中完全删除是更好的方法,因为外键会损坏。

所以你可以简单地做:

def delete_user(request, username): 
    context = {} 
 
    try: 
        user = User.object.get(username=username) 
        user.is_active = False 
        user.save() 
        context['msg'] = 'Profile successfully disabled.' 
    except User.DoesNotExist: 
        # ... 
    except Exception as e: 
        # ... 
     
    # ... 

现在每个人都可以访问此 View ,您必须添加一些权限。一种直接的方法是覆盖内置的 @user_passes_test 装饰器:

@user_passes_test(lambda u: u.is_staff, login_url=reverse_lazy('login')) 
def delete_user(request, username): 
    # ...