Ajax를 사용하여 Django에서 Like 버튼을 만드는 방법

모하메드 솔리 만

Django의 like button을 ajax에 연결하는 방법과 버튼이 좋아요 수 +1을 누르고 다시 누르면 좋아요 수 -1

이것은 비디오 모델의 내 모델입니다.

class Video(models.Model):
    author = models.ForeignKey(Account, on_delete=models.CASCADE)
    video = models.FileField(upload_to='post-videos', validators=[validate_file_extension])
    title = models.CharField(max_length=100)
    description = models.TextField(null=True, blank=True)
    created_date = models.DateTimeField(auto_now_add=True)
    likes = models.ManyToManyField(Account, blank=True, related_name='likes', default=None)

내 견해

class AddLike(LoginRequiredMixin, View):
    def post(self, request, pk, *args, **kwargs):
        video = Video.objects.get(pk=pk)

        is_dislike = False


        for dislike in video.dislikes.all():
            if dislike == request.user:
                is_dislike = True
                break

        if is_dislike:
            video.dislikes.remove(request.user)

        is_like = False

        for like in video.likes.all():
            if like == request.user:
                is_like = True
                break

        if not is_like:
            video.likes.add(request.user)

        if is_like:
            video.likes.remove(request.user)

        next = request.POST.get('next', '/')
        return HttpResponseRedirect(next)

내 템플릿 html

  <form method="POST" action="{% url 'video:like' video.pk %}" id="my-like-form">
     {% csrf_token %}
     <input type="hidden" class="likin" name="next" value="{{ request.path }}">
     <button class="remove-default-btn" type="submit" id="openPopup" class="remove-default-btn like-btn{{ request.path }}" style="border: none; ">
         <i class="fa fa-thumbs-up" aria-hidden="true"><span class="">{{ video.likes.all.count }}</span></i>
     </button>
 </form>
NKSM

당신은 사용할 수 있습니다 JsonResponse( 장고 문서를 )하고 생성 simple view( 장고 문서를 ).

나는 그것이 모델 과 관련된 필드 라고 가정하고 likes있습니다 .many2manyUser

그런 다음 다음 코드를 사용할 수 있습니다.

views.py :

from django.http import JsonResponse

def add_remove_like(request, pk):
    data = {}
    video = Video.objects.get(pk=pk)

    if request.method == "POST":
        user = request.user
        if video.likes.filter(id=user.id).exists():
            liked = False
            video.likes.remove(user)
        else:
            video.likes.add(user)
            liked = True


    data["count"] = video.likes.count()
    data["liked"] = liked
    return JsonResponse(data) 

.html :

$("#my-like-form").submit(function(e){
    e.preventDefault(); 

    var form = $(this);
    let url = form.attr("action");

    $.ajax({
        type: "POST",
        url: url,
        data: form.serialize(),
        dataType: "json",
        success: function(response) {
            var btn = form.find("button[type='submit']");

            if (response.liked) {
                console.log('Hello');
                btn.css("color", "blue");
            } else {
                btn.css("color", "black");
            }
            btn.find("span").text(response.count)
        }
    })
})

urls.py :

from django.contrib.auth.decorators import login_required

path('account/video/<int:pk>/like', login_required(views.add_remove_like), name='add_remove_like'),

참고 :보기 이름을 다음으로 변경했습니다. add_remove_like

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Toplevel () Tkinter에서 캔버스를 사용하여 버튼을 만드는 방법

분류에서Dev

Angular에서 ui-sref를 사용하여 제출 버튼을 만드는 방법

분류에서Dev

Erlang을 사용하여 웹 서버를 만드는 방법

분류에서Dev

yii에서 jQuery를 사용하여 버튼을 비활성화하는 방법

분류에서Dev

iconElementRight를 사용하여 AppBar에 여러 버튼을 추가하는 방법

분류에서Dev

Multer를 사용하여 memoryStorage에서 ReadStream을 만드는 방법

분류에서Dev

onchange를 사용하여 jquery에서 autosum을 만드는 방법

분류에서Dev

C #에서 OR을 사용하여 둘 이상의 필드에 LIKE %를 사용하는 방법

분류에서Dev

Javascript를 사용하여 Shiny에서 액션 버튼을 숨기는 방법

분류에서Dev

SQL-like를 사용하여 Count의 T-SQL을 만드는 방법

분류에서Dev

jquery, ajax 및 codeigniter를 사용하여 버튼처럼 만드는 방법

분류에서Dev

Android Studio를 사용하여 두 개의 Android 버튼을 만드는 방법

분류에서Dev

Django에서 레코드를 삭제하기위한 삭제 버튼을 만드는 방법

분류에서Dev

제출 버튼을 사용하지 않고 jquery ajax 메서드를 사용하여 파일을 업로드하는 방법

분류에서Dev

버튼을 사용하여 React에서 카드를 슬라이드하는 방법은 무엇입니까?

