栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我自己的喜欢按钮:Django + Ajax-如何?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我自己的喜欢按钮:Django + Ajax-如何?

我举一个例子。您只需从中学习并进行相应的更改。

myapp.models.py (简化的公司模型):

from django.db import modelsfrom django.contrib.auth.models import Userfrom django.template.defaultfilters import slugifyclass Company(models.Model):    name = models.CharField(max_length=255)    slug = models.SlugField()    likes = models.ManyToManyField(User, related_name='likes')    @property    def total_likes(self):        """        Likes for the company        :return: Integer: Likes for the company        """        return self.likes.count()    def save(self, *args, **kwargs):        self.slug = slugify(self.name)        super(Company, self).save(*args, **kwargs)

myapp.urls.py (视图的URL):

url(r'^like/$', 'myapp.views.like', name='like'),

myapp.views.py (查看):

from django.http import HttpResponsetry:    from django.utils import simplejson as jsonexcept importError:    import jsonfrom django.shortcuts import get_object_or_404from django.contrib.auth.decorators import login_requiredfrom django.views.decorators.http import require_POSTfrom myapp.models import Company@login_required@require_POSTdef like(request):    if request.method == 'POST':        user = request.user        slug = request.POST.get('slug', None)        company = get_object_or_404(Company, slug=slug)        if company.likes.filter(id=user.id).exists(): # user has already liked this company # remove like/user company.likes.remove(user) message = 'You disliked this'        else: # add a new like for a company company.likes.add(user) message = 'You liked this'    ctx = {'likes_count': company.total_likes, 'message': message}    # use mimetype instead of content_type if django < 5    return HttpResponse(json.dumps(ctx), content_type='application/json')

模板:

<input type="button" id="like" name="{{ company_slug }}" value="Like" /><script>$('#like').click(function(){      $.ajax({    type: "POST",    url: "{% url 'like' %}",    data: {'slug': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},    dataType: "json",    success: function(response) {alert(response.message);alert('Company likes count is now ' + response.likes_count);     },     error: function(rs, e) { alert(rs.responseText);     }          });     })</script>

在模板中使用url标签的一些说明:

  • 如果在这样的URL名称周围
    Django < 1.3
    使用
    url
    不带引号的标签
    {% url like %}
  • 如果是
    Django > 1.3 and < 1.5
    这样,您应该添加
    {% load url from future %} at top level of your template and enclosed your URL name with quotes as I have done in my answer
  • 如果是,
    Django >= 1.5
    则只需删除
    {% load url from future %}
    并用引号括起来的URL名称
    {% load url from future %}
    标记为已弃用,并将在以下位置删除
    Django 1.9


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号