2016-05-11 13 views
-1

私は、ユーザーにオブジェクトを好き嫌い(ajaxを使って)させ、ページ訪問をカウントできるようにしたいと考えています。私は関数を書いてテンプレートを変更しましたが、どこかで間違いがあります。好き嫌いの結果は常に0です。間違いはviews.py関数内にあるようですが、私は間違っているかもしれません。私はDjangoの初心者です。今度は、機能に応じて、ユーザがオブジェクトを好きになるのが一度許されます。私はユーザーにそうしないようにしたいが、オブジェクトを嫌う能力を与える。しかし、まず最初に、少なくとも簡単に正しく動作させたいと思います。最初に、ユーザーページの訪問回数をカウントし、モデルDayのお気に入りを追加しようとしました。 ファイルを修正する方法を教えてください。Djangoプロジェクトに好き嫌いや訪問回数を追加する

これは、ビューの一部です:

@login_required 
def like_day(request): 

    day_id = None 

    if request.method == 'GET': 
     if 'day_id' in request.GET: 
      day_id = request.GET['day_id'] 

      likes = 0 
      if day_id: 
       day = Day.objects.get(id=int(day_id)) 
       if day: 
        likes = day.likes + 1 
        day.likes = likes 
        day.save() 
      return HttpResponse(likes) 

def track_url(request): 
person_id = None 
url = '/friends_plans/users/' 
if request.method == 'GET': 
    if 'person_id' in request.GET: 
     person_id = request.GET['person_id'] 
     try: 
      person = Person.objects.get(id=person_id) 
      person.views = person.views + 1 
      person.save() 
      url = person.url 
     except: 
      pass 

return redirect(url) 

はこれがあります(これはday.htmlでするlist.html(各ユーザーのページビュー数がなければならない)

{% extends 'friends_plans/base.html' %} 
{% load staticfiles %} 
    {% block title %} Users {% endblock %} 

    {% block content %} 
     <div id ="left"> 
      <div id="toptitle"> Friends' Plans members:</div> 
      <table class="table"> 
        <thead> 
         <tr> 
         <th>Photo</th> 
         <th>Name</th> 
         <th>Occupation</th> 
         <th>Days</th> 
         <th>Places</th> 
         <th>Wiews</th> 
         </tr> 
        </thead> 
        <tbody> 
        {% for person in users %} 
         <tr> 
         <td><span> <img class="small_cat" src={% static 'images/cat3.jpg' %} /> </span></td> 
         <td><a href="{% url 'friends_plans:user' person.pk %}">{{ person.username|upper }}</a></span></td> 
         <td><span>Student at {{ person.place_of_work_or_study}}</span></td> 
         <td>{{person.day_set.all.count}}</td> 
         <td>{{person.wish_list_set.all.count}}</td> 
         <td>{{person.wish_list.comment_to_wish_list_set.all.count}}</td> 
         <td>{% if person.views >= 0 %} 
           {{person.views}} views 
           {% elif person.views == 1 %} 
           {{person.views}} view 
          {% endif %} 
         </td> 
         </tr> 
        {% endfor %} 
        </tbody> 
        </table> 
      <div class="pagination"> 
       <div id="listing"> 
        <span class="step-links"> 
         {% if users.has_previous %} 
          <a href="?page={{ users.previous_page_number }}">previous</a> 
         {% endif %} 

         <span class="current"> 
          Page {{ users.number }} of {{ users.paginator.num_pages }}. 
         </span> 

         {% if users.has_next %} 
          <a href="?page={{ users.next_page_number }}">next</a> 
         {% endif %} 
        </span> 
       </div> 
      </div> 
     </div> 
    {% endblock %} 

ですそこのようなボタン)

<!DOCTYPE html> 
{% load staticfiles %} 

<html > 
<head> 
    <title> {{person.username}} </title> 
    <meta charset ="utf -8" /> 
    <link rel="stylesheet" href="{% static 'css/style_day.css' %}"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"> </script> 
    <script src="{% static 'js/friends_plans-jquery.js' %}"></script> 
    <script src="{% static 'js/friends_plans-ajax.js' %}"></script> 
