Skip to content
Open

g #2

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions Pipfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
django = "*"

[requires]
python_version = "3.4"
36 changes: 36 additions & 0 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified db.sqlite3
Binary file not shown.
2 changes: 1 addition & 1 deletion manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
)
execute_from_command_line(sys.argv)
5 changes: 3 additions & 2 deletions share/admin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django.contrib import admin
from .models import Content, Tag

from .models import Content, Tag, User
# Register your models here.
admin.site.register(Content)
admin.site.register(Tag)
admin.site.register(Tag)
28 changes: 27 additions & 1 deletion share/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
# Generated by Django 2.0.13 on 2019-05-05 10:41
# Generated by Django 2.0.13 on 2019-05-05 17:38

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
Expand All @@ -23,13 +26,36 @@ class Migration(migrations.Migration):
('updated_at', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='Like',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
),
migrations.CreateModel(
name='Post',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('like_user_set', models.ManyToManyField(blank=True, related_name='like_user_set', through='share.Like', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Tag',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=140, unique=True)),
],
),
migrations.AddField(
model_name='like',
name='post',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='share.Post'),
),
migrations.AddField(
model_name='like',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='content',
name='tag_set',
Expand Down
18 changes: 16 additions & 2 deletions share/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django.db import models
from django import forms
from django.contrib.auth.models import User
from django.conf import settings

# Create your models here.
class Content(models.Model):
Expand All @@ -16,4 +17,17 @@ def __str__(self):
return self.title

class Tag(models.Model):
name = models.CharField(max_length=140, unique=True)
name = models.CharField(max_length=140, unique=True)


class Post(models.Model):
like_user_set = models.ManyToManyField(User, blank=True, related_name='like_user_set', through='Like')

@property
def like_count(self):
return self.like_user_set.count()


class Like(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
43 changes: 41 additions & 2 deletions share/templates/board.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,47 @@ <h1>title</h1>
</div>
<!-- 좋아요/버튼 -->
<div class="like">
<button></button>
<button></button>
<!--<button></button>-->
<!--<button></button>-->
<li>
<input type="button" class="like" name="{{ post.id }}" value="Like">
<p id="count-{{ post.id }}">{{ post.like_count }}개</p>
<p id="like-user-{{post.id}}">
{% for like_user in post.like_user_set.all %}
{{ like_user.profile.nickname }}
{% endfor %}
</p>
</li>

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(".like").click(function(){
var pk = $(this).attr('name')
$.ajax({ // .like 버튼을 클릭하면 <새로고침> 없이 ajax로 서버와 통신하겠다.
type: "POST", // 데이터를 전송하는 방법을 지정
url: "{% url 'board.html' %}", // 통신할 url을 지정
data: {'pk': pk, 'csrfmiddlewaretoken': '{{ csrf_token }}'}, // 서버로 데이터 전송시 옵션
dataType: "json", // 서버측에서 전송한 데이터를 어떤 형식의 데이터로서 해석할 것인가를 지정, 없으면 알아서 판단
// 서버측에서 전송한 Response 데이터 형식 (json)
// {'likes_count': post.like_count, 'message': message }
success: function(response){ // 통신 성공시 - 동적으로 좋아요 갯수 변경, 유저 목록 변경
alert(response.message);
$("#count-"+pk).html(response.like_count+"개");
var users = $("#like-user-"+pk).text();
if(users.indexOf(response.nickname) != -1){
$("#like-user-"+pk).text(users.replace(response.nickname, ""));
}else{
$("#like-user-"+pk).text(response.nickname+users);
}
},
error: function(request, status, error){ // 통신 실패시 - 로그인 페이지 리다이렉트
alert("로그인이 필요합니다.")

},
});
})
</script>

<p class="like">좋아요</p>
</div>
<!-- 댓글 쓰기 -->
Expand Down
Empty file added share/templates/edit.html
Empty file.
1 change: 1 addition & 0 deletions share/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
urlpatterns = [
path('home/',views.home, name='home'),
path('<int:id>/', views.board, name='board'),
path('like.', views.post_like, name='post_like'),
]
41 changes: 22 additions & 19 deletions share/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def board(request, id):
return render(request, 'board.html',{'contents',contents})


# 기존 보드 및 추가보드에 쓰는거
# 추가보드에 쓰는거
def detail(request):
if request.method == "POST":
image = request.POST.get('image')
Expand Down Expand Up @@ -58,14 +58,14 @@ def update(request, id):

contents.save()
tags.save()
return redirect ('#', Content.pk, Tag.pk)
return redirect ('home.html', Content.pk, Tag.pk)


# 수정
def edit(request, id):
contents = Content.objects.get(pk=id)
tags = Tag.objects.get(pk=id)
return render(request, '#', {'contents', contents}, {'tags',tags})
return render(request, 'edit.html', {'contents', contents}, {'tags',tags})


#삭제
Expand All @@ -76,20 +76,23 @@ def delete(request, id):
contents.delete()
tags.delete()

# #좋아요 숫자세기
# @login_required
# @require_POST
# def like(request):
# if request.method == 'POST':
# user = request.user # 로그인한 유저를 가져온다.
# memo_id = request.POST.get('pk', None)
# memo = Memos.objects.get(pk = memo_id)
# if memo.likes.filter(id = user.id).exists():
# memo.likes.remove(user)
# message = 'You disliked this'
# else:
# memo.likes.add(user)
# message = 'You liked this'
# 좋아요
@login_required
@require_POST
def post_like(request):
pk = request.POST.get('pk', None)
post = get_object_or_404(Post, pk=pk)
post_like, post_like_created = post.like_set.get_or_create(user=request.user)

# context = {'likes_count' : memo.total_likes, 'message' : message}
# return HttpResponse(json.dumps(context), content_type='application/json')
if not post_like_created:
post_like.delete()
message = "좋아요 취소"
else:
message = "좋아요"

context = {'like_count': post.like_count,
'message': message,
'nickname': request.user.profile.nickname }

return HttpResponse(json.dumps(context), content_type="application/json")