这一章将实现删除用户数据的功能。html
删除用户数据自己的逻辑并不复杂,可是会涉及到新的问题。python
用户数据是不少网站最重要的财产,确保用户数据的安全是很是重要的。git
前面学习的用户登陆、退出、建立都是相对安全的操做;而删除数据就很危险,弄很差会形成不可逆的损失。所以咱们但愿对操做者作一些限制,好比只能用户登陆且必须是本用户才能进行删除的操做。这就是权限。github
所以在视图中进行简单的用户权限的验证工做。编写/userprofile/views.py
:sql
/userprofile/views.py
from django.contrib.auth.models import User
# 引入验证登陆的装饰器
from django.contrib.auth.decorators import login_required
...
@login_required(login_url='/userprofile/login/')
def user_delete(request, id):
user = User.objects.get(id=id)
# 验证登陆用户、待删除用户是否相同
if request.user == user:
#退出登陆,删除数据并返回博客列表
logout(request)
user.delete()
return redirect("article:article_list")
else:
return HttpResponse("你没有删除操做的权限。")
复制代码
分析上面的代码:数据库
@login_required
是一个Python装饰器。装饰器能够在不改变某个函数内容的前提下,给这个函数添加一些功能。具体来讲就是@login_required
要求调用user_delete()
函数时,用户必须登陆;若是未登陆则不执行函数,将页面重定向到/userprofile/login/
地址去。django
@login_required
的详细解释看这里:login_required装饰器确认用户已经登陆后,容许调用user_delete()
;而后须要删除的用户id经过请求传递到视图中,由if
语句确认是否与登陆的用户一致,成功后则退出登陆并删除用户数据,返回博客列表页面。安全
而后改写/templates/header.html
,新增了删除用户的入口,而且在末尾添加弹窗组件的代码:服务器
/templates/header.html
...
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<!-- 新增 -->
<a class="dropdown-item" href="#" onclick="user_delete()">删除用户</a>
<a class="dropdown-item" href='{% url "userprofile:logout" %}'>退出登陆</a>
</div>
...
<!-- 新增 -->
{% if user.is_authenticated %}
<script> function user_delete() { // 调用layer弹窗组件 layer.open({ title: "确认删除", content: "确认删除用户资料吗?", yes: function(index, layero) { location.href='{% url "userprofile:delete" user.id %}' }, }) } </script>
{% endif %}
复制代码
user_delete()
函数,函数包含了弹窗组件确认用户没有误操做;点击弹窗中的确认按钮后,调用删除的视图,执行业务逻辑。user_delete()
函数是用if
模板语句包裹起来的。由于用户未登陆时页面对象中是没有user.id
属性的,可是函数中却又包含了user.id
,Django在解析模板时就会报错。if
语句确保了只有在用户登陆时才对这段JavaScript代码进行解析,回避了这个问题。base.html
已经引用了弹窗组件模块,而header.html
是拼接在base.html
中的,所以就不用再重复引用弹窗组件了。最后就是写好/userprofile/urls.py
的路由映射了:函数
/userprofile/urls.py
urlpatterns = [
...
# 用户删除
path('delete/<int:id>/', views.user_delete, name='delete'),
]
复制代码
运行服务器看看效果。登陆用户并在右上角下拉框中点击删除用户:
点击肯定后就能够成功删除用户数据了。
前面咱们已经讲过如何用SQLiteStudio查看数据库存储的内容,确保数据真正的从数据库中擦除了。
用SQLiteStudio打开项目中db.sqlite3
文件,找到auth_user
字段,显示以下:
能够看到dusai123
这个用户确实已经没有了。
在验证操做数据的逻辑时,SQLiteStudio能够帮助咱们直观的发现问题,必定要善加利用。
本章学习了删除用户功能,并给它赋予了简单的权限。
下一章将学习经过邮箱重置用户密码。
转载请告知做者并注明出处。