栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django快速开发实战(django 教程)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django快速开发实战(django 教程)

1、django介绍

Django,是用python语言写的开源web开发框架

采用MVT模式:
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html

2、工程搭建

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、通过类和对象完成数据增删改查操作

4.1 配置数据库连接信息
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

4.3 数据库操作

Django的manage工具提供了shell命令,帮助我们配置好当前工程的运行环境(如连接好数据库等),以便可以直接在终端中执行测试python语句
python manage.py shell

4.3.1 增加(两种方法)
>>> 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()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/772676.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号