python 小说cms_Django+MySQL开发项目:内容管理系统cms(一)

1060622-20170401150428758-603201961.gif

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

一、环境搭建及项目准备

1,使用工具

目前python3只有一个版本,不存在多开发环境冲突的问题。

存在开发环境冲突的建议使用virtualenv来管理多个开发环境。

编辑器:Pycharm,python开发必备神器。

数据库管理工具: Navicat Premium, 数据库管理必备神器。

操作系统:OS X EI Capitan

python版本: 3.6.0

django版本: 1.11b1

数据库:pymysql 0.7.11

谷歌浏览器开发者工具

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

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

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

1060622-20170405175525207-894616005.png

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

1060622-20170405180449738-1821464453.png

在里面只写命令就行runserver 。

现在打开localhost就可以看到一个最简单的web-server应用已经跑起来了。

1060622-20170405181820753-440825621.png

二、数据库和Models

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

1060622-20170405202510925-1765061071.png

为了方便查阅数据库,我们可以不使用Navicate,而是利用pycharm的Database:

大概步骤如下,不上图了。

下载驱动

填入数据库的名字,mysql的用户名和密码,进行连接。

成功后点击右下角的apply和OK。

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

1060622-20170405202247894-759249981.png

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搞了好久啊。

1060622-20170408192313550-1882403433.png

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

1060622-20170408202620769-32287073.png

查阅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.

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

1060622-20170408205520050-863480391.png

三、Admin

createsuperuser

runserver

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

1060622-20170410101327422-1241428712.png

界面很友好,enjoy吧~

结尾的话

Django是个大而全的框架,其实并不适合小白。Models算是框架的核心和难点吧。感觉自己一直在趟坑。

但是!不能灰心,看看Baker-Miller Pink,平静一下心情,继续趟坑!

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

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值