(十一)Django 在线平台(用户中心页面配置)

本文档详细介绍了如何在Django项目中配置用户中心页面,包括编写urls、视图函数、前端页面设置,以及实现用户消息接收和退出功能。
摘要由CSDN通过智能技术生成

配置用户中心页面


编写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'),


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值