Skip to content

Commit e3d8c18

Browse files
committed
01
1 parent 9e04b40 commit e3d8c18

Some content is hidden

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

88 files changed

+4799
-0
lines changed

blog/__init__.py

Whitespace-only changes.

blog/admin.py

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from django.contrib import admin
2+
from .models import Category,Post,Tag
3+
4+
class PostAdmin(admin.ModelAdmin):
5+
list_display = ['title','created_time','modified_time','category','author']
6+
7+
admin.site.register(Category)
8+
admin.site.register(Post,PostAdmin)
9+
admin.site.register(Tag)

blog/apps.py

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
4+
class BlogConfig(AppConfig):
5+
name = 'blog'

blog/feeds.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from django.contrib.syndication.views import Feed
2+
3+
from .models import Post
4+
5+
class AllPostRssFeed(Feed):
6+
title = 'Django'
7+
link = '/'
8+
description = 'Django Blog'
9+
10+
def items(self):
11+
return Post.objects.all()
12+
13+
def item_title(self, item):
14+
return '[%s] %s' %(item.category,item.title)
15+
16+
def item_description(self, item):
17+
return item.body
18+
19+

blog/migrations/0001_initial.py

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.6 on 2017-09-11 02:20
3+
from __future__ import unicode_literals
4+
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
import django.db.models.deletion
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
initial = True
13+
14+
dependencies = [
15+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
16+
]
17+
18+
operations = [
19+
migrations.CreateModel(
20+
name='Category',
21+
fields=[
22+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
23+
('name', models.CharField(max_length=64)),
24+
],
25+
),
26+
migrations.CreateModel(
27+
name='Post',
28+
fields=[
29+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
30+
('title', models.CharField(max_length=64)),
31+
('body', models.TextField()),
32+
('created_time', models.DateTimeField()),
33+
('modified_time', models.DateTimeField()),
34+
('excerpt', models.CharField(blank=True, max_length=256)),
35+
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
36+
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.Category')),
37+
],
38+
),
39+
migrations.CreateModel(
40+
name='Tag',
41+
fields=[
42+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
43+
('name', models.CharField(max_length=64)),
44+
],
45+
),
46+
migrations.AddField(
47+
model_name='post',
48+
name='tags',
49+
field=models.ManyToManyField(blank=True, to='blog.Tag'),
50+
),
51+
]
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.6 on 2017-09-12 07:51
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('blog', '0001_initial'),
12+
]
13+
14+
operations = [
15+
migrations.AlterModelOptions(
16+
name='post',
17+
options={'ordering': ['-created_time', '-modified_time']},
18+
),
19+
migrations.AddField(
20+
model_name='post',
21+
name='views',
22+
field=models.PositiveIntegerField(default=0),
23+
),
24+
]

blog/migrations/__init__.py

Whitespace-only changes.

blog/models.py

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
from django.db import models
2+
from django.urls import reverse
3+
# User是一个自带的模型类,里面是用户的字段
4+
from django.contrib.auth.models import User
5+
from markdown import Markdown
6+
from django.utils.html import strip_tags
7+
8+
class Category(models.Model):
9+
name = models.CharField(max_length=64)
10+
# annotate产生的隐藏属性:num_posts
11+
12+
def __str__(self):
13+
return self.name
14+
15+
class Tag(models.Model):
16+
name = models.CharField(max_length=64)
17+
def __str__(self):
18+
return self.name
19+
20+
class Post(models.Model):
21+
title = models.CharField(max_length=64)
22+
body = models.TextField()
23+
created_time = models.DateTimeField()
24+
modified_time = models.DateTimeField()
25+
# 摘要
26+
excerpt = models.CharField(max_length=256,blank=True)
27+
28+
# 关系
29+
category = models.ForeignKey(Category)
30+
tags = models.ManyToManyField(Tag,blank=True)
31+
32+
author = models.ForeignKey(User)
33+
34+
# 文章阅读量
35+
views = models.PositiveIntegerField(default=0)
36+
37+
def increase_views(self):
38+
self.views+=1
39+
self.save(update_fields=['views'])
40+
41+
# 看不到的属性:comment_set
42+
43+
class Meta:
44+
ordering = ['-created_time','-modified_time']
45+
46+
def get_absolute_url(self):
47+
#使用reverse函数,生成一个url,例如 post / 1
48+
return reverse('blog:detail',kwargs={'pk':self.pk}) #
49+
50+
def save(self,*args,**kwargs):
51+
if not self.excerpt:
52+
md = Markdown(extensions=[
53+
'markdown.extensions.extra',
54+
'markdown.extensions.codehilite',
55+
])
56+
self.excerpt = strip_tags(md.convert(self.body))[:32]
57+
super().save(*args,**kwargs)
58+
59+
def __str__(self):
60+
return self.title
61+
62+

blog/search_indexes.py

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from haystack import indexes
2+
3+
from .models import Post
4+
5+
class PostIndex(indexes.SearchIndex,indexes.Indexable):
6+
# 习惯写法,设置text字段,设置document=True,use_template=True
7+
text = indexes.CharField(document=True,use_template=True)
8+
9+
def get_model(self):
10+
return Post
11+
12+
def index_queryset(self, using=None):
13+
return self.get_model().objects.all()

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

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)