Skip to content

Commit c9d1d02

Browse files
author
yangxueguang
committed
refactoring...
1 parent b21866d commit c9d1d02

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+3519
-23386
lines changed

blog/context_processors.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from django.db.models.aggregates import Count
2+
from .models import Category, Article
3+
4+
5+
def sidebar(request):
6+
category_list = Category.objects.filter(article__status='p').annotate(num_articles=Count('article')).filter(
7+
num_articles__gt=0)
8+
recent_articles = Article.objects.filter(status='p')[:5]
9+
10+
return {
11+
'category_list': category_list,
12+
'recent_articles': recent_articles,
13+
}

blog/forms.py

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,8 @@
11
from django import forms
2-
from .models import Article, BlogComment
2+
from .models import Article, ArticleComment
33

44

5-
class BlogCommentForm(forms.ModelForm):
5+
class ArticleCommentForm(forms.ModelForm):
66
class Meta:
7-
model = BlogComment
7+
model = ArticleComment
88
fields = ['user_name', 'user_email', 'body']
9-
widgets = {
10-
# <input type="text" class="form-control" placeholder="Username" aria-describedby="sizing-addon1">
11-
'user_name': forms.TextInput(attrs={
12-
'class': 'form-control',
13-
'placeholder': "请输入昵称",
14-
'aria-describedby': "sizing-addon1",
15-
}),
16-
'user_email': forms.TextInput(attrs={
17-
'class': 'form-control',
18-
'placeholder': "请输入邮箱",
19-
'aria-describedby': "sizing-addon1",
20-
}),
21-
'body': forms.Textarea(attrs={'placeholder': '我来评两句~'}),
22-
}

blog/migrations/0001_initial.py

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# -*- coding: utf-8 -*-
2-
# Generated by Django 1.9.6 on 2016-05-26 10:58
2+
# Generated by Django 1.9.6 on 2016-08-04 06:53
33
from __future__ import unicode_literals
44

5+
from django.conf import settings
56
from django.db import migrations, models
67
import django.db.models.deletion
78

@@ -11,39 +12,64 @@ class Migration(migrations.Migration):
1112
initial = True
1213

1314
dependencies = [
15+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
1416
]
1517

1618
operations = [
1719
migrations.CreateModel(
1820
name='Article',
1921
fields=[
2022
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21-
('title', models.CharField(max_length=70, verbose_name='标题')),
23+
('title', models.CharField(max_length=200, verbose_name='标题')),
2224
('body', models.TextField(verbose_name='正文')),
2325
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
24-
('last_modified_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
25-
('status', models.CharField(choices=[('d', 'Draft'), ('p', 'Published')], max_length=1, verbose_name='文章状态')),
26-
('abstract', models.CharField(blank=True, help_text='可选,如若为空将摘取正文的前54个字符', max_length=54, null=True, verbose_name='摘要')),
26+
('last_mod_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
27+
('status', models.CharField(choices=[('d', '草稿'), ('p', '发表')], max_length=1, verbose_name='文章状态')),
28+
('abstract', models.CharField(blank=True, help_text='可选,若为空将摘取正文的前54个字符。', max_length=200, verbose_name='摘要')),
2729
('views', models.PositiveIntegerField(default=0, verbose_name='浏览量')),
28-
('likes', models.PositiveIntegerField(default=0, verbose_name='点赞数')),
29-
('topped', models.BooleanField(default=False, verbose_name='置顶')),
30+
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='作者')),
3031
],
3132
options={
32-
'ordering': ['-last_modified_time'],
33+
'ordering': ['-created_time'],
3334
},
3435
),
36+
migrations.CreateModel(
37+
name='ArticleComment',
38+
fields=[
39+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
40+
('user_name', models.CharField(max_length=100, verbose_name='名字')),
41+
('user_email', models.EmailField(max_length=255, verbose_name='邮箱')),
42+
('body', models.TextField(verbose_name='评论内容')),
43+
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='评论发表时间')),
44+
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='blog.Article', verbose_name='评论所属文章')),
45+
],
46+
),
3547
migrations.CreateModel(
3648
name='Category',
3749
fields=[
3850
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
39-
('name', models.CharField(max_length=20, verbose_name='类名')),
51+
('name', models.CharField(max_length=30, verbose_name='分类名')),
52+
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
53+
('last_mod_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
54+
],
55+
),
56+
migrations.CreateModel(
57+
name='Tag',
58+
fields=[
59+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
60+
('name', models.CharField(max_length=30, verbose_name='标签名')),
4061
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
41-
('last_modified_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
62+
('last_mod_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
4263
],
4364
),
4465
migrations.AddField(
4566
model_name='article',
4667
name='category',
47-
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='blog.Category', verbose_name='分类'),
68+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.Category', verbose_name='分类'),
69+
),
70+
migrations.AddField(
71+
model_name='article',
72+
name='tags',
73+
field=models.ManyToManyField(blank=True, to='blog.Tag', verbose_name='标签集合'),
4874
),
4975
]

blog/migrations/0002_auto_20160622_1848.py

Lines changed: 0 additions & 55 deletions
This file was deleted.

blog/models.py

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,60 @@
11
from django.db import models
22
from django.core.urlresolvers import reverse
3-
from collections import defaultdict
4-
5-
import datetime
6-
7-
8-
# Create your models here.
9-
class ArticleManage(models.Manager):
10-
def archive(self):
11-
date_list = Article.objects.datetimes('created_time', 'month', order='DESC')
12-
date_dict = defaultdict(list)
13-
for d in date_list:
14-
date_dict[d.year].append(d.month)
15-
return sorted(date_dict.items(), reverse=True) # 模板不支持defaultdict
3+
from django.conf import settings
164

175

186
class Article(models.Model):
197
STATUS_CHOICES = (
20-
('d', 'Draft'),
21-
('p', 'Published'),
8+
('d', '草稿'),
9+
('p', '发表'),
2210
)
2311

24-
objects = ArticleManage()
25-
26-
title = models.CharField('标题', max_length=70)
12+
title = models.CharField('标题', max_length=200)
2713
body = models.TextField('正文')
28-
created_time = models.DateTimeField('创建时间')
29-
last_modified_time = models.DateTimeField('修改时间')
14+
created_time = models.DateTimeField('创建时间', auto_now_add=True)
15+
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
3016
status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES)
31-
abstract = models.CharField('摘要', max_length=54, blank=True, null=True, help_text="可选,如若为空将摘取正文的前54个字符")
17+
abstract = models.CharField('摘要', max_length=200, blank=True, help_text="可选,若为空将摘取正文的前54个字符。")
3218
views = models.PositiveIntegerField('浏览量', default=0)
33-
likes = models.PositiveIntegerField('点赞数', default=0)
34-
topped = models.BooleanField('置顶', default=False)
19+
author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE)
3520

