配置用户中心页面
编写urls
# !/usr/bin/env python # -*- coding:utf-8 -*- __author__ = '_X.xx_' __date__ = '2018/6/13 18:26' from django.conf.urls import url from .views import UserinfoView, UploadImageView, UpdatePwdView, \ SendEmailCodeView, UpdateEmailView, MyCourseView, MyFavOrgView, \ MyFavTeacherView, MyFavCourseView, MymessageView urlpatterns = [ # 用户信息 url(r'^info/$', UserinfoView.as_view(), name='user_info'), # 用户头像上传 url(r'^image/upload/$', UploadImageView.as_view(), name='image_upload'), # 用户个人中心修改密码 url(r'^update/pwd/$', UpdatePwdView.as_view(), name='update_pwd'), # 发送邮箱验证码 url(r'^sendemail_code/$', SendEmailCodeView.as_view(), name='sendemail_code'), # 修改邮箱 url(r'^update_email/$', UpdateEmailView.as_view(), name='update_email'), # 我的课程 url(r'^mycourse/$', MyCourseView.as_view(), name='mycourse'), # 我收藏的课程机构 url(r'^myfav/org/$', MyFavOrgView.as_view(), name='myfav_org'), # 我收藏的授课教师 url(r'^myfav/teacher/$', MyFavTeacherView.as_view(), name='myfav_teacher'), # 我收藏的公开课 url(r'^myfav/course/$', MyFavCourseView.as_view(), name='myfav_course'), # 我的消息 url(r'^mymessage/$', MymessageView.as_view(), name='mymessage'), ]
编写view视图函数
class MyCourseView(LoginRequiredMixin, View): """ 我的课程 """ def get(self, request): user_courses = UserCourse.objects.filter(user=request.user) return render(request, 'usercenter-mycourse.html', { 'user_courses': user_courses }) class MyFavOrgView(LoginRequiredMixin, View): """ 我收藏的课程机构 """ def get(self, request): org_list = [] fav_orgs = UserFavorite.objects.filter(user=request.user, fav_type=2) for fav_org in fav_orgs: org_id = fav_org.fav_id org = CourseOrg.objects.get(id=org_id) org_list.append(org) return render(request, 'usercenter-fav-org.html', { 'org_list': org_list }) class MyFavTeacherView(LoginRequiredMixin, View): """ 我收藏的授课讲师 """ def get(self, request): teacher_list = [] fav_teachers = UserFavorite.objects.filter(user=request.user, fav_type=3) for fav_teacher in fav_teachers: teacher_id = fav_teacher.fav_id teacher = Teacher.objects.get(id=teacher_id) teacher_list.append(teacher) return render(request, 'usercenter-fav-teacher.html', { 'teacher_list': teacher_list }) class MyFavCourseView(LoginRequiredMixin, View): """ 我收藏的课程 """ def get(self, request): course_list = [] fav_courses = UserFavorite.objects.filter(user=request.user, fav_type=1) for fav_course in fav_courses: course_id = fav_course.fav_id course = Course.objects.get(id=course_id) course_list.append(course) return render(request, 'usercenter-fav-course.html', { 'course_list': course_list }) class MymessageView(LoginRequiredMixin, View): """ 我的消息 """ def get(self, request): all_messages = UserMessage.objects.filter(user=request.user.id) #用户进入个人消息后清空未读消息的记录 all_unread_messages = UserMessage.objects.filter(user=request.user.id, has_read=False) for unread_message in all_unread_messages: unread_message.has_read = True unread_message.save() #对个人消息进行分页 try: page = request.GET.get('page', 1) except PageNotAnInteger: page = 1 p = Paginator(all_messages, 5, request=request) messages = p.page(page) return render(request, 'usercenter-message.html', { "messages":messages})
配置前端页面
{% extends 'usercenter-base.html' %}
{% load staticfiles %}
{% block title %}
课程收藏-X.xx在线网
{% endblock %}
{% block custom_bread %}
<section>
<div class="wp">
<ul class="crumbs">
<li><a href="{% url 'index' %}">首页</a>></li>
<li><a href="{% url 'users:user_info' %}">个人中心</a>></li>
<li>我的收藏</li>
</ul>
</div>
</section>
{% endblock %}
{% block right_content %}
<div class="right" >
<div class="personal_des Releasecont">
<div class="head">
<h1>我的收藏</h1>
</div>
</div>
<div class="personal_des permessage">
<div class="head">
<ul class="tab_header messagehead">
<li><a href="{% url 'users:myfav_org' %}">课程机构</a> </li>
<li><a href="{% url 'users:myfav_teacher' %}">授课教师 </a></li>
<li class="active"><a href="{% url 'users:myfav_course' %}">公开课程</a></li>
</ul>
</div>
<div class="companycenter">
<div class="group_list brief">
{% for fav_course in course_list %}
<div class="module1_5 box">
<a href="{% url 'course:course_detail' fav_course.id %}">
<img width="214" height="190" src="{{ MEDIA_URL }}{{ fav_course.image }}"/>
</a>
<div class="des">
<a href="{% url 'course:course_detail' fav_course.id %}"><h2>{{ fav_course.name }}</h2></a>
<span class="fl">时长:<i class="key">{{ fav_course.learn_times }}</i></span>
<span class="fr">学习人数:{{ fav_course.students }}</span>
</div>
<div class="bottom">
<span class="fl">{{ fav_course.course_org.address }}</span>
<span class="delete-group fr jsDeleteFav_course" data-favid="{{ fav_course.id }}"></span>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
{% endblock %}
基本都一样
编写全局接收消息方法
# _*_ coding: utf-8 _*_
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import AbstractUser
from datetime import datetime
class UserProfile(AbstractUser):
"""
用户表设计
如果Django自带的用户表无法满足的时候继承原表增加自己的字段
"""
nick_name = models.CharField(max_length=50, verbose_name=u'昵称', default='')
birthday = models.DateField(verbose_name=u'生日', blank=True, null=True)
gender = models.CharField(choices=(('male', u'男'), ('female', u'女')),
default='female', max_length=6)
address = models.CharField(max_length=100, default='')
mobile = models.CharField(max_length=11, null=True, blank=True)
image = models.ImageField(upload_to='image/%Y/%m',
default=u'image/default.png', max_length=100)
class Meta:
verbose_name = u'用户信息'
verbose_name_plural = verbose_name
def __unicode__(self):
return self.username
def unread_nums(self):
# 获取用户未读消息数量
from operation.models import UserMessage
return UserMessage.objects.filter(user=self.id).count()
配置前端页面接收消息 需要把所有base页面都写入
<a href="#"> <div class="msg-num"> <span id="MsgNum">{{ request.user.unread_nums }}</span></div>
前端页面展示
用户退出功能
from django.contrib.auth import authenticate, login, logout
class LogoutView(View): """ 用户退出功能 """ def get(self, request): logout(request) from django.core.urlresolvers import reverse return HttpResponseRedirect(reverse('index'))
项目目录配置urls
from users.views import LoginView, LogoutView
url(r'^logout/$', LogoutView.as_view(), name='logout'),