基于django的视频点播网站开发-step11-后台用户管理功能

简介: 用户管理功能,包含用户添加、列表展示、编辑、删除四大功能。下面我们一一揭晓。用户添加我们先实现用户添加功能,我们现在urls.py下添加相关的路由path('user_add/', views.

用户管理功能,包含用户添加、列表展示、编辑、删除四大功能。下面我们一一揭晓。

用户添加

我们先实现用户添加功能,我们现在urls.py下添加相关的路由

path('user_add/', views.UserAddView.as_view(), name='user_add'),
path('user_list/', views.UserListView.as_view(), name='user_list'),
path('user_edit/<int:pk>',views.UserEditView.as_view(), name='user_edit'),
path('user_delete/', views.user_delete, name='user_delete'),

用户添加的视图类是UserAddView

class UserAddView(SuperUserRequiredMixin, generic.View):
    def get(self, request):
        form = UserAddForm()
        return render(self.request, 'myadmin/user_add.html', {'form': form})

    def post(self, request):
        form = UserAddForm(data=request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            password = form.cleaned_data.get('password')
            user.set_password(password)
            user.save()
            return render(self.request, 'myadmin/user_add_success.html')
        return render(self.request, 'myadmin/user_add.html', {'form': form})

这是一个普通的视图类,通过get()和post()来完成用户添加的功能,get里面负责页面的展示,post里面负责逻辑处理。在get中,初始化form为UserAddForm,因为添加的用户是有类别的,所以我们在UserAddForm中应用了is_staff字段来表示管理员。在post中,我们通过user.set_password(password)来设置新密码。user.save()来保存记录到数据库。保存成功后会跳转到myadmin/user_add_success.html页面。

用户列表

用户添加成功后,当你点击用户列表,即可看到用户列表数据,用户列表我们配置的路由是

path('user_list/', views.UserListView.as_view(), name='user_list'),

使用的是UserListView视图类,该类是继承自ListView通用视图类的。因此 只需要我们简单的配置几下,就能实现列表功能。UserListView代码如下

class UserListView(AdminUserRequiredMixin, generic.ListView):
    model = User
    template_name = 'myadmin/user_list.html'
    context_object_name = 'user_list'
    paginate_by = 10
    q = ''

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(UserListView, self).get_context_data(**kwargs)
        paginator = context.get('paginator')
        page = context.get('page_obj')
        page_list = get_page_list(paginator, page)
        context['page_list'] = page_list
        context['q'] = self.q
        return context

    def get_queryset(self):
        self.q = self.request.GET.get("q", "")
        return User.objects.filter(username__contains=self.q).order_by('-date_joined')

我们知道ListView是有多个回调函数的,这里就是通过get_context_data()和get_queryset()回调函数来实现列表中的功能的。在get_context_data()中实现了列表分页功能,在get_queryset()中实现了搜索功能。

配置的模板是myadmin/user_list.html,显示效果如下

用户编辑

当你点击编辑按钮的时候,即可进入编辑页面。对应的路由是

path('user_edit/<int:pk>',views.UserEditView.as_view(), name='user_edit'),

即UserEditView

class UserEditView(SuperUserRequiredMixin, generic.UpdateView):
    model = User
    form_class = UserEditForm
    template_name = 'myadmin/user_edit.html'

    def get_success_url(self):
        messages.success(self.request, "保存成功")
        return reverse('myadmin:user_edit', kwargs={'pk': self.kwargs['pk']})

同样是继承自UpdateView,仅需要配置好model、form_class、template_name即可,简单至极。

效果如下

用户删除

当你点击删除按钮的时候,会弹出确认框让你删除。然后网站通过ajax调用user_delete来实现真正的删除操作,其中,ajax代码位于static/js/myadmin/user_list.js

真正的删除函数是user_delete,下面是它的真面目

@ajax_required
@require_http_methods(["POST"])
def user_delete(request): 
    user_id = request.POST['user_id']
    instance = User.objects.get(id=user_id) 
    instance.delete()
    return JsonResponse({"code": 0, "msg": "success"})

首先获取到当前用户的实例,然后通过 instance.delete() 删除之。

目录
相关文章
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
96 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
2月前
|
JavaScript 关系型数据库 MySQL
Django教程第2章| Web开发实战-用户管理
基于Django实现用户管理:增删改查,搜索,分页。【2月更文挑战第22天】
54 0
Django教程第2章| Web开发实战-用户管理
|
3月前
|
Python
百度搜索:蓝易云【Django自带的Admin后台中如何获取当前登录用户】
在上面的代码中,`@staff_member_required`装饰器确保只有管理员可以访问 `my_custom_view`视图,而 `@login_required`装饰器确保只有登录的用户可以访问该视图。然后,可以使用 `request.user.username`获取当前登录用户的用户名,并将其传递到模板中进行显示或其他操作。
33 3
|
4月前
|
算法 Java Python
Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
47 0
|
4月前
|
XML 应用服务中间件 nginx
关于nginx部署Django 后台样式丢失
关于nginx部署Django 后台样式丢失
56 0
|
5月前
|
前端开发 数据库 UED
为什么 Django 后台管理系统那么“丑”?
为什么 Django 后台管理系统那么“丑”?
|
编解码 Java 开发工具
谷粒学苑项目实战(十四):实现阿里云视频点播功能(java编码实现)
视频点播(ApsaraVideo for VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。
616 0
谷粒学苑项目实战(十四):实现阿里云视频点播功能(java编码实现)
|
SQL XML 前端开发
基于Django的电子商务网站开发(连载40)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
89 0
|
安全 测试技术 Python
基于Django的电子商务网站开发(连载39)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
50 0
基于Django的电子商务网站开发(连载39)
|
测试技术 Python
基于Django的电子商务网站开发(连载38)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
57 0

热门文章

最新文章