10-9 我的收藏

课程机构 授课教师 公开课

C:\Users\hlg\PycharmProjects\MxOnline\templates\usercenter-fav-org.html

{% extends 'usercenter-base.html' %}
{% block title %}我的收藏- 慕学在线网{% endblock %}
{% load staticfiles %}
{% block custom_bread %}
    <section>
        <div class="wp">
            <ul  class="crumbs">
                <li><a href="{% url 'index' %}">首页</a>></li>
                <li><a href="/user/home/">个人中心</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 class="active"><a href="{% url 'users:myfav_org' %}">课程机构</a> </li>
                        <li><a href="{% url 'users:myfav_teacher' %}">授课教师 </a></li>
                        <li><a href="{% url 'users:myfav_course' %}">公开课程</a></li>
                    </ul>
                </div>
                <div class="messagelist">
                    {% for org in org_list %}
                        <div class="messages butler_list company company-fav-box">
                        <dl class="des fr">
                            <dt>
                                <a href="{% url 'org:org_home' org.id %}">
                                    <img width="160" height="90" src="{{ MEDIA_URL }}{{ org.image }}"/>
                                </a>
                            </dt>
                            <dd>
                                <h1><a href="{% url 'org:org_home' org.id %}">{{ org.name }}</a></h1>
                                <div class="pic fl" style="width:auto;">

                                    <img src="{% static 'images/authentication.png' %}"/>


                                    <img src="{% static 'images/gold.png' %}"/>

                                </div>
                                <span class="c8 clear">{{ org.address }}</span>
                                <div class="delete jsDeleteFav_org" data-favid="{{ org.id }}"></div>
                            </dd>
                        </dl>
                    </div>
                    {% endfor %}
                </div>
            </div>
        </div>
{% endblock %}



C:\Users\hlg\PycharmProjects\MxOnline\templates\usercenter-fav-teacher.html

{% extends 'usercenter-base.html' %}
{% block title %}我的收藏- 慕学在线网{% endblock %}
{% load staticfiles %}
{% block custom_bread %}
    <section>
        <div class="wp">
            <ul  class="crumbs">
                <li><a href="{% url 'index' %}">首页</a>></li>
                <li><a href="/user/home/">个人中心</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 class="active"><a href="{% url 'users:myfav_teacher' %}">授课教师 </a></li>
                        <li><a href="{% url 'users:myfav_course' %}">公开课程</a></li>
                    </ul>
                </div>
                <div class="messagelist">
                    {% for teacher in teacher_list %}
                    <div class=" butler_list butler-fav-box">
                        <dl class="des users">
                            <dt>
                                <a href="{% url 'org:teacher_detail' teacher.id %}">
                                    <img width="100" height="100" src="{{ MEDIA_URL }}{{ teacher.image }}"/>
                                </a>
                            </dt>
                            <dd>
                                <h1>
                                    <a href="{% url 'org:teacher_detail' teacher.id %}">
                                        {{ teacher.name }}<span class="key">认证教师</span>
                                    </a>
                                </h1>
                                <ul class="cont clearfix">
                                    <li class="time">工作年限:<span>{{ teacher.work_years }}年</span></li>
                                    <li class="c7">课程数:<span>{{ teacher.get_course_nums }}</span></li>
                                </ul>
                                <ul class="cont clearfix">
                                    <li class="time">工作公司:<span>{{ teacher.work_company }}</span></li>
                                    <li class="c7">公司职位:<span>{{ teacher.work_position }}</span></li>
                                </ul>
                            </dd>
                            <div class="delete jsDeleteFav_teacher" data-favid="1"></div>
                        </dl>
                    </div>
                    {% endfor %}

                </div>
            </div>
        </div>
{% endblock %}




C:\Users\hlg\PycharmProjects\MxOnline\templates\usercenter-fav-course.html

{% extends 'usercenter-base.html' %}
{% block title %}我的收藏- 慕学在线网{% endblock %}
{% load staticfiles %}
{% block custom_bread %}
    <section>
        <div class="wp">
            <ul  class="crumbs">
                <li><a href="{% url 'index' %}">首页</a>></li>
                <li><a href="/user/home/">个人中心</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.studens }}</span>
                            </div>
                            <div class="bottom">
                                <span class="fl">{{ fav_course.course.name }}</span>
                                <span class="delete-group fr jsDeleteFav_course" data-favid="12"></span>
                            </div>
                        </div>
                        {% endfor %}

                    </div>
                </div>
            </div>
        </div>
{% endblock %}



