Django+MySQL开发项目:内容管理系统cms(一)

Baker-Miller Pink被科学方法证实可以平静情绪并且抑制食欲的颜色,具有amazing的效果。基百里面说实验结果表明该颜色具有: "a marked effect on lowering the heart rate, pulse and respiration as compared to other colors." 就是这个色儿:

这篇内容比较长,我也是边做边写。打算烦的时候就回来看看👀 ,亲测一下到底有木有那么神奇~

一、环境搭建及项目准备

1,使用工具

目前python3只有一个版本,不存在多开发环境冲突的问题。
存在开发环境冲突的建议使用virtualenv来管理多个开发环境。

编辑器:Pycharm,python开发必备神器。
数据库管理工具: Navicat Premium, 数据库管理必备神器。

操作系统:OS X EI Capitan
python版本: 3.6.0
django版本: 1.11b1
数据库:pymysql 0.7.11

谷歌浏览器开发者工具

开发人员:具有较好的python基础和数据库基础、一定的前端基础、并对django又所了解。

相关文档:前端可以查阅 http://www.w3school.com.cn/index.html
对 django而言官方文档是最好的教程,没有之一。
可以参看这两个,https://www.djangoproject.com/start/http://djangobook.com/

英文不好可以对照着看django的中文文档:
推荐Tango中文版-> http://hackerxu.com/Twd/
自强学堂 -> http://www.ziqiangxuetang.com/django/django-intro.html
http://docs.30c.org/djangobook2/

2,创建一个项目和一个应用

教程:https://docs.djangoproject.com/en/1.11/intro/tutorial01/
这部分相对简单,按教程来就可以了。说几个Pycharm的福利。

  1. 在Pycharm里面可以填上application的名字,就可以自动创建app。


2. 有时需要在终端运行命令,比如:python manage.py runserver,Pycharm可以少打这么几个字 python3 manage.py ...

在里面只写命令就行runserver
现在打开localhost就可以看到一个最简单的web-server应用已经跑起来了。

二、数据库和Models

教程:https://docs.djangoproject.com/en/1.11/intro/tutorial02/

1,设置MySQL数据库

在项目工程文件的setting文件中修改:
在databases下将sqlite3配置注释,添加新的配置说明。

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'main',
        'USER': 'username',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

这个文件内还可以设置时区TIME_ZONE,就默认UTC就可以了。

还需要在INSTALLED_APPS字段里有添加app名称:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corpus',
]

激活MySQL:

makemigrations
migrate

为了方便查阅数据库,我们可以不使用Navicate,而是利用pycharm的Database:
大概步骤如下,不上图了。

  1. 下载驱动
  2. 填入数据库的名字,mysql的用户名和密码,进行连接。
  3. 成功后点击右下角的apply和OK。

然后嗒嗒,可以看到数据库里的表和内容了:

2,编写Models

不记得哪里读到,数据库是一个网站的灵魂。设计数据库之前先分析网站需求。

网站功能主要分为两个部分,梵文佛经展示(包括原文,各类注释等)和 用户信息管理。
1)经文段的展示:包括梵文原文,梵語非連聲形式,現代漢譯,注,護譯,什譯,读者评论(待定:读者修改、书签)。
2)注册用户信息:昵称,邮箱,密码,评论的文章(待定:修改的文章、添加书签)。
我们允许用户对一篇经文多次评论(待定:或者修改或者书签)。
多对多关系 -> manytomany
并且会有不止一篇经文,我们需要对经文分类,比如有的属于法华经,有的属于俱舍论。
一对多关系 -> foreignkey 谁多写在谁里面
所以,目前为止,我们需要创建用户和经文,经文片段,评论几个数据模型。

用户模型

(参考文献[1])[1]是这样做的:在django中内置有django.contrib.auth.models.User模块,这个模块字段有限,但是我们可以继承django.contrib.auth.models.AbstractUser这个类来扩充字段,之所以不自己写User模块,是因为内置的User模块使整个用户验证系统非常容易实现,详见django文档
一开始就是按照这个来做的用户模型,代码如下:

