django 开发内容管理系统(已纠正)

    xiaoxiao2026-08-27  2

    django 1.7.11

    python 2.7.6

    ubantu 14.04

    请让unbantu支持中文

    2.2 安装 Django

    1 pip  install  Django==1.8.3

    2.3 创建项目 minicms 和 应用 news

    1 2 3 django-admin.py startproject minicms cd  minicms python manage.py startapp news

    添加 news 到 settings.py 中的 INSTALLED_APPS 中。

    2.4 规划 news 中的栏目和每篇文章相关的字段

    栏目:名称,网址,简介等

    文章:标题,作者,网址,内容等

    我们假设一篇文章只有一个作者(文章和作者是多对一的关系),一篇文章可以属于多个栏目(栏目和文章是多对多的关系)

    为了用到更多的情况,我们假设作者可以为空,栏目不能为空。

    开写 models.py

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 # -*- 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  =  '教程'

    2.5 创建数据库

    1 2 python manage.py makemigrations news python manage.py migrate

    2.6 创建完数据库后,用了一段时间,我们发现以前的文章的字段不合理

    比如我们想记录文章添加的日期,修改的日期,我们更改 models.py (不变动的大部分省去了,添加两个字段)

    1 2 3 4 5 6 7 8 ...省略 class  Article(models.Model):      ...原来的字段省去        pub_date  =  models.DateTimeField( '发表时间' , auto_now_add = True , editable = True )      update_time  =  models.DateTimeField( '更新时间' , auto_now = True , null = True )            ...省略

    这时候,我们对 models.py 进行了更改,这些字段数据库中还没有,我们要同步更改到数据库中去:

    1 python manage.py makemigrations news

    You are trying to add a non-nullable field 'pub_date' to article without a default; we can't do that (the database needs something to populate existing rows).

    Please select a fix:

     1) Provide a one-off default now (will be set on all existing rows)

     2) Quit, and let me add a default in models.py

    这段话的意思是 pub_date 字段没有默认值,而且非Null 那么 

    1) 指定一个一次性的值供更改数据库时使用。

    2) 停止当前操作,在 models.py 中给定默认值,然后再来migrate。

    我们选择第一个,输入 1

    Select an option: 1

    Please enter the default value now, as valid Python

    The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now()

    >>> timezone.now()

    Migrations for 'news':

      0002_auto_20150728_1232.py:

        - Add field pub_date to article

        - Add field update_time to article

    这样是生成了一个对表进行更改的 py 文件在 news/migrations 文件夹中,我们要执行更改

    1 python manage.py migrate 或 python manage.py migrate news

    2.7 创建一个脚本,导入一些数据到数据库中

    我们导入一些演示数据:

    栏目: [<Column: 体育新闻>, <Column: 社会新闻>, <Column: 科技新闻>]

    文章:[<Article: 体育新闻_1>, <Article: 体育新闻_2>, <Article: 体育新闻_3>, <Article: 体育新闻_4>, <Article: 体育新闻_5>, <Article: 体育新闻会>, <Article: 体育新闻_7>, <Article: 体育新闻_8>, <Article: 体育新闻_9>, <Article: 体育新闻_10>, <Article: 社会新闻_1>, <Article: 社新闻_2>,'...(remaining elements truncated)...']

    create_demo_records.py

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #!/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!" )

    假设这个文件被保存为 create_demo_records.py (和 manage.py 放在一块,同一个文件夹下)

    运行脚本 导入数据:

    1 python create_demo_records.py

    Done!

    2.8 完善后台的功能,在后台添加,编辑,删除数据

    更改 news/admin.py

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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)

    -----------------------------------------------------------------------------------------------------------------------------

    3.创建超级用户

    使用如下命令账号创建超级用户(如果使用了python manage.py syncdb会要求你创建一个超级用户, 该命令已经过时, 不再推荐使用)

    $ python manage.py createsuperuser Username (leave blank to use 'andrew_liu'): root Email address: Password: Password (again): Superuser created successfully.

    输入用户名, 邮箱, 密码就能够创建一个超级用户

    启动应用:

    $ python manage.py runserver localhost:9000

    现在可以在浏览器中输入localhost:9000/admin输入账户和密码进入后台管理, 如下:

    登陆进入

    但是你会发现并没有数据库信息的增加和删除, 现在我们在my_blog/article/admin.py中增加代码:

    from django.contrib import admin from article.models import Article # Register your models here. admin.site.register(Article)

    保存后, 再次刷新页面, localhost:9000/admin

    对于管理界面的外观的定制还有展示顺序的修改就不详细叙述了, 感兴趣的可以查看官方文档...

    4.使用第三方插件

    Django现在已经相对成熟, 已经有许多不错的可以使用的第三方插件可以使用, 这些插件各种各样, 现在我们使用一个第三方插件使后台管理界面更加美观, 目前大部分第三方插件可以在Django Packages 中查看,

    尝试使用django-admin-bootstrap美化后台管理界面

    安装

    $ sudo pip install bootstrap-admin

    配置

    然后在my_blog/my_blog/setting.py中修改INSTALLED_APPS

    INSTALLED_APPS = ( 'bootstrap_admin', #一定要放在`django.contrib.admin`前面 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'article', ) from django.conf import global_settings TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( 'django.core.context_processors.request', ) BOOTSTRAP_ADMIN_SIDEBAR_MENU = True

    保存后, 再次刷新页面, localhost:9000/admin

    界面是不是美腻了许多...

    ----------------------------------------------------------------------------------------------------------------------

    创建一个超级管理员(如果你没有后台帐户和密码的话)

    1 python manage.py createsuperuser

    这里我们打开开发服务器,访问后台网址,就可以看到:

    1 2 3 python manage.py runserver 还可以指定端口 python manage.py runserver 8002 也可以监视所有本机IP, python manage.py runserver 0.0.0.0:8001

    后台首页:

    后台栏目列表:

    后台文章列表:

    文章编辑页面:

    我们已经可以在后台进行更改和保存文章了,但是在编辑新闻的时候是不是觉得不爽,没有一个编辑器,我们下面来集成百度的Ueditor 到我们的系统:

    参考:http://www.ziqiangxuetang.com/django/django-cms-develop2.html

    https://www.shiyanlou.com/courses/487/labs/1622/document

    转载请注明原文地址: https://ju.6miu.com/read-1311624.html
    最新回复(0)