记录第一个django项目过程,过程难得顺利,参考链接: https://code.ziqiangxuetang.com/django/django-cms-develop.html.
环境
python3.7.4(基础python环境安装此处不赘述)
django2.7.7
demo操作
1.新建项目路径
2.cd 项目路径
3.创建项目 minicms 和 应用 news
# 创建项目 minicms 和 应用 news
django-admin.py startproject minicms
cd minicms
python manage.py startapp news
此时会在指定目录下生成项目工程
4.添加 news 到 settings.py 中的 INSTALLED_APPS 中(文件路径:D:\django\minicms\minicms\settings.py)
5.规划 news 中的栏目和每篇文章相关的字段,修改models.py(文件路径:D:\django\minicms\news\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('栏目名称', max_length=256)
slug = models.CharField('栏目网址', max_length=256, db_index=True)
intro = models.TextField('栏目简介', 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(Column, verbose_name='归属栏目')
title = models.CharField('标题', max_length=256)
slug = models.CharField('网址', max_length=256, db_index=True)
author = models.ForeignKey('auth.User', blank=True, null=True, verbose_name='作者')
content = models.TextField('内容', default='', blank=True)
published = models.BooleanField('正式发布', default=True)
def __str__(self):
return self.title
class Meta:
verbose_name = '教程'
verbose_name_plural = '教程'
6.创建数据库
python manage.py makemigrations news
python manage.py migrate
7.创建一个脚本,导入一些数据到数据库中
新建文件create_demo_records.py与manage.py在同一目录(D:\django\minicms\create_demo_records.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!")
8.运行脚本 导入数据
python create_demo_records.py
9. 完善后台的功能,在后台添加,编辑,删除数据
更改 news/admin.py(D:\django\minicms\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)
10.创建一个超级管理员(如果你没有后台帐户和密码的话)
python manage.py createsuperuser
11.启动服务:
python manage.py runserver 8002
12.访问
http://127.0.0.1:8002/admin/
输入用户名、密码
过程中遇到的问题
创建数据库时,报错:TypeError: init() missing 1 required positional argument: ‘on_delete’
解决方案:
修改文件,在外键值的后面加上 on_delete=models.CASCADE