Django,是用python语言写的开源web开发框架
采用MVT模式:
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html
1、环境准备
virtualenv devops -p python3
source /home/rocket/venv/bin/activate
pip install django==2.0
2、创建一个项目
django-admin startproject devops
devops/ -- manage.py // 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互 -- devops -- __init__.py //一个空文件,告诉Python该目录是一个Python包 -- settings.py //该Django项目的配置文件 -- urls.py //该Django项目的 URL 声明 -- wsgi.py //一个WSGI兼容的Web服务器的入口
3、指定ip与端口起动服务
python manage.py runserver 0.0.0.0:8000
4、创建一个app
python manage.py startapp app1
workorder/ ├── admin.py //文件跟网站的后台管理站点配置相关 ├── apps.py //文件用于配置当前子应用的相关信息 ├── __init__.py ├── migrations //目录用于存放数据库迁移历史文件 │ └── __init__.py ├── models.py //文件用户保存数据库模型类 ├── tests.py //文件用于开发测试用例,编写单元测试 └── views.py //文件用于编写Web应用视图
激活app
INSTALLED_APPS = ( …… 'users.apps.UsersConfig', )3、django配置
//配置数据库
DATAbaseS = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
//本地语言与时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
//将app放入apps目录内
import sys, os
base_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(base_DIR, 'apps'))
//配置访问控制
ALLOWED_HOSTS = ["*"]
4、ORM
django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
使用django进行数据库开发的步骤如下:
1、配置数据库连接信息
2、在models.py中定义模型类
3、迁移
4、通过类和对象完成数据增删改查操作
1、在settings.py配置数据库连接信息 2、使用MySQL数据库首先需要安装驱动程序 pip install PyMySQL 3、在Django的工程同名子目录的__init__.py文件中添加如下语句 from pymysql import install_as_MySQLdb install_as_MySQLdb()4.2 定义模型类
创建应用booktest,在models.py 文件中定义模型类
实例:
from django.db import models
#定义图书模型类BookInfo
class BookInfo(models.Model):
btitle = models.CharField(max_length=20, verbose_name='名称')
bpub_date = models.DateField(verbose_name='发布日期')
bread = models.IntegerField(default=0, verbose_name='阅读量')
bcomment = models.IntegerField(default=0, verbose_name='评论量')
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
class meta:
db_table = 'tb_books' # 指明数据库表名
verbose_name = '图书' # 在admin站点中显示的名称
verbose_name_plural = verbose_name # 显示的复数名称
def __str__(self):
"""定义每个数据对象的显示信息"""
return self.btitle
#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
GENDER_CHOICES = (
(0, 'female'),
(1, 'male')
)
hname = models.CharField(max_length=20, verbose_name='名称')
hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书') # 外键
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
class meta:
db_table = 'tb_heros'
verbose_name = '英雄'
verbose_name_plural = verbose_name
def __str__(self):
return self.hname
4.2.1 关于主键
django会为表创建自动增长的主键列,属性为id。每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。
4.2.2 字段类型 4.2.2 选项 4.2.3 迁移1)生成迁移文件
python manage.py makemigrations
2)同步到数据库中
python manage.py migrate
Django的manage工具提供了shell命令,帮助我们配置好当前工程的运行环境(如连接好数据库等),以便可以直接在终端中执行测试python语句
python manage.py shell
>>> hero = HeroInfo(
hname='孙悟空',
hgender=0,
hbook=book)
>>> hero.save()
>>> HeroInfo.objects.create(
hname='沙悟净',
hgender=0,
hbook=book
)
2、查询
4.3.1 查询
1、查询所有、查询数量
>>> BookInfo.objects.all()
>>> BookInfo.objects.count()
2、过滤查询
>>> BookInfo.objects.filter(id=1)
>>> BookInfo.objects.filter(btitle__contains='传')
3、比较查询
>>> BookInfo.objects.filter(id__gt=3)
gt 大于 (greater then)
gte 大于等于 (greater then equal)
lt 小于 (less then)
lte 小于等于 (less then equal)
4、Q对象查询,如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中
BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3))
5、聚合函数,聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中
BookInfo.objects.aggregate(Sum('bread'))
6、排序
BookInfo.objects.all().order_by('-bread') # 降序
7、关联查询
b = BookInfo.objects.get(id=1)
b.heroinfo_set.all() //一对多
b.hbook //多到一
4.3.1 修改
1、保存 hero = HeroInfo.objects.get(hname='猪八戒') hero.hname = '猪悟能' hero.save() 2、更新 HeroInfo.objects.filter(hname='沙悟净').update(hname='沙僧')4.3.1 删除
hero = HeroInfo.objects.get(id=13) hero.delete() HeroInfo.objects.filter(id=14).delete()



