Django之歌-Post 1 Django和mysql
这个post是讲述django和mysql的故事,记录django常用命令以及mysql的python接口安装方法,环境为python3.6。
本文由作者金天原创,欢迎大家转载,不过请保留这段版权信息,多谢合作,如对本文有任何问题欢迎联系作者: jintianiloveu
Django大法
作为一位极客,不会点服务端还真不行,现在什么都离不开云啊,最近一直想建站,app接口也要用到云,本来打算用java,可是想了一下java即使使用框架访问数据库的效率还是有点低,而我呢,python玩得这么6,人生苦短啊为何不用python,反正都是事先一样的东西,我们做的也不是淘宝天猫,不需要考虑太多并发的东西,因此从某种意义上来讲,使用django是一个非常不错的选择。好了闲话不多说,这是一个django之歌的系列,既然是歌那就得分乐章,不分逻辑了。
Django命令
Django的安装就不多说了,安装好python,比如mac下brew install pyton3
就ok了,再次必须说明一下,我不太喜欢过时的东西,但是太新意味着踩坑,所以大家要做好踩坑的准备。Django安装好之后就可以直接用了,这里我收集一下django入门会用到的命令吧:
django-admin startproject deepx
python3 manage.py startapp article
python3 manage.py runserver
第一个命令是新建项目,第二个新建一个app,这里一个app其实就是项目中的一个功能模块,在我看来。 新建好的django一般是这样的工程目录:
.
├── article
│ ├── __init__.py
│ ├── __pycache__
│ │ └── __init__.cpython-36.pyc
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── lewisblog
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ └── settings.cpython-36.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
这里article就是app,lewisblog是整个工程的名字。
Django和mysql
UPDATE
这里增加一下,很多人说python3.6 安装mysql报错,解决方法是python3安装mysqlclient,网上很多方法都是过时,其他mysql的驱动并不适用python3,大家注意了啊!
可以说这是一对好拍档,很多人说django自带的sqlite就很不错啊,使得sqlite很方便不用安装不用配置,数据库文件就在工程的目录下,访问简单快捷,但是呢,sqlite并太轻了,我们还是使用mysql吧,毕竟比较流行,而且一些语句也是我们常用的语句,因此可以说mysql是非常合适不过的啦。在配置mysql的时候要在上面的settings.py
中设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'lewisblog',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
}
ok,在这里我们就设置好了数据库引擎以及数据库的名字和密码之类的东西,当然要想链接上数据库还得再mysql中新建则个数据库,数据库名字随便取罗。然后我们要干啥?对了这个settings,在你新建了一个app之后记得在这里登记一下,这里可以控制是哪些app有效。
Django和Model
很多人都说DJango是一个template,为什么这么说,思考一下,很多其他库做后台操作数据库都免不了要写一些数据库查询语句,增删改查都要连接数据库查询有没有然后增删改,但是这样做的效率其实是非常低的。很多不必要的操作都是在这里产生的。 而Django在这个地方就不同,它自己实现一个很强大的基类,就是model,这就是一个数据库模型,在model里面你可以找到数据库里面的各种数据类型,甚至在时间的操作上比数据库还简单。比如我们要写一个article的表,我们不用再数据库里面建了,建好了然后在写一个数据类,这在java里面你就得干这个脏活,但是在django里你就不需要重复无意义的事情了,你只需要建一个model,然后migrate一下,你就可以在mysql中看到你新建的表了。怎么样方便吧,哎写了这么多肚子有饿了。看来明天得好好吃一顿了。 贴一个model新建的类的代码:(在上面的app下面的models.py中)
from django.db import models
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=100, blank=True)
category = models.CharField(max_length=50, blank=True)
author = models.CharField(max_length=50, blank=True)
date_time = models.DateTimeField(auto_now_add=True)
content = models.TextField(blank=True, null=True)
def __unicode__(self):
return self.title
class Meta:
ordering = ['-date_time']
看看,所见即所得,你一旦实现了这个model之后你就不用管mysql了,以后插入数据什么的只需要实现这个类就行了,简直是方便的有点蛋疼啊! 新建了这个model之后,你要把这个应用到mysql需要下面两条啊语句:
python3 manage.py makemigrations
python3 manage,py migrate
第一条意思是我把model在本地生成一个migrations文件夹,里面要记录你对数据的操作,而第二个命令就是你对这个操作施加到数据库中。两条命令按顺序执行才能deploy到数据库里面,这时候打开mysql就可以看到我们的表了:
mysql> USE lewisblog;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SHOW TABLES;
+----------------------------+
| Tables_in_lewisblog |
+----------------------------+
| article_article |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
11 rows in set (0.00 sec)
看到没,我们的模型已经转换成表了。6不6!!!
Django的mysql shell
其实Django内置了一个shell,在这个shell里面你可以模拟mysql对数据库进行增删改查,但是呢,要进入这个shell还是得默默的进入,不要让任何人知道:
python3 manage.py shell
进入shell,这是一个神奇的地方,我们执行以下这个命令:
>>> from article.models import Article
>>> Article.objects.create(title = 'hello world.', category = 'django', author = 'Lewis Jin', content = 'Today I leared Django and it is very nice!')
<Article: Article object>
接着你甚至不用migrate就可以直接在mysql中查看到我们已经成功地添加了一条记录在数据库中!你就说6不6!!
mysql> mysql> SELECT * FROM article_article;
+----+--------------+----------+-----------+----------------------------+--------------------------------------------+
| id | title | category | author | date_time | content |
+----+--------------+----------+-----------+----------------------------+--------------------------------------------+
| 1 | hello world. | django | Lewis Jin | 2017-01-12 13:25:13.273888 | Today I leared Django and it is very nice! |
+----+--------------+----------+-----------+----------------------------+--------------------------------------------+
这是增,改和删也很简单:
>>> a = Article.objects.get(id=1)
>>> a.title
'hello world.'
>>> a.title = 'Hello World'
>>> a.title
'Hello World'
>>> a.delete()
本篇章结语
基本上看完这些就可以入门了,接下来我们更加深入的剖析django,我们要充分利用这个利器,来实现我们想要的web程序,让云变的触手可及!!