html页面
<!DOCTYPE html> <html> {% load staticfiles %} <head> <meta charset="UTF-8"> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" > <title>{% block title %}机构首页{% endblock %}</title> <link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}"> <link rel="stylesheet" type="text/css" href="{% static 'css/animate.css' %}"> <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}"> <link rel="stylesheet" type="text/css" href="{% static 'js/plugins/queryCity/css/cityLayout.css' %}"> {% block custom_css %} {% endblock %} <script src="{% static 'js/jquery.min.js' %}" type="text/javascript"></script> <script src="{% static 'js/jquery-migrate-1.2.1.min.js' %}" type="text/javascript"></script> {% block custom_js %} {% endblock %} </head> <body> <section class="headerwrap headerwrap2"> <header> <div class="header2 header"> {% if request.user.is_authenticated %} <div class="top"> <div class="wp"> <div class="fl"><p>服务电话:<b>33333333</b></p></div> <!--登录后跳转--> {% if request.user.is_authenticated %} <div class="personal"> <dl class="user fr"> <dd>{{ user.username }}<img class="down fr" src="{% static '/static/images/top_down.png' %}"/></dd> <dt><img width="20" height="20" src="{{ MEDIA_URL }}{{ request.user.image }}"/></dt> </dl> <div class="userdetail"> <dl> <dt><img width="80" height="80" src="{{ MEDIA_URL }}{{ request.user.image }}"/></dt> <dd> <h2>{{ request.user.nick_name }}</h2> <p>{{ request.user.username }}</p> </dd> </dl> <div class="btn"> <a class="personcenter fl" href="usercenter-info.html">进入个人中心</a> <a class="fr" href="/logout/">退出</a> </div> </div> </div> {% else %} <a style="color:white" class="fr registerbtn" href="{% url 'register' %}">注册</a> <a style="color:white" class="fr loginbtn" href="login">登录</a> {% endif %} </div> </div> {% else %} <a style="color:white" class="fr registerbtn" href="{% url 'register' %}">注册</a> <a style="color:white" class="fr loginbtn" href="login">登录</a> {% endif %} <div class="middle companyheader"> <div class="wp"> <img class="fl" style="width: 112px;height: 103px" src="{{ MEDIA_URL }}{{ course_org.image }}"/> <div class="head fl"> <h1> 慕课网 <img src="{% static 'images/authentication.png' %}"/> <img src="{% static 'images/gold.png' %}"/> </h1> <p class="fl"> <span class="fl" style="margin-top:8px;color:#848484;">推荐指数: </span> <span class="precision company-credit" data-star-scope="5.0"></span> <span class="key">5.0</span> </p> </div> <div class="btn fr collectionbtn notlogin "data-favid="22" data-fav-type="1"> {% if has_fav %}已收藏{% else %}收藏{% endif %} </div> </div> </div> </div> </header> </section> <section> <div class="wp"> <ul class="crumbs"> <li><a href="index.html">首页</a>></li> <li><a href="{% url 'org:org_list' %}">课程机构</a>></li> <li>{% block page_path %}机构首页{% endblock %}</li> </ul> </div> </section> <section> <div class="wp list personal_list comp"> <div class="left"> <ul> <li class="{% ifequal current_page 'home' %}active2{% endifequal %}"><a href="{% url 'org:org_home' course_org.id %}">机构首页</a></li> <li class="{% ifequal current_page 'course' %}active2{% endifequal %}"><a href="{% url 'org:org_course' course_org.id %}">机构课程</a></li> <li class="{% ifequal current_page 'desc' %}active2{% endifequal %}"><a href="{% url 'org:org_desc' course_org.id %}">机构介绍</a></li> <li class="{% ifequal current_page 'teacher' %}active2{% endifequal %}"><a href="{% url 'org:org_teacher' course_org.id %}">机构讲师</a></li> </ul> </div> {% block right_form %} {% endblock %} </section> <!--sidebar start--> <section> <ul class="sidebar"> <li class="qq"> <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=2023525077&site=qq&menu=yes"></a> </li> <li class="totop"></li> </ul> </section> <!--sidebar end--> <!--header start--> </div> <!--弹出省省市--> <script src="{% static 'js/selectUi.js' %}" type='text/javascript'></script> <script type="text/javascript" src="{% static 'js/plugins/laydate/laydate.js' %}"></script> <script src="{% static 'js/plugins/layer/layer.js' %}"></script> <script src="{% static 'js/plugins/queryCity/js/public.js' %}" type="text/javascript"></script> <script type="text/javascript" src="{% static 'js/plugins/jquery.raty.js' %}"></script> <script type="text/javascript"> //收藏分享 //收藏分享 function add_fav(current_elem, fav_id, fav_type){ $.ajax({ cache: false, type: "POST", url:"{% url 'org:add_fav' %}", data:{'fav_id':fav_id, 'fav_type':fav_type}, async: true, beforeSend:function(xhr, settings){ xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}"); }, success: function(data) { if(data.status == 'fail'){ if(data.msg == '用户未登录'){ window.location.href="/login/"; }else{ alert(data.msg) } }else if(data.status == 'success'){ current_elem.text(data.msg) } }, }); } $('.collectionbtn').on('click', function(){ add_fav($(this), {{ course_org.id }}, 2); }); $(function(){ var $precision = $('.precision'), score = $precision.attr('data-star-scope'), option = { half : true, path : '{% static 'images/' %}', precision : true, size : 24, starOff : 'g_star.png', starOn : 'r_star.png', starHalf : 'h_star.png', hints : ['极差', '差', '一般', '好评', '非常满意'], noRatedMsg : '暂时还未获得评价!', readOnly : true, score : score }; $precision.raty(option); $('.jsFavBtn').on('click', function(){ var type = $(this).attr('data-fav-type'); if(type == '1'){ favPraise($(this), 'fav' ,1 , '收藏'); }else if(type == '3'){ favPraise($(this), 'fav' ,3 ); }else if(type == '11'){ favPraise($(this), 'pra', 1); }else if(type == '4'){ favPraise($(this), 'fav' ,4 ); } }); }) </script> <script type="text/javascript"> $(function() { $('.recordbtn1').click(function(){ $('.recordbox1').show(); }); $('.recordbtn2').click(function(){ $('.recordbox2').show(); }); $('.imgslide').unslider({ speed: 500, // The speed to animate each slide (in milliseconds) delay: 3000, // The delay between slide animations (in milliseconds) complete: function() {}, // A function that gets called after every slide animation keys: true, // Enable keyboard (left, right) arrow shortcuts dots: true, // Display dot navigation fluid: false // Support responsive design. May break non-responsive designs }); var unslider = $('.imgslide').unslider(); $('.unslider-arrow').click(function() { var fn = this.className.split(' ')[1]; unslider.data('unslider')[fn](); }); }); </script> </body> </html>
# 机构收藏 url(r'^add_fav/$', AddFavView.as_view(), name='add_fav'),
后台逻辑
class AddFavView(View): """ 用户收藏 用户取消收藏 """ def post(self, request): fav_id = request.POST.get('fav_id', '0') fav_type = request.POST.get('fav_type', '0') if not request.user.is_authenticated(): # 判断用户登录状态 return HttpResponse('{"status": "fail", "msg": "用户未登录"}', content_type='application/json') exist_records = UserFavorite.objects.filter(user=request.user, fav_id=int(fav_id), fav_type=int(fav_type)) if exist_records: # 如果记录已经存在, 则表示用户取消收藏 exist_records.delete() else: user_fav = UserFavorite() if int(fav_id) > 0 and int(fav_type) > 0: user_fav.user = request.user user_fav.fav_id = int(fav_id) user_fav.fav_type = int(fav_type) user_fav.save() return HttpResponse('{"status": "success", "msg": "已收藏"}', content_type='application/json') else: return HttpResponse('{"status": "fail", "msg": "收藏出错"}', content_type='application/json')