DJANGO模型及查询
MTV 开发模式
在钻研更多代码之前,让我们先花点时间考虑下 Django 数据驱动 Web 应用的总体设计。
为什么用缩写?
像 MVC 这样的明确定义模式的主要用于改善开发人员之间的沟通。 比起告诉同事,“让我们采用抽象的数据存取方式,然后单独划分一层来显示数据,并且在中间加上一个控制它的层”,一个通用的说法会让你收益,你只需要说:“我们在这里使用MVC模式吧。”。
Django 紧紧地遵循这种 MVC 模式,可以称得上是一种 MVC 框架。 以下是 Django 中 M、V 和 C 各自的含义:
M ,数据存取部分,由django数据库层处理。
V ,选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。
C ,根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适当的 Python 函数。

数据库配置
Mysql数据库需要安装mysqld-python:
yum install python-devel mysql-devel zlib-devel openssl-devel -y

1
2
3
4
5
6
7
8
9
10
vim settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', ###mysql
'NAME': 'db_name',
'USER':'username',
'HOST':'db_host',
'PASSWORD':'db_password',
}
}

编写Model

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Article(models.Model):
title = models.CharField(max_length=254,verbose_name=u'标题')
type_choices=(
(u'Linux运维',u'Linux运维'),
(u'Python编程',u'Python编程'),
)
type = models.CharField(choices=type_choices, max_length=128,verbose_name=u'分类')
category = models.ForeignKey('Category',verbose_name=u'标签')
summary = models.TextField(max_length=500)
author = models.ForeignKey('UserProfile')
content = models.TextField(max_length=100000)
head_img = models.ImageField(upload_to="static/imgs/upload")
publish_date =models.DateTimeField(auto_now_add=True,verbose_name=u'创建时间')
def __unicode__(self):
return self.title

执行thon manage.py migrate新增表
查询

进入python manage.py shell
查询全部文章

1
2
3
4
>>> from blog import models
>>> a=models.Article.objects.all()
>>> print a
<QuerySet [<Article: NGINX隐藏版本号>, <Article: MYSQL主从复制>, <Article: CentOS终端如何显示中文同时出现乱码怎么办?>, <Article: EXSI5.5安装vSphere>, <Article: PYTHON 和MYSQL交互>, <Article: JENKINS安装>, <Article: python-nmap端口扫描>, <Article: MONGODB索引优化案例>, <Article: SSH批量登录并执行命令(PYTHON实现)>, <Article: 集群与高可用之LVS介绍>, <Article: DJANGO登陆注销>]>

查询最新发表的前5篇文章

1
2
3
4
>>> from blog import models
>>> b = models.Article.objects.all().order_by('-publish_date')[0:5]
>>> print b
<QuerySet [<Article: DJANGO登陆注销>, <Article: 集群与高可用之LVS介绍>, <Article: SSH批量登录并执行命令(PYTHON实现)>, <Article: MONGODB索引优化案例>, <Article: python-nmap端口扫描>]>

查询带有MYSQL的文章

1
2
3
4
5
6
7
8
9
>>> c= models.Article.objects.filter(title__icontains='mysql')   ### icontains不区分大小写
>>> print c
<QuerySet [<Article: MYSQL主从复制>, <Article: PYTHON 和MYSQL交互>]>
>>> c= models.Article.objects.filter(title__contains='MYSQL')
>>> print c
<QuerySet [<Article: MYSQL主从复制>, <Article: PYTHON 和MYSQL交互>]>
>>> c= models.Article.objects.filter(title__contains='mysql')
>>> print c
<QuerySet []>

Comments

2017-02-14