</head> 
<body> 
    <div id ="container"> 
     <div id ="header"> 
      <ul id ="menu"> 
       <span><a href ="" >Friends' Plans</a></span> 
       <span><a href ="{% url 'friends_plans:user' request.user.pk %}" >My Page</a></span> 
       <span><a href ="{% url 'friends_plans:listing' %}" >Users</a></span> 
       <span><a id="helpbutton" href ="" >HELP</a></span> 
      </ul> 
     </div> 
     <div id ="left"> 
      <div id="border"> 
       <div><a class="button" href="{% url 'friends_plans:user' person.pk %}">{{person.username}}</a></div> 
       <img class="cat" src={% static 'images/cat5.jpg' %} /> 
      </div> 
      <div id="info"> 
       <div class ="name"> {{person.email}} </div> 
       <div class ="name"> {{person.phone_number}} </div> 
       <div class ="name"> Student of {{person.place_of_work_or_study}} </div> 
      </div> 
      <div id="empty"> </div> 

     </div> 
     <div id ="right"> 
      <div class="sep"> 
       <div class="title"> {{person}}'s plans for {{day}}: </div> 
       <div class="value"> Status: {{day.level_of_business}} </div> 
       {% for event in day.event_set.all %} 
       <div class="title1"> <a class="button" href ="">Business: {{event.business}}</a></div> 
       <div class="title1"> Type: {{event.type}}</div> 
       <div class="title1"> Period of time: {{event.start_time}}-{{event.end_time}}</div> <br /> 
       {% endfor %} 
      </div> 
      <p> 
       <strong id="like_count">{{ day.likes }}</strong> users like this day 
       {% if user.is_authenticated %} 
       <button id="likes" data-catid="{{day.id}}" class="btn btn-primary" type="button"> 
        <span class="glyphicon glyphicon-thumbs-up"></span> 
        Like 
       </button> 
       {% endif %} 
      </p> 
      <div> 
      {% if person.id == request.user.id %} 
       <a href="{% url 'friends_plans:add_event' person.pk day.pk %}">Add event</a> 
      {% endif %} 
      </div> 
     </div> 
     <div id ="footer"> Copyright </div> 
    </div> 
</body> 
</html> 

そして、これはAJAXファイル:

$('#likes').click(functin()){ 
var catid; 
catid = $(this).attr("data-catid"); 
$.get('/friends_plans/like_day/', {day_id: catid}, function(data){ 
    $('#like_count').html(data); 
    $('#likes').hide(); 
}); 
}); 

そして、これらの、人の私のモデルです:

class Person (AbstractUser): 
phone_number = models.CharField(max_length=30) 
place_of_work_or_study = models.CharField(max_length=100) 
img = models.ImageField(upload_to='photos/', null=True, blank=True) 
url = models.URLField(null=True, blank=True) 
views = models.IntegerField(default=0) 
class Meta: 
    verbose_name = 'Person' 
    verbose_name_plural = 'Users' 
def __unicode__(self): 
    return self.username 

そして日:

class Day(models.Model): 
person = models.ManyToManyField(Person) 
date = models.DateField() 
url = models.URLField(null=True, blank=True) 
views = models.IntegerField(default=0) 
likes = models.IntegerField(default=0) 
levels = (
    ('busy', 'busy'), 
    ('has_suggestions', 'has_suggestions'), 
    ('waiting_for_suggestions', 'waiting_for_suggestions') 
) 
level_of_business = models.CharField(choices=levels, max_length=40, default='waiting_for_suggestions') 
def __unicode__(self): 
    return unicode(self.date) 

答えて

0

あなたのAJAXコードの構文が正しくありません。また、あなたがは、サーバー上のデータを操作するためにGETを使用してはならないこと

$('#likes').click(function(){ 
    var catid; 
    catid = $(this).attr("data-catid"); 
    $.get('/friends_plans/like_day/', {day_id: catid}, function(data){ 
     $('#like_count').html(data); 
     $('#likes').hide(); 
    }); 
}); 

注意してくださいする必要があります。これは、CSRF attacksによって悪用される可能性があります。代わりにPOSTを使用してください。
POSTを使用する場合は、テンプレートにcsrf-tokenを生成し、X-HeaderまたはCookieの内部でリクエストと共に送信することを忘れないようにしてください。

+0

ありがとうございました!しかし、それは助けにはなりませんでした。私は関数に間違いがあると思う。カウントページの訪問にも同じ問題があるので、この場合はAJAXを使用しない。 –

0

問題の解決策は、AJAXリクエストに$(document).ready(function(){})を追加することでした。

関連する問題