1、 创建项目 minicms 和 应用 news
django-admin startproject minicms
cd
minicms
python manage.py startapp news
添加 news 到 settings.py 中的 INSTALLED_APPS 中。
2、 news 中的栏目和每篇文章相关的字段
栏目:名称,网址,简介等
文章:标题,作者,网址,内容等
我们假设一篇文章只有一个作者(文章和作者是多对一的关系),一篇文章可以属于多个栏目(栏目和文章是多对多的关系)
为了用到更多的情况,我们假设作者可以为空,栏目不能为空。
3、开写 models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Column(models.Model):
name = models.CharField(u'栏目名称', max_length=256)
slug = models.CharField(u'栏目网址', max_length=256, db_index=True)
intro = models.TextField(u'栏目简介', default='')
def __str__(self):
return self.name
class Meta:
verbose_name = '栏目'
verbose_name_plural = '栏目'
ordering = ['name'] # 按照哪个栏目排序
@python_2_unicode_compatible
class Article(models.Model):
column = models.ManyToManyField(u'Column', verbose_name='归属栏目')
title = models.CharField(u'标题', max_length=256)
slug = models.CharField(u'网址', max_length=256, db_index=True)
author = models.ForeignKey(u'auth.User', blank=True, null=True, verbose_name='作者',on_delete=models.CASCADE)
content = models.TextField(u'内容', default='', blank=True)
published = models.BooleanField(u'正式发布', default=True)
pub_date = models.DateTimeField(u'发表时间', auto_now_add=True, editable=True)
update_time = models.DateTimeField(u'更新时间', auto_now=True, null=True)
def __str__(self):
return self.title
class Meta:
verbose_name = '教程'
verbose_name_plural = '教程'
4、创建数据库
python manage.py makemigrations news
python manage.py migrate
5、 create_demo_records.py (和 manage.py 放在一块,同一个文件夹下)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2015-07-28 20:38:38
# @Author : Weizhong Tu (mail@tuweizhong.com)
# @Link : http://www.tuweizhong.com
'''
create some records for demo database
'''
from minicms.wsgi import *
from news.models import Column, Article
def main():
columns_urls = [
('体育新闻', 'sports'),
('社会新闻', 'society'),
('科技新闻', 'tech'),
]
for column_name, url in columns_urls:
c = Column.objects.get_or_create(name=column_name, slug=url)[0]
# 创建 10 篇新闻
for i in range(1, 11):
article = Article.objects.get_or_create(
title='{}_{}'.format(column_name, i),
slug='article_{}'.format(i),
content='新闻详细内容: {} {}'.format(column_name, i)
)[0]
article.column.add(c)
if __name__ == '__main__':
main()
print("Done!")
6、运行脚本 导入数据:
python create_demo_records.py
7、完善后台的功能,在后台添加,编辑,删除数据
更改 news/admin.py
from django.contrib import admin
from .models import Column, Article
class ColumnAdmin(admin.ModelAdmin):
list_display = ('name', 'slug', 'intro',)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'pub_date', 'update_time')
admin.site.register(Column, ColumnAdmin)
admin.site.register(Article, ArticleAdmin)
8、创建一个超级管理员
python manage.py createsuperuser
9、打开开发服务器,访问后台网址
python manage.py runserver
还可以指定端口 python manage.py runserver 8002
也可以监视所有本机IP, python manage.py runserver 0.0.0.0:8001
10、后台页面
一个简单的后台管理就建好了。
参考:自强学堂Django 教程