분류에서Dev

Codeigniter에서 사용자를 만드는 작업 버튼을 만드는 방법은 무엇입니까?

분류에서Dev

Onclick을 사용하여 버튼 위치를 가져오고 Textview를 버튼 중앙에 표시하는 방법

분류에서Dev

LIKE / CONTAINS 쿼리를 사용하여 Realm Swift에서 double 값을 얻는 방법

분류에서Dev

PHP를 사용하여 데이터베이스 onclick 버튼에서 필드 값을 변경하는 방법

분류에서Dev

webdriverIO를 사용하여 그리드에서 특정 버튼을 검색하는 방법

분류에서Dev

안에있는 li 요소를 삭제하는 버튼을 만드는 방법

분류에서Dev

MVC에서 Ajax Helper로 토글 버튼을 만드는 방법

분류에서Dev

Django에서 버튼을 통해 레코드를 삭제하는 방법

분류에서Dev

Swift를 사용하여 공통 코드베이스를 켜고 끄는 여러 버튼을 만드는 방법

분류에서Dev

버튼을 사용하여 Fabric.js 캔버스에서 이미지를 제거하는 방법

분류에서Dev

버튼을 사용하여 JSON 데이터를 클립 보드에 복사하는 방법

분류에서Dev

이 코드를 사용하여 단안경 전자 책 리더에서 다음 및 이전 버튼을 만드는 방법은 무엇입니까?

분류에서Dev

ASP.net을 사용하여 Salesforce에서 새 리드를 만드는 방법

분류에서Dev

Kivy에서 버튼을 사용하여 다른 화면에서 라벨을 만드는 방법

Related 관련 기사

  1. 1

    Toplevel () Tkinter에서 캔버스를 사용하여 버튼을 만드는 방법

  2. 2

    Angular에서 ui-sref를 사용하여 제출 버튼을 만드는 방법

  3. 3

    Erlang을 사용하여 웹 서버를 만드는 방법

  4. 4

    yii에서 jQuery를 사용하여 버튼을 비활성화하는 방법

  5. 5

    iconElementRight를 사용하여 AppBar에 여러 버튼을 추가하는 방법

  6. 6

    Multer를 사용하여 memoryStorage에서 ReadStream을 만드는 방법

  7. 7

    onchange를 사용하여 jquery에서 autosum을 만드는 방법

  8. 8

    C #에서 OR을 사용하여 둘 이상의 필드에 LIKE %를 사용하는 방법

  9. 9

    Javascript를 사용하여 Shiny에서 액션 버튼을 숨기는 방법

  10. 10

    SQL-like를 사용하여 Count의 T-SQL을 만드는 방법

  11. 11

    jquery, ajax 및 codeigniter를 사용하여 버튼처럼 만드는 방법

  12. 12

    Android Studio를 사용하여 두 개의 Android 버튼을 만드는 방법

  13. 13

    Django에서 레코드를 삭제하기위한 삭제 버튼을 만드는 방법

  14. 14

    제출 버튼을 사용하지 않고 jquery ajax 메서드를 사용하여 파일을 업로드하는 방법

  15. 15

    버튼을 사용하여 React에서 카드를 슬라이드하는 방법은 무엇입니까?

  16. 16

    Codeigniter에서 사용자를 만드는 작업 버튼을 만드는 방법은 무엇입니까?

  17. 17

    Onclick을 사용하여 버튼 위치를 가져오고 Textview를 버튼 중앙에 표시하는 방법

  18. 18

    LIKE / CONTAINS 쿼리를 사용하여 Realm Swift에서 double 값을 얻는 방법

  19. 19

    PHP를 사용하여 데이터베이스 onclick 버튼에서 필드 값을 변경하는 방법

  20. 20

    webdriverIO를 사용하여 그리드에서 특정 버튼을 검색하는 방법

  21. 21

    안에있는 li 요소를 삭제하는 버튼을 만드는 방법

  22. 22

    MVC에서 Ajax Helper로 토글 버튼을 만드는 방법

  23. 23

    Django에서 버튼을 통해 레코드를 삭제하는 방법

  24. 24

    Swift를 사용하여 공통 코드베이스를 켜고 끄는 여러 버튼을 만드는 방법

  25. 25

    버튼을 사용하여 Fabric.js 캔버스에서 이미지를 제거하는 방법

  26. 26

    버튼을 사용하여 JSON 데이터를 클립 보드에 복사하는 방법

  27. 27

    이 코드를 사용하여 단안경 전자 책 리더에서 다음 및 이전 버튼을 만드는 방법은 무엇입니까?

  28. 28

    ASP.net을 사용하여 Salesforce에서 새 리드를 만드는 방법

  29. 29

    Kivy에서 버튼을 사용하여 다른 화면에서 라벨을 만드는 방법

뜨겁다태그

보관