zoukankan      html  css  js  c++  java
  • Django1.9.8 + Xadmin + Windows 快速搭建网站三

    1.ajax 实现收藏取消收藏功能

     1 #收藏功能ajax
     2 function add_fav(current_elem, fav_id, fav_type) {
     3         $.ajax({
     4             cache: false,
     5             type: "POST",
     6             url: "{% url 'org:addFav' %}",
     7             data: {'fav_id': fav_id, 'fav_type': fav_type},
     8             async: true,
     9             beforeSend: function (xhr, settings) {
    10                 xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");//此处只是将csrf_token的值传进去 不能使用{% csrf_token %}是生成一段html代码
    11             },
    12             success: function (data) {
    13                 if (data.status == 'fail') {
    14                     if (data.msg == '用户未登录') {
    15                         window.location.href = "{% url 'login' %}";
    16                     } else {
    17                         alert(data.msg)
    18                     }
    19 
    20                 } else if (data.status == 'success') {
    21                     current_elem.text(data.msg)
    22                 }
    23             },
    24         });
    25     }
    26 
    27     $('.collectionbtn').on('click', function () {
    28         add_fav($(this), {{ course_org.id }}, 2);
    29     });

      view

     1 class addFavView(View):
     2     def post(self, request):
     3         favId = int(request.POST.get('fav_id',0))
     4         favType = int(request.POST.get('fav_type',0))
     5 
     6         if not request.user.is_authenticated():
     7             #判断用户登录状态
     8             return HttpResponse('{"status":"fail", "msg":"用户未登录"}', content_type='application/json')
     9         exist_records = userFav.objects.filter(user=request.user, favId=favId, favType=favType)
    10         if exist_records:
    11             #如果存在该记录那么就是取消收藏
    12             exist_records.delete()
    13             return HttpResponse('{"status":"fail", "msg":"收藏"}', content_type='application/json')
    14         else:
    15             userfavourite = userFav()
    16             #添加收藏记录
    17             if int(favId) > 0 and int(favType) > 0:
    18                 userfavourite.user = request.user
    19                 userfavourite.favId = favId
    20                 userfavourite.favType = favType
    21                 userfavourite.save()
    22                 return HttpResponse('{"status":"success", "msg":"已收藏"}', content_type='application/json')
    23             else:
    24                 return HttpResponse('{"status":"fail", "msg":"收藏出错!"}', content_type='application/json')

      url

    1 url(r'^addFav/$',addFavView.as_view(),name="addFav"),

      html

    1  <div class="btn fr collectionbtn  notlogin
    2                  " data-favid="22" data-fav-type="1">
    3                         收藏
    4                     </div>

     2.添加评论信息

      view

     1 from django.http import HttpResponse
     2 class addCommentView(View):
     3     def post(self, request):
     4         #判断用户是否已经登录
     5         if not request.user.is_authenticated():
     6             return HttpResponse('{"status":"fail","msg":"用户未登录"}', content_type='application/json')
     7 
     8         #取到id 已经评论内容
     9         course_id = int(request.POST.get('course_id', 0))
    10         comments = request.POST.get('comments', '')
    11         #简单验证
    12         if course_id and comments:
    13             #将信息保存到数据库
    14             course_comments = userCourseComment()
    15             course_comments.course = courses.objects.get(id=course_id)
    16             course_comments.comments = comments
    17             course_comments.user = request.user
    18             course_comments.save()
    19             #返回成功信息
    20             return HttpResponse('{"status":"success","msg":"添加成功"}', content_type='application/json')
    21         else:
    22             #返回失败信息
    23             return HttpResponse('{"status":"fail","msg":"添加失败"}', content_type='application/json')

      url

    url(r'^addComment/$',addCommentView.as_view(), name="addCourseComment"),

      AJAX

    <script>
    //添加评论
    $('#js-pl-submit').on('click', function () {
        var comments = $("#js-pl-textarea").val()
        if (comments == "") {
            alert("评论不能为空")
            return
        }
        $.ajax({
            cache: false,
            type: "POST",
            url: "{% url 'course:addCourseComment' %}",
            data: {course_id: {{ course.id }}, comments: comments},
            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 = "{% url 'login' %}";
                  } else {
                      alert(data.msg)
                  }
                } else if (data.status == 'success') {
                    alert('评论成功!')
                    window.location.reload();//刷新当前页面.
                }
            },
            error: function(error) {
              alert('ajax 失败!')
            }
        });
    });
    </script>

     3.使用django自带登录验证功能

      1.在utils添加mixin_utils.py文件了(定义一个基础类)

    1 from django.contrib.auth.decorators import login_required
    2 from django.utils.decorators import method_decorator
    3 
    4 
    5 class LoginRequiredMixin(object):
    6     @method_decorator(login_required(login_url='/login/'))
    7     def dispatch(self, request, *args, **kwargs):
    8         return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)

      2.在view中继承该基础类(在url路由到类的方法的时候就会自动判断用户是否登录若未登录则自动跳转到配置的login_url 的路径下)

    from utils.mixin_utils import loginRequiredMixin
    class XXX(loginRequiredMixin View):
        def method(self, request):
            ..........
  • 相关阅读:
    [CareerCup][Google Interview] Merge Two BST
    [面试] 全排列(非递归)
    [CareerCup][Google Interview] 打印最长序列
    [CareerCup][Google Interview] 实现一个具有get_min的Queue
    [LeetCode] Count and Say
    [LeetCode] Decode Ways
    定期向企业内部员工介绍企业当前的业务状况及未来的发展方向
    基础数据的来源的统一
    项目管理之代码合并
    年初离职潮的思考
  • 原文地址:https://www.cnblogs.com/wlc297984368/p/7736189.html
Copyright © 2011-2022 走看看