C:\Users\hlg\PycharmProjects\MxOnline\apps\users\urls.py

# _*_ encoding:utf-8 _*_
from django.conf.urls import url, include

from .views import UserInfoView, UploadImageView, UpdatePwdView, SendEmailCodeView, UpdateEmailView
from .views import MyCourseView, MyFavOrgView, MyFavTeacherView, MyFavCourseView

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"),
]

C:\Users\hlg\PycharmProjects\MxOnline\apps\users\views.py

# _*_ encoding:utf-8 _*_
import json
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend #
from django.db.models import Q  # 完成并集
from django.views.generic.base import View  #
from django.contrib.auth.hashers import make_password
from django.http import HttpResponse

# Create your views here.

from .models import UserProfile, EmailVerifyRecord
from .forms import LoginForm, RegisterForm, ForgetForm, ModifyPwdForm, UploadImageForm
from .forms import UserInfoForm
from utils.email_send import send_register_email
from utils.mixin_utils import LoginRequiredMixin
from operation.models import UserCourse, UserFavorite, Course
from organization.models import CourseOrg , Teacher


class CustomBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        # 完成自己的逻辑
        try:
            # user = UserProfile.objects.get(username=username)
            user = UserProfile.objects.get(Q(username=username)|Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None


class ActiveUserView(View):
    def get(self, request, active_code):
        all_records = EmailVerifyRecord.objects.filter(code=active_code)
        if all_records:
            for record in all_records:
                email = record.email
                user = UserProfile.objects.get(email= email)
                user.is_active = True
                user.save()
        # 如果不存在 告诉用户你的链接有误
        else:
            # 验证失败的返回
            return render(request, "active_fail.html")
        return render(request, "login.html")


# Register+View 说明是一个处理前端请求的View类
class RegisterView(View):
    def get(self, request):
        register_form = RegisterForm()
        return render(request, "register.html", {'register_form':register_form})

#     验证逻辑
    def post(self, request):
        #    实例化用户传来的数据
        register_form = RegisterForm(request.POST)
        if register_form.is_valid():
            user_name = request.POST.get("email", "")

            # 注册之前,判断用户是否存在
            if UserProfile.objects.filter(email=user_name):
                return render(request, "register.html", {"msg": "用户已经存在", "register_form": register_form})

            pass_word = request.POST.get("password", "")
            user_profile = UserProfile()
            user_profile.username = user_name
            user_profile.email = user_name
            user_profile.is_active = False
            user_profile.password = make_password(pass_word)
            user_profile.save()
            # 发送验证码
            send_register_email(user_name, "register")
            # 注册成功,返回到登录页面
            return render(request, "login.html")
        else:
            # 注册失败,返回到注册页面
            return render(request, "register.html", {"register_form":register_form})

# 基于类
class LoginView(View):  # 继承View django的View会自动调用get ,post
    def get(self, request):
        return render(request, "login.html", {})

    def post(self, request):
        login_form = LoginForm(request.POST)  # 实例化
        if login_form.is_valid():
            user_name = request.POST.get("username", "")
            pass_word = request.POST.get("password", "")

            user = authenticate(username=user_name, password=pass_word)

            if user is not None:
                if user.is_active:
                    login(request, user)  # 这个是系统提供的 login
                    return render(request, "index.html")  # 登录成功,跳转到首页
                else:
                    return render(request, "login.html", {"msg": "用户名或密码错误"})  # 验证失败
            else:
                return render(request, "login.html", {"msg": "用户名或密码错误"})  # 验证失败
        else:
            return render(request, "login.html", {"login_form":login_form})  # 登录失败,跳转到登录页面


class ForgetPwdView(View):
    def get(self, request):
        forget_form = ForgetForm()
        return render(request, "forgetpwd.html", {"forget_form": forget_form})

    def post(self, request):
        forget_form = ForgetForm(request.POST)
        if forget_form.is_valid():
            email = request.POST.get("email", "")
            send_register_email(email, "forget")

            #  发送邮件成功跳转页面
            return render(request, "send_success.html")
        else:
            return render(request, "forgetpwd.html", {"forget_form": forget_form})


class ResetView(View):
    def get(self, request, active_code):
        all_records = EmailVerifyRecord.objects.filter(code=active_code)
        if all_records:
            for record in all_records:
                email = record.email
                # 查找到用户,跳转到重置页面
                return render(request, "password_reset.html", {"email": email})
        # 如果不存在 告诉用户你的链接有误
        else:
            # 验证失败的返回
            return render(request, "active_fail.html")
        return render(request, "login.html")


class ModifyPwdView(View):
    """
    修改用户密码
    """
    def post(self, request):
        modify_form = ModifyPwdForm(request.POST)
        if modify_form.is_valid():
            pwd1 = request.POST.get("password1", "")
            pwd2 = request.POST.get("password2", "")
            email = request.POST.get("email", "")
            # 密码不一致
            if pwd1 != pwd2:
                return render(request, "password_reset.html", {"email": email, "msg": "密码不一致"})
            # 密码一致,保存密码
            user = UserProfile.objects.get(email=email)
            user.password = make_password(pwd2)
            user.save()
            # 密码修改成功,跳转到登录页面
            return render(request, "login.html")

        # 如果失败
        else:
            email = request.POST.get("email", "")
            return render(request, "password_reset.html", {"email": email, "modify_form": modify_form})


class UserInfoView(LoginRequiredMixin, View):
    """
    继承 LoginRequiredMixin 之后,只有登录才能继续执行
    用户个人信息
    """
    def get(self, request):
        return render(request, 'usercenter-info.html',{})

    def post(self, request):
        user_info_form = UserInfoForm(request.POST, instance=request.user)
        if user_info_form.is_valid():
            user_info_form.save()
            return HttpResponse('{"status": "success"}', content_type='application/json')
        else:
            return HttpResponse(json.dumps(user_info_form.errors), content_type='application/json')


class UploadImageView(LoginRequiredMixin, View):
    """
    用户修改头像
    """
    def post(self, request):
        # 方式一
        # 实际上是把用户上传的文件保存到form里了
        # image_form = UploadImageForm(request.POST, request.FILES)
        # if image_form.is_valid():
        #     #
        #     image = image_form.cleaned_data['image']
        #     request.user.image = image
        #     request.user.save()
        #     pass

        # 方式二
        # 实际上是把用户上传的文件保存到form里了
        image_form = UploadImageForm(request.POST, request.FILES, instance=request.user)
        if image_form.is_valid():
            image_form.save()
            return HttpResponse('{"status": "success"}', content_type='application/json')
        else:
            return HttpResponse('{"status": "fail"}', content_type='application/json')


class UpdatePwdView(View):
    """
    个人中心修改用户密码
    """
    def post(self, request):
        modify_form = ModifyPwdForm(request.POST)
        if modify_form.is_valid():
            pwd1 = request.POST.get("password1", "")
            pwd2 = request.POST.get("password2", "")
            # 密码不一致
            if pwd1 != pwd2:
                return HttpResponse('{"status": "fail", "msg": "密码不一致"}', content_type='application/json')
            # 密码一致,保存密码
            user = request.user
            user.password = make_password(pwd2)
            user.save()

            return HttpResponse('{"status": "success"}', content_type='application/json')

        # 如果失败
        else:
            return HttpResponse(json.dumps(modify_form.errors), content_type='application/json')


class SendEmailCodeView(LoginRequiredMixin, View):
    """
    发送邮箱验证码
    """
    def get(self, request):
        email = request.GET.get('email', '')

        if UserProfile.objects.filter(email=email):
            return HttpResponse('{"email": "邮箱已经存在"}', content_type='application/json')

        send_register_email(email, "update_email")
        return HttpResponse('{"status": "success"}', content_type='application/json')


class UpdateEmailView(LoginRequiredMixin, View):
    """
    修改个人邮箱
    """
    def post(self, request):
        email = request.POST.get('email', '')
        code = request.POST.get('code', '')

        existed_records = EmailVerifyRecord.objects.filter(email=email, code=code, send_type='update_email')
        if existed_records:
            user = request.user
            user.email = email
            user.save()
            return HttpResponse('{"status": "success"}', content_type='application/json')
        else:
            return HttpResponse('{"email": "验证码出错"}', content_type='application/json')


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
        })

效果图:













































猜你喜欢

转载自blog.csdn.net/huanglianggu/article/details/80849285
今日推荐