python+Django框架运用(三)

Django模型

模式指的是根据数据库中数据表的结构来创建出来的class,每一张表到Python中就是一个

class,表中的每一个列,到Python中就是class的一个属性。

在模型中可以完成对数据库的增删改查操作

创建和使用模型 --ORM(对象关系映射)

三大特征:

  1、数据表到类的映射

    将数据表自动生成一个class类

    同时也可以将一个class类自动生成一张数据表

  2、数据类型的映射

    可以将表中的字段数据类型字段映射到Python中对应的数据类型

    反之同样

  3、关系映射

    在Python中可以将表与表之间的关系映射出来

    表与表之间的关系也可以自动映射到Python中的class

    数据表之间的关联关系:一对一、一对多、多对多

创建和配置数据库

1、先在数据库中创建一个库(mysql)

  create database 库名 default utf8;

2、配置数据库(在Django项目中settings.py中)

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,  #引擎
        ‘NAME‘: ‘myitem‘,    # 库名
        ‘USER‘: ‘laige‘,  # 用户名
        ‘PASSWORD‘: ‘123456‘,  # 密码
        ‘HOST‘: ‘172.16.2.178‘,  # 数据库服务器地址
        ‘PORT‘: 3306,  # 端口
    }
}        

Django中连接Mysql需要依赖于pymysql,在项目主目录中__init__.py增加:

import pymysql
pymysql.install_as_MySQLdb()

编写Models

在应用的models.py文件中定义与数据表对应的class

文件中的每个class类都称为模型类、实体类,每个实体类必须继承自models.Model

from django.db import models

# 定义一个实体类Users
class Users(models.Model):
    # 对应数据表中name字段,数据类型varchar(20)
    name = models.CharField(max_length=20)
    # 对应数据表中password字段,数据类型varchar(30)
    password = models.CharField(max_length=30)
    # 对应数据表中email字段,数据类型varchar(254)
    email = models.EmailField()
    # 对应数据表中age字段,数据类型int()
    age = models.IntegerField()

数据库的同步

在models.py中编写好实体类后,需要同步到数据库中

1.在控制台终端进入项目主目录,执行:

  ./manage.py  makemigrations

  作用:将每个应用下的models.pu文件生成一个数据库中间文件,保存在migrations目录

2.继续执行:

  ./manage.py  migrate

  作用:将每个应用下的migrations目录中的中间文件同步到数据库中

模型的字段类型与字段选项

常用的字段类型:

  BooleanField()    -->布尔类型,实际就是数据库中的tinyint(1)类型

  CharField()       --> 字符串类型

  DataField()       --> 日期类型

  DataTimeField()    --> 日期时间类型

  EmailField()     --> 存放电子邮箱

  FloatField()      --> 浮点型

  ImageField()       --> 存放图片路径

  IntergerField()    --> int整数型

  更多的字段类型,参考文档:https://docs.djangoproject.com/en/2.0/ref/models/fields

常用字段选项:

  max_length    --> 指定最大长度,CharField()必须设置

  default      --> 设置当前字段的默认值

  null        --> 指定当前字段是否允许为空,默认是False

  更多的字段选项,参考文档:https://docs.djangoproject.com/en/2.0/ref/models/fields

模型中的增删改查

1、增加数据,三种方式:

# 增加数据
def add_views(request):
    # 方式一:
    # 向author表中新增数据,Author是一个实体类(导入models.py)
    # Author.objects.create(names=‘朱自清‘, age=80)
    Author.objects.create(names=‘土豆‘, age=37,email=‘[email protected]‘)
    Author.objects.create(names=‘净无痕‘, age=35, email=‘[email protected]‘)
    Author.objects.create(names=‘耳根‘, age=40, email=‘[email protected]‘)
    Author.objects.create(names=‘西红柿‘, age=50, email=‘[email protected]‘)
    Author.objects.create(names=‘唐家三少‘, age=46, email=‘[email protected]‘)
    Author.objects.create(names=‘焖面‘, age=57, email=‘[email protected]‘)

    # 方式二:
    # 创建一个Models对象,通过对象的save()完成增加
    obj = Author(names=‘老舍‘, age=65)
    obj.save()

    # 使用字典构造对象, 通过save()完成增加
    dic = {
        ‘names‘: ‘李白‘,
        ‘age‘: 35
    }
    obj = Author(**dic)
    obj.save()

    return HttpResponse(‘新增成功!‘)

2、修改数据:

