• Home
  • About
    • GlowingEdge photo

      GlowingEdge

      배움을 기록하는 공간, 게임하고 싶다.

    • Learn More
    • Email
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

Django Dstagram Project 5

20 Jun 2019

Reading time ~1 minute

책 ‘배프의 오지랖 파이썬 웹 프로그래밍’을 공부한 내용 정리 및 추가
완성된 홈페이지
완성된 소스코드

Instagram 카피서비스라면 댓글 기능은 빠질 수가 없을텐데, 댓글 기능은 JavaScript를 통한 제어를 많이 필요로 한다.
하지만 Disqus라는 상당히 편리한 댓글 서비스가 있어, 이를 활용해보려 한다.

Disqus Script 가입

Disqus(https://disqus.com)에 접속하여 회원가입 후, I want to install Disqus on my site탭으로 들어가 사이트의 이름을 설정한다.
그 다음 요금제를 선택하고, 플랫폼 선택의 경우 선택하지 않고 가장 밑의 I don't see my platform listed, install manually with Universal Code를 선택한다.
그 다음 설정들도 특별히 설정해줄 필요가 없다.

Disqus 앱 설치

Django에서 Disqus를 앱의 형태로 바로 사용할 수가 있다.

$pip install django-disqus

settings.py에는 disqis, django.contrib.sites 두 개의 앱을 추가하고, 다음 두 가지 설정도 추가해준다.
DISQUS_WEBSITE_SHORTNAME = ‘Disqus가입시 설정한 이름’
SITE_ID = 1 // Disqus에서 관리되는 사이트 번호

Detail페이지에 Disqus 추가

Detail페이지 하단에 댓글 기능을 추가한다.

// accounts/templates/registration/register.html
{% extends 'base.html' %}

{% block title %}- Registration{% endblock %}

{% block content %}
<div class="row">
        <div class="col-md-2"></div>
        <div class="col-md-8 panel panel-default">
            <div class="alert alert-info">Please enter your account informations.</div>
            <form action="" method="post">
                {{form.as_p}}
                {% csrf_token %}
                <input class="btn btn-primary" type="submit" value="Register">
            </form>
        </div>
        <div class="col-md-2"></div>
</div>
{% endblock %}

사이트 권한 관리

Django에서 제공하는 기능 중에, 사이트에서 로그인된 유저만 기능을 사용할 수 있도록 관리하는 기능이 있다.
데코레이터(Decorator)를 쓰는 방법과 믹스인(Mixin)을 쓰는 방법이 있다.
함수형 뷰의 경우에는 데코레이터를 쓰고,
클래스형 뷰의 경우에는 믹스인을 상속하면 된다.

# photo/views.py
...
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin


@login_required
def photo_list(request):
    photos = Photo.objects.all()
    return render(request, 'photo/list.html', {'photos': photos})

class PhotoUploadView(LoginRequiredMixin, CreateView):
...


pythondjangodstagramaws s3herokudisqus Share Tweet +1