class NewUser(AbstractUser):    
    profile = models.CharField('profile', default='',max_length=256)
 
    def __str__(self):
        return self.username

在sqllite下没有问题。在mysql下一直报错,原因大概是每行不能超过65535。这个bug搞了好久啊。


不要忘了如果数据是utf8编码的话,要占一个字符算三。

查阅stackoverflow大都建议修改表结构,而不是修改数据库配置文件。
改后如下:

class NewUser(models.Model):
    user = models.OneToOneField(User)
    profile = models.CharField('profile', blank=True, null=True, max_length=255)

    def __str__(self):
        return self.user.username

    class Meta:
        verbose_name = '用戶'
        verbose_name_plural = verbose_name

经文模型

这部分需要注意charfield和textfield的使用。65535是不算textfield的,所以大段内容长内容最好用textfield避免超字数的问题。详见django文档-Model field reference

class Column(models.Model):
    name = models.CharField('column_name', max_length=100)  # 经文名称
    intro = models.TextField('introduction', max_length=2048, default='')  # 经文介绍
    ver = models.TextField('version', max_length=2048, default='')  # 版本信息
    comment_num = models.IntegerField(default=0)  # 評論數目

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '經文'
        verbose_name_plural = verbose_name
        ordering = ['name']

经文片段模型

class Article(models.Model):  # 经文段
    column = models.ForeignKey(Column, blank=True, null=True, verbose_name='belong to')
    level = models.IntegerField()  # 层次
    parent = models.IntegerField(blank=True, null=True)  # 父节点
    child = models.IntegerField(blank=True, null=True)  # 子节点
    chapter = models.IntegerField()  # 第几品
    section = models.IntegerField()  # 第几段
    sentence = models.IntegerField()  # 第几句 层次为1,句子为0

    code = models.CharField(max_length=64)  # 编码
    san = models.TextField(max_length=8192, blank=True, null=True)  ## 梵語
    san2 = models.TextField(max_length=8192, blank=True, null=True)  ## 梵语原型
    santag = models.TextField(max_length=8192, blank=True, null=True)  ## 注
    dir = models.TextField(max_length=8192, blank=True, null=True)  ## 现代汉译
    note = models.TextField(max_length=8192, blank=True, null=True)  ## 注
    d = models.TextField(max_length=8192, blank=True, null=True)  ##  一种译文
    k = models.TextField(max_length=8192, blank=True, null=True)  ##  另外一种译文
    dnote = models.TextField(max_length=8192, blank=True, null=True)  ##  翻译的说明
    knote = models.TextField(max_length=8192, blank=True, null=True)  ##  翻译的说明

    def __str__(self):
        return self.code

    class Meta:
        verbose_name = '經文片段'
        verbose_name_plural = verbose_name

评论模型

class Comment(models.Model):
    user = models.ForeignKey('NewUser', null=True)
    article = models.ForeignKey(Column, null=True)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True, editable=True)

    def __str__(self):
        return self.content

    class Meta:
        verbose_name = '評論'
        verbose_name_plural = verbose_name

修改model三步走

remember the three-step guide to making model changes:
Change your models (in models.py).
Run python manage.py makemigrations to create migrations for those changes
Run python manage.py migrate to apply those changes to the database.

看看数据库,表都建立好啦。

三、Admin

教程:https://docs.djangoproject.com/en/1.11/intro/tutorial02/#introducing-the-django-admin
代码就这两句:

createsuperuser
runserver

打开“127.0.0.1:8000/admin” 页面会进入登陆页面,输入刚才的用户名和密码,即可进入管理页面:

界面很友好,enjoy吧~

结尾的话

Django是个大而全的框架,其实并不适合小白。Models算是框架的核心和难点吧。感觉自己一直在趟坑。
但是!不能灰心,看看Baker-Miller Pink,平静一下心情,继续趟坑!

先立个flag,这个做完一定好好总结一下django。

参考文献

其他一些django实战项目:
[1] : http://d-roger.com/2016/06/27/hvae/
[2] : http://www.jianshu.com/p/3bf9fb2a7e31

posted @ 2017-04-04 19:18  丹阳~  阅读(22558)  评论(0编辑  收藏  举报