Skip to content

Commit df5662a

Browse files
committed
优化api
1 parent c19f871 commit df5662a

12 files changed

+332
-20
lines changed

.idea/MicroBlog.iml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/dataSources.ids

Lines changed: 235 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/dataSources.xml

Lines changed: 32 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api_1_0/serializers.py

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,52 @@
33
from main.models import UserProfile, Follows, Post, Comment
44

55

6-
class UserSerializer(serializers.ModelSerializer):
7-
username = serializers.CharField(source='user.username')
6+
class PostSerializer(serializers.HyperlinkedModelSerializer):
7+
author = serializers.HyperlinkedRelatedField(
8+
view_name='userprofile-detail',
9+
read_only=True,
10+
)
11+
comments = serializers.HyperlinkedRelatedField(
12+
view_name='comment-detail',
13+
read_only=True,
14+
many=True,
15+
)
16+
comment_count = serializers.IntegerField(
17+
source='comments.count',
18+
read_only=True,
19+
)
820

921
class Meta:
10-
model = UserProfile
11-
fields = ('url', 'username')
22+
model = Post
23+
fields = ('url', 'body', 'timestamp', 'author', 'comments', 'comment_count')
1224

1325

14-
class PostSerializer(serializers.ModelSerializer):
15-
author = serializers.URLField(source='author.username')
26+
class CommentSerializer(serializers.HyperlinkedModelSerializer):
27+
post = serializers.HyperlinkedRelatedField(
28+
view_name='post-detail',
29+
read_only=True,
30+
)
31+
author = serializers.HyperlinkedRelatedField(
32+
view_name='userprofile-detail',
33+
read_only=True,
34+
)
1635

1736
class Meta:
18-
model = Post
19-
fields = ('url', 'body', 'author', 'timestamp')
37+
model = Comment
38+
fields = ('url', 'post', 'body', 'timestamp', 'author')
39+
40+
41+
class UserSerializer(serializers.HyperlinkedModelSerializer):
42+
username = serializers.CharField(
43+
source='user.username',
44+
)
45+
member_since = serializers.CharField(
46+
source='user.date_joined',
47+
)
48+
last_seen = serializers.CharField(
49+
source='user.last_login',
50+
)
51+
52+
class Meta:
53+
model = UserProfile
54+
fields = ('url', 'username', 'member_since', 'last_seen')

api_1_0/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
router = routers.DefaultRouter()
66
router.register(r'users', views.UserViewSet)
77
router.register(r'posts', views.PostViewSet)
8+
router.register(r'comments', views.CommentViewSet)
89

910
urlpatterns = patterns(
1011
'',

api_1_0/views.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.shortcuts import render
2-
from main.models import UserProfile, Post
2+
from main.models import UserProfile, Post, Comment
33
from rest_framework import viewsets
4-
from serializers import UserSerializer, PostSerializer
4+
from serializers import UserSerializer, PostSerializer, CommentSerializer
55

66

77
class UserViewSet(viewsets.ModelViewSet):
@@ -11,4 +11,9 @@ class UserViewSet(viewsets.ModelViewSet):
1111

1212
class PostViewSet(viewsets.ModelViewSet):
1313
queryset = Post.objects.all()
14-
serializer_class = PostSerializer
14+
serializer_class = PostSerializer
15+
16+
17+
class CommentViewSet(viewsets.ModelViewSet):
18+
queryset = Comment.objects.all()
19+
serializer_class = CommentSerializer

db.sqlite3

4 KB
Binary file not shown.

main/admin.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22
from models import UserProfile, Post, Follows, Comment
33

44
admin.site.register(UserProfile)
5-
admin.site.register(Follows)
5+
admin.site.register(Follows)
6+
admin.site.register(Post)
7+
admin.site.register(Comment)

main/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ def followed_posts(self):
4242
class Post(models.Model):
4343
body = models.TextField()
4444
timestamp = models.DateTimeField(db_index=True, auto_now_add=True)
45-
author = models.ForeignKey(User, related_name='author')
45+
author = models.ForeignKey(User, related_name='posts')
4646

4747
def __unicode__(self):
48-
return self.author
48+
return self.author.username
4949

5050

5151
class Follows(models.Model):
@@ -64,7 +64,7 @@ class Comment(models.Model):
6464
body = models.TextField()
6565
timestamp = models.DateTimeField(db_index=True, auto_now_add=True)
6666
author = models.ForeignKey(User)
67-
post = models.ForeignKey(Post)
67+
post = models.ForeignKey(Post, related_name='comments')
6868

6969
def __unicode__(self):
7070
return self.author.username

main/views.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,9 @@ def post(request, postid):
8484
messages.success(request, '成功发表评论!')
8585
return HttpResponseRedirect('/post/%s' % postid)
8686
comments = []
87-
commentObj = post.comment_set.order_by('timestamp')
87+
commentObj = post.comments.order_by('timestamp')
8888
for i in commentObj:
8989
comments.append(i)
90-
post.comment_set.count()
9190
return render_to_response(
9291
'post.html',
9392
{'post': post, 'comments': comments},

templates/_posts.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
<li class="post">
66
<div class="post-content">
77
<div class="post-date">{{ post.timestamp|date:"Y-m-d H:i:s" }}</div>
8-
<div class="post-author"><a href="/user/{{ post.author_id.username }}">{{ post.author_id.username }}</a></div>
8+
<div class="post-author"><a href="/user/{{ post.author.username }}">{{ post.author.username }}</a></div>
99
<div class="post-body">{{ post.body }}</div>
1010
</div>
1111
<div class="post-footer">
1212
<a href="/post/{{ post.id }}" class="label label-default">
1313
<span>详情</span>
1414
</a>&nbsp;
1515
<a href="/post/{{ post.id }}" class="label label-primary">
16-
<span>评论({{ post.comment_set.count }})</span>
16+
<span>评论({{ post.comments.count }})</span>
1717
</a>
1818
</div>
1919
</li>

0 commit comments

Comments
 (0)