# 修改数据
def update_views(request):
    # 修改单个数据(三步)
    # 1.通过get()得到要修改的实体对象
    # 2.通过实体对象的属性修改属性值
    # 3.再通过实体对象的save()保存回数据库
    au = Author.objects.get(id=1)
    au.names = ‘一叶知秋‘
    au.save()

    # 批量修改数据(慎用)
    # 调用查询结果集的update()完成批量修改
    Author.objects.all().update(age=18)

    return HttpResponse(‘修改成功!‘)

3、删除数据:

# 删除数据
def delete_views(request, user_id):
  # 调用实体对象/查询结果集的 delete()
  # 删除单个
  # obj = Author.objects.get(id=1)
  # obj.delete()
  # 删除多个
  # Author.objects.all().delete()

  # obj = Author.objects.get(id=user_id)
  # obj.delete()

  # 逻辑删除
  au = Author.objects.get(id=user_id)
  au.isActive = False
  au.save()

  # 转发(一次请求)
  # return aulist_views(request)

  # 重定向(重新向指定的url发送请求)
  return HttpResponseRedirect(‘/login/‘)

4、查看数据:

# 查询数据
def query_views(request):
  # 方式一(查询所有):
  # 查询表中所有数据,相当于select * from 表名;
  auList = Author.objects.all()
  print(auList)
  # 返回的数据,是一个对象的列表,可以迭代出对象遍历出值
  # < QuerySet[ < Author: Author object >, < Author: Author object >, < Author: Author object >] >
  for au in auList:
    print(‘作者姓名:‘, au.names)
    print(‘作者年龄:‘, au.age)

  # 方式二(查询指定字段):
  # 查询表中部分字段数据,等同于select names,age from 表名;
  auList = Author.objects.values(‘names‘, ‘age‘)
  print(auList)
  # 返回的数据是查询的字段(字典,字段名:值)组成的列表
  for au in auList:
    print(‘作者姓名:‘, au[‘names‘], ‘作者年龄:‘, au[‘age‘])

  #############################################

  # 数据排序(默认是升序)
  # 按照age字段进行排序
  auList = Author.objects.order_by(‘age‘)
  print(‘#######升序#####‘)
  for au in auList:
    print(au.id, au.names, au.age)
  # Author.objects.order_by(‘-id‘)
  # 按照age字段进行降序排序
  auList = Author.objects.all().order_by(‘-age‘)
  print(‘######降序#######‘)
  for au in auList:
       print(au.id, au.names, au.age)

  #############################################
  # 对条件取反,等同于select * from 表名 where not (id=3)
  print(‘######条件取反######‘)
  auList = Author.objects.exclude(id=3)
  for au in auList:
       print(au.id, au.names, au.age)

  # 等同于 select * from author where not (id=3 and age=80)
  Author.objects.exclude(id=3, age=80)

  ##############################################
  # 根据条件查询部分行(重难点)
  # 等同于select * from author where id=1
  Author.objects.filter(id=1)
  # 等同于select * from author where id=1 and names=‘老舍‘
  Author.objects.filter(id=1, names=‘老舍‘)

  # 通过Field Lookup(查询表达式)完成复杂条件的构建
  # __exact 表示精确查询
  Author.objects.filter(names__exact=‘朱自清‘)

  # __contains 筛选出属性中包含关键字的记录
  # 等同于 select * from author where names like ‘%三少‘
  auList = Author.objects.filter(names__contains=‘三少‘)
  print(auList[0].names)

  # __lt 和 __lte 分别表示筛选出属性值小于和小于等于指定值得记录
  # __gt 和 __gte 分别表示筛选出属性值大于和大于等于指定值得记录
  # 等同于 select * from author where age < 80
  Author.objects.filter(age__lt=80)
  # __startswith 筛选出以指定关键字开始的记录
  # 等同于 select * from names like ‘朱%‘
  Author.objects.filter(names__startswith=‘朱‘)
  # __endswith 筛选出以指定关键字结尾的记录
  # 等同于 select * from names like ‘%三少‘
  auList = Author.objects.filter(names__endswith=‘三少‘).values(‘names‘, ‘age‘)
  for au in auList:
    print(‘作家姓名:‘, au[‘names‘])
    print(‘作家年龄:‘, au[‘age‘])

  ##############################################
  # 查询只返回一条数据(该函数只适用于返回一条记录时使用)
  Author.objects.get(id=1)

  return HttpResponse(‘查询成功!‘)

下面还有几个特殊操作:

1、F操作 和 Q操作

from django.db.models import F, Q

def doF_views(request):
  # 修改所有人的年龄全部加10岁
  # F操作, 在执行操作时获取某列的值(脱离操作无效)
  Author.objects.all().update(age=F(‘age‘)+10)
  return HttpResponseRedirect(‘/index/‘)

def doQ_views(request):
  # Q操作, 在查询条件中实现或(or)的功能
  # 等用于 select * from author where (id=8 or age>=50) and isActive=True;
  auList = Author.objects.filter(Q(id=8) | Q(age__gte=50), isActive=True)
  return render(request, ‘index.html‘, locals())

2、原生数据库操作:

def raw_views(request):
  sql = ‘select * from index_author where id>=9‘
  auList = Author.objects.raw(sql)

  for au in auList:
    print(au.names, au.age)
  return HttpResponse(‘Execute raw success!‘)

ps: 这里补充一点内容,重定向:

  意思就是想新的地址发送请求(服务器端)

  from django.http import HttpResponseRedirect

  return HttpResponseRedirect(url)

未完待续....

原文地址:https://www.cnblogs.com/hxgoto/p/9322646.html

时间: 2024-11-08 17:52:13

python+Django框架运用(三)的相关文章

利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!

利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow  + qrcode 模块 核心代码import qrcode qr = qrcode.QRCode( version=2, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=20, border=4, ) qr.add_data('你要生成的文件') qr.make(fit=True) img = q

Python Django框架实现商城项目源码加设计文档和注释

Python Django框架实现商城项目源码加设计文档和注释 链接:https://pan.baidu.com/s/1yN2iBgx3zmpTkoY8u1LWRg 提取码:lfsx 非常完整的django项目源码,分享给撸友们,不管是学习还是深造,都是可以学习借鉴的!! 原文地址:https://www.cnblogs.com/zyxlovesjy/p/12115491.html

Python django框架笔记(三):django工作方式简单说明和创建用户界面

(一)  说明 简单说明下django的工作方式,并举2个例子. (二)  Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和static目录(存放图片JS.css等) (三)   实现一个完整的用户界面 #假设已经创建好了项目和应用.下面URLconf和视图函数没什么先后关系,根据自己喜好,你可以先写视图函数,也可以先定义URLconf. 有下面几个步骤 (1)   创建模型 (2)   定义项目的URLconf(mysi

python django框架(一)

s4day63内容回顾: 1. 安装 2. 创建用户 + 授权 3. 连接 - 数据库 终端创建数据库(字符编码) - 数据表 终端 ORM pymysql create ...)engine=innodb - 数据行 增 删 改 查 - limit - group by .... 关闭 问题:简述ORM原理? day64内容 1. 自己开发Web框架 - socket - http协议 - HTML知识 - 数据库(pymysql,SQLAlchemy) HTTP特点: 无状态.短连接 TCP

Python Django框架笔记(一):安装及创建项目

 #推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. (一)      Web框架 Web开发除了全部从底层写起,还可以在其他人已有的基础上进行开发,简化开发流程.这些Web开发环境统称为Web框架,其目标是帮助开发者简化工作,如提供一些功能来完成一些通用任务,或提供一些资源来用于降低创建.更新.执行或扩展应用的工作量. Python Web框架既可以是单个或

[Python] Django框架入门

说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ./manager.py xxx 准备:已经安装python并加入环境变量 已安装 django 设计框架对比(引用,可自行搜索): 1.MVC MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库的封装 v表示

[Python] Django框架入门5——静态文件、中间件、上传图片和分页

说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文件主要指的是css.js和图片等文件. 1.配置静态文件 在settings.py文件中配置静态内容: STATIC_URL:在html文件中使用的路径,如:"/static/images/logo.png". STATICFILES_DIRS:指静态文件在项目的存放位置. 2.新建目录

Python Django 框架开发

参考文档: http://python.usyiyi.cn/django_182/intro/tutorial01.html #Django 1.8.2 文档 http://www.ziqiangxuetang.com/django/django-admin.html #Django 基础教程 1-1.安装Django框架(官网:https://www.djangoproject.com) pip install Django==1.9.1 1-2.创建一个网站项目 django-admin s

python django框架学习笔记(三)--大结局

一.数据库同步操作技巧 1.认识一个目录 目录名:migatations 作用,用来存放通过makemigrations命令生成的数据库脚本.app目录下必须要有migrations目录切目录下必须要有__init__.py才能正常的使用数据库同步功能. 2.认识一张数据表(django_migrations) 表中的字段: app:app名字 name:脚本的文件名称 applied:脚本执行时间 3.数据库相关的命令 flush:清空数据库-恢复数据库到最初的状态 makemigration