36-
category = models.ForeignKey('Category', verbose_name='分类', null=True, on_delete=models.SET_NULL)
21+
category = models.ForeignKey('Category', verbose_name='分类', on_delete=models.CASCADE)
3722
tags = models.ManyToManyField('Tag', verbose_name='标签集合', blank=True)
3823

3924
def __str__(self):
4025
return self.title
4126

4227
class Meta:
43-
ordering = ['-last_modified_time']
28+
ordering = ['-created_time']
4429

45-
# 第五周:新增 get_absolute_url 方法
4630
def get_absolute_url(self):
4731
return reverse('blog:detail', kwargs={'article_id': self.pk})
4832

4933

5034
class Category(models.Model):
51-
name = models.CharField('类名', max_length=20)
35+
name = models.CharField('分类名', max_length=30)
5236
created_time = models.DateTimeField('创建时间', auto_now_add=True)
53-
last_modified_time = models.DateTimeField('修改时间', auto_now=True)
37+
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
5438

5539
def __str__(self):
5640
return self.name
5741

5842

5943
class Tag(models.Model):
60-
name = models.CharField('标签名', max_length=20)
44+
name = models.CharField('标签名', max_length=30)
6145
created_time = models.DateTimeField('创建时间', auto_now_add=True)
62-
last_modified_time = models.DateTimeField('修改时间', auto_now=True)
46+
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
6347

6448
def __str__(self):
6549
return self.name
6650

6751

68-
# # 第五周:新增评论
69-
class BlogComment(models.Model):
70-
user_name = models.CharField('评论者名字', max_length=100)
71-
user_email = models.EmailField('评论者邮箱', max_length=255)
52+
class ArticleComment(models.Model):
53+
user_name = models.CharField('名字', max_length=100)
54+
user_email = models.EmailField('邮箱', max_length=255)
7255
body = models.TextField('评论内容')
7356
created_time = models.DateTimeField('评论发表时间', auto_now_add=True)
74-
article = models.ForeignKey('Article', verbose_name='评论所属文章', on_delete=models.CASCADE)
57+
article = models.ForeignKey('Article', verbose_name='评论所属文章', related_name='comments', on_delete=models.CASCADE)
7558

7659
def __str__(self):
7760
return self.body[:20]

blog/static/blog/css/bootstrap.min.css

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

0 commit comments

Comments
 (0)