创建blog app.创建model

master
车亮亮 9 years ago
parent a0e6783dfd
commit d6d6fcd5b7

@ -0,0 +1,2 @@
import pymysql
pymysql.install_as_MySQLdb()

@ -37,6 +37,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog'
]
MIDDLEWARE = [
@ -76,8 +77,12 @@ WSGI_APPLICATION = 'DjangoBlog.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': 'djangoblog',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '192.168.21.130',
'PORT': 3306,
}
}
@ -104,9 +109,9 @@ AUTH_PASSWORD_VALIDATORS = [
# Internationalization
# https://docs.djangoproject.com/en/1.10/topics/i18n/
LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

@ -0,0 +1,5 @@
from django.apps import AppConfig
class BlogConfig(AppConfig):
name = 'blog'

@ -0,0 +1,77 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.2 on 2016-11-01 15:09
from __future__ import unicode_literals
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 = [
migrations.CreateModel(
name='Article',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200, verbose_name='标题')),
('body', models.TextField(verbose_name='正文')),
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('last_mod_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
('pub_time', models.DateTimeField(blank=True, help_text='不指定发布时间则视为草稿,可以指定未来时间,到时将自动发布。', null=True, verbose_name='发布时间')),
('status', models.CharField(choices=[('d', '草稿'), ('p', '发表')], max_length=1, verbose_name='文章状态')),
('summary', models.CharField(blank=True, help_text='可选若为空将摘取正文的前54个字符。', max_length=200, verbose_name='摘要')),
('views', models.PositiveIntegerField(default=0, verbose_name='浏览量')),
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='作者')),
],
options={
'ordering': ['-pub_time'],
'verbose_name': '文章',
'verbose_name_plural': '文章',
},
),
migrations.CreateModel(
name='Category',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=30, verbose_name='分类名')),
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('last_mod_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
],
options={
'ordering': ['name'],
'verbose_name': '分类',
'verbose_name_plural': '分类',
},
),
migrations.CreateModel(
name='Tag',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=30, verbose_name='标签名')),
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('last_mod_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
],
options={
'ordering': ['name'],
'verbose_name': '标签',
'verbose_name_plural': '标签',
},
),
migrations.AddField(
model_name='article',
name='category',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.Category', verbose_name='分类'),
),
migrations.AddField(
model_name='article',
name='tags',
field=models.ManyToManyField(blank=True, to='blog.Tag', verbose_name='标签集合'),
),
]

@ -0,0 +1,71 @@
from django.db import models
from django.core.urlresolvers import reverse
from django.conf import settings
class Article(models.Model):
STATUS_CHOICES = (
('d', '草稿'),
('p', '发表'),
)
title = models.CharField('标题', max_length=200)
body = models.TextField('正文')
created_time = models.DateTimeField('创建时间', auto_now_add=True)
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
pub_time = models.DateTimeField('发布时间', blank=True, null=True,
help_text="不指定发布时间则视为草稿,可以指定未来时间,到时将自动发布。")
status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES)
summary = models.CharField('摘要', max_length=200, blank=True, help_text="可选若为空将摘取正文的前54个字符。")
views = models.PositiveIntegerField('浏览量', default=0)
author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE)
category = models.ForeignKey('Category', verbose_name='分类', on_delete=models.CASCADE)
tags = models.ManyToManyField('Tag', verbose_name='标签集合', blank=True)
def __str__(self):
return self.title
class Meta:
ordering = ['-pub_time']
verbose_name = "文章"
verbose_name_plural = verbose_name
def get_absolute_url(self):
return reverse('blog:detail', kwargs={'article_id': self.pk})
def save(self, *args, **kwargs):
self.summary = self.summary or self.body[:120]
super().save(*args, **kwargs)
def viewed(self):
self.views += 1
self.save(update_fields=['views'])
class Category(models.Model):
name = models.CharField('分类名', max_length=30)
created_time = models.DateTimeField('创建时间', auto_now_add=True)
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
class Meta:
ordering = ['name']
verbose_name = "分类"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Tag(models.Model):
name = models.CharField('标签名', max_length=30)
created_time = models.DateTimeField('创建时间', auto_now_add=True)
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
def __str__(self):
return self.name
class Meta:
ordering = ['name']
verbose_name = "标签"
verbose_name_plural = verbose_name

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

@ -0,0 +1,26 @@
from django.shortcuts import render
# Create your views here.
from django.views.generic.list import ListView
from blog.models import Article, Category, Tag
import markdown2
class IndexView(ListView):
# template_name属性用于指定使用哪个模板进行渲染
template_name = 'blog/index.html'
# context_object_name属性用于给上下文变量取名在模板中使用该名字
context_object_name = 'article_list'
def get_queryset(self):
article_list = Article.objects.filter(status='p')
for article in article_list:
article.body = markdown2.markdown(article.body)
return article_list
def get_context_data(self, **kwargs):
# 增加额外的数据,这里返回一个文章分类,以字典的形式
kwargs['category_list'] = Category.objects.all().order_by('name')
return super(IndexView, self).get_context_data(**kwargs)

Binary file not shown.
Loading…
Cancel
Save