基于django的视频点播网站开发-step6-个人中心功能
从本讲起,我们开始个人中心功能的开发。个人中心里面包括个人资料、修改密码、订阅设置、意见反馈这四部分。通过这部分的开发,我们将会接触到更多django的用法。
感兴趣的伙伴可通过网站演示预览网站,登录后点击右上角头像即可弹出个人中心相关菜单。
整体功能
个人中心模块是对用户的信息进行展示并可以编辑。其中个人资料、修改密码、订阅设置是对用户信息的编辑,反馈建议是属于创建新数据。
个人资料
这里主要是对个人资料进行编辑,先显示用户原有的信息,然后用户即可对其进行修改并保存,对于编辑功能,django有自己的解决方案,即通过通用视图类UpdateView对模型进行更改。关于Update的介绍,同学们可查阅官网介绍
因为前面已经建立过user模型,所以这里就不用再次建立了,我们直接使用之前的user模型即可。
需要我们做的就是在users/urls.py中添加个人资料的路由,
path('profile/<int:pk>/', views.ProfileView.as_view(), name='profile'),
可以看到,这里我们需要传一个int参数做为主键,并传递给视图类ProfileView。
下面我们转向ProfileView,它的写法超级简单
class ProfileView(LoginRequiredMixin,AuthorRequiredMixin, generic.UpdateView): model = User form_class = ProfileForm template_name = 'users/profile.html' def get_success_url(self): messages.success(self.request, "保存成功") return reverse('users:profile', kwargs={'pk': self.request.user.pk})
简单的几行代码,就实现了个人资料的更新,再次彰显了django框架的强大。我们这里继承了UpdateView来实现更新操作,和DetailView类似,我们这里也设置了model和template_name 还有form_class。当更新成功后,django会回调get_success_url来将结果告诉模板,因此我们可以在get_success_url里面做一些定制的工作,我们可以传一些自己的参数。
可以看到我们还继承了LoginRequiredMixin和AuthorRequiredMixin两个类,这两个类属于公共类,其中LoginRequiredMixin的用途是:只允许登录的用户访问该视图类,AuthorRequiredMixin的用途是:只允许用户自己查看自己的个人资料,别人是无法查看的。其中AuthorRequiredMixin的代码位于videoproject/helpers.py。
修改密码
同样的,修改密码也是属于更新操作。
模型当然是用user模型,不必再建。
我们先添加路由
path('change_password/', views.change_password, name='change_password'),
修改密码比较特殊,需要对密码进行特殊处理,因此我们通过视图函数change_password来手写代码
def change_password(request): if request.method == 'POST': form = ChangePwdForm(request.user, request.POST) if form.is_valid(): user = form.save(commit=False) if not user.is_staff and not user.is_superuser: user.save() update_session_auth_hash(request, user) # 更新session 非常重要! messages.success(request, '修改成功') return redirect('users:change_password') else: messages.warning(request, '无权修改管理员密码') return redirect('users:change_password') else: print(form.errors) else: form = ChangePwdForm(request.user) return render(request, 'registration/change_password.html', { 'form': form })
代码中,当拿到form之后,通过验证form合法性,然后调用user.save()来保存修改。然后通过update_session_auth_hash来更新session。
这样就实现了修改密码功能。
订阅设置
很多网站都有订阅设置功能,当用户订阅了网站内容之后,网站有了新内容,即向订阅用户推送相关内容。有利于让用户获取网站内容的最新更新。
我们先在users/urls.py下添加订阅功能的路由
path('subscribe/<int:pk>/', views.SubscribeView.as_view(), name='subscribe'),
我们设置的订阅视图类为SubscribeView,因为订阅的功能和修改个人资料功能类似,也是属于更新操作,所以同样是使用UpdateView来更新。
class SubscribeView(LoginRequiredMixin,AuthorRequiredMixin, generic.UpdateView): model = User form_class = SubscribeForm template_name = 'users/subscribe.html' def get_success_url(self): messages.success(self.request, "保存成功") return reverse('users:subscribe', kwargs={'pk': self.request.user.pk})
反馈与建议
这里我们需要在users/models.py下新建一个反馈表,命名为Feedback,
class Feedback(models.Model): contact = models.CharField(blank=True, null=True, max_length=20) content = models.CharField(blank=True, null=True, max_length=200) timestamp = models.DateTimeField(auto_now_add=True, null=True) class Meta: db_table = "v_feedback"
该表一共有3个字段,分别是
- contact 联系方式
- content 内容
- timestamp 时间
写完model之后,我们就能写业务代码了。
先添加路由
path('feedback/', views.FeedbackView.as_view(), name='feedback'),
我们设置路由指向FeedbackView视图类。
我们直接贴出FeedbackView的代码
class FeedbackView(LoginRequiredMixin, generic.CreateView): model = Feedback form_class = FeedbackForm template_name = 'users/feedback.html' @ratelimit(key='ip', rate='2/m') def post(self, request, *args, **kwargs): was_limited = getattr(request, 'limited', False) if was_limited: messages.warning(self.request, "操作太频繁了,请1分钟后再试") return render(request, 'users/feedback.html', {'form': FeedbackForm()}) return super().post(request, *args, **kwargs) def get_success_url(self): messages.success(self.request, "提交成功") return reverse('users:feedback')
我们看到这个地方继承的是CreateView类,该类属于新建通用视图类。只要我们配置好model、form_class、template_name,django就自动为我们创建记录。
另外,我们还使用了一种限流量的技术:ratelimit。这是一个第三方类库,通过使用他,可以防止恶意提交数据。它使用超级简单,只需要配置好key和rate即可,key代表业务,rate代表速率,这里我们设置key为ip,即限制ip地址,rate为'2/m',表示每分钟限制请求2次。超过2次就提示用户操作频繁。
这样我们就完美的实现了用户反馈。
下面是效果展示
个人资料:
修改密码:
订阅设置:
反馈建议:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
POI事件模式指北(二)-Excel2007
POI事件模式指北(二)-Excel2007 1、简介 Excel2007(.xlsx)是现在最常用的Excel格式,对这种文件的读取也是非常常见的需求;同样的POI也提供用户模式(User API) 和事件模式(Event API) 两种方式供大家使用。 POI的事件模式占用内存更小,它利用基础的XML数据进行处理,适用于愿意学习.xlsx文件结构以及在java中处理XML的开发人员。 那么事不宜迟,Let‘s go! 2、Excel文件的XML结构 了解文件结构之前先来看一下准备的文件,这个文件只有一个sheet页,结构也很简单。 Excel2007是用XMl格式储存,将要读取的文件后缀名改为.zip或者直接用解压缩工具打开,就可以看到这个Excel文件的结构了。 2.1、[Content_Types].xml [Content_Types].xml文件描述了整个Excel文件的结构,也将根据这个文件组织后面的读取工作。 2.1、docProps文件夹 docProps文件夹下面有两个xml,里面记录的Excel的属性信息。 app.xml : 记录文档的创建时间和修改时间,以及标...
- 下一篇
基于django的视频点播网站开发-step7-我的收藏喜欢功能
从本讲起,我们会讲到个人菜单中另外两个比较重要的功能,“我的收藏”与“我的喜欢”。感兴趣的同学可以点击网站的右上角,即可弹出个人菜单,你就能看到“我的收藏”与“我的喜欢”了。通过学习这两个功能,我们会加深对django中通用视图类的理解与应用。 Demo预览 我的收藏 我们先来讨论模型,我们分析一下,我收藏的视频与我喜欢的视频,其中的视频都是属于video模型,因此我们应该在video模型上进行修改。因为是我的收藏、我的喜欢,都是与我关联,又因为,我可以收藏多个视频,视频也可以被多个用户收藏,所以用户与视频是属于多对多的关系。所以我们在video模型上添加两个字段liked和collected,分别对应我喜欢和我收藏。代码如下 class Video(models.Model): STATUS_CHOICES = ( ('0', '发布中'), ('1', '未发布'), ) title = models.CharField(max_length=100,blank=True, null=True) desc = models.CharField(max_length=255,blan...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16