基于Django的web开发(一)


微信关注公众号:夜寒信息
致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持!


  • 基于Django的web开发(一)
    • 一、Django的安装及基本介绍
      • 一、文件的简单介绍
      • 二、路由的自定义
        • 1、注册一个路由
        • 2、模板配置
        • 3、路由优化配置
    • 二、Django中数据库的操作
      • 一、数据库的连接和表的创建
        • 1、连接数据库
        • 2、创建数据库表
        • 3、数据库的数据类型
        • 4、字段选项
      • 二、基本数据操作:
        • 1、增删改查
        • 2、模型过滤
        • 3、条件查询
        • 4、聚合函数
        • 5、F对象
        • 6、Q对象
        • 7、模型成员
        • 8、模型关系
        • 9、模型继承
        • 10、在开发中

  Django和Flask都是基于Python的优秀的开源web开发框架,这一阶段首先来学习Django这款重量级框架,以后会去学习Flask框架。

一、Django的安装及基本介绍

  使用Django框架开发web项目建议使用Pycharm专业版,可以关注公众号“夜寒信息”一键获取安装教程,以下环境介绍都是基于Pycharm介绍。

一、文件的简单介绍

  新建的web项目有许多文件夹和许多文件,其中的文件和文件夹我们会在之后一一介绍,在这里我只介绍现阶段需要认识的。

  一打开项目我们会看到manage.py文件,这是我们一级目录下的文件,我们在运行web项目时便是运行这个文件。我们练习会在测试服务器上运行使用代码python manage.py runserver这样便可以在本机访问web项目。

  还有一个settings.py是二级目录文件,其中包含的是项目的设置。其中DEBUG设置为true则会在错误时显示错误信息,并且会在对文件进行更改时自动刷新服务器。INSTALLED_APP为Django安装的APP,可以使用django-admin startapp appnamepython manage.py startapp appname创建个人应用,在写完自己的之后需要在这里注册添加。TEMPLATES为html模板文件的目录,可以手动新建templates文件夹,在这里注册添加即可。DATABASED为数据库,可以改为自己的数据库使用。STATIC_URL为静态文件的目录,即js,css,img等文件,可以手动创建static文件夹,在这里注册添加。

  其中urls.py为url路由地址,使用正则表达式表示。
  views.py为路由响应函数,对用户的操作进行响应。

二、路由的自定义

1、注册一个路由

  • urls.py中

    • url函数中自定义一个url,使用正则表达式作为匹配规则。
    • 传入一个视图函数,对应的是views中的一个函数,传入函数名无括号
  • 去views中实现视图函数
    • 第一个参数是request
    • 记得返回值为Response

2、模板配置

  • 两种
  • 1、在APP中进行模板配置
    • 只需在APP的根目录中创建templates文件夹即可
  • 2、在项目目录中进行模板配置
    • 需要在项目目录中创建templates文件夹并标记
    • 需要在settings中注册

3、路由优化配置

  • 项目逻辑如果过于复杂,可以进行拆分
  • 拆分为多个APP
  • 继续拆分路由器urls
    • 在APP中创建自己的urls
    • 子路由使用根路由规则+子路由规则

二、Django中数据库的操作

  Django的models使用了Models Relational Mapping 对象关系映射,将业务逻辑进行解耦合,不论是什么数据库,都是用Django的内部函数即可完成相关操作。

一、数据库的连接和表的创建

1、连接数据库

  数据库的连接在settings.py中的DATABASES中修改参数,这里特别说明mysql数据库的连接

MySQL数据库连接有两步:

  • 驱动

    • 下载驱动pymysql
    • 伪装驱动头,在__init__.py中加install_as_mysqldb()
  • 参数
    • USER
    • PASSWORD
    • HOST
    • PORT
    • NAME
    • ENGINE

2、创建数据库表

  创建数据库表需要在models.py文件中写相关的类,使用python manage.py makemigrations命令形成迁移文件,然后再使用python manage.py migrate命令进行迁移
下面举个例子:

class Student(models.Model):s_name = models.CharField(max_length=18)s_grade = models.ForeginKey(Grade)

  这样便建立了一个表,其中CharFiled为字段类型,max_length为字段约束,在后面会有详细介绍

3、数据库的数据类型

  • AutuField

    • 一个根据实际ID自动增长的IntegerField,通常如果不指定,一个主键字段中将会自动添加到模板中
  • Charfield(max_length=n)
    • 字符串,默认的表单样式为TextField
  • TextFiled
    • 大文本字段,一般超过4000使用,控件为Textarea
  • IntegerField
    • 整数
  • DecimalField(max_digits, decimal_palaces)
    • 使用python的decimal实例次表示的十进制浮点数
    • 参数说明
      • max_digits 位数总数
      • decimal_palaces 小数点后的数字位数
  • FloatField
    • 用python的float实例来表示的浮点数
  • BooleanField
    • true/false字段,默认控件为CheckboxInput
  • NullBooleanField
    • 支持null、true、false三种值
  • DateField([auto_now=False, auto_now_add=False])
    • 使用python的datetime、date表示的日期
    • 参数说明
      • auto_now 保存对象是,自动设置该字段为当前时间
      • auto_now_add 保存的对象是,第一次创建时自动设置的时间
  • TimeField
    • 使用python的datetime.time表示时间
  • DateTimeField
    • 使用python的datetime.datetime表示的日期和时间
  • FileField
    • 一个上传文件的字段
  • ImageField
    • 继承了FileField,增加校验是否为image

4、字段选项

通过字段选项,可以实现对字段的约束

  • null

    • 如果为True,Django将空值以NULL存储到数据库中,默认是False
  • blank
    • 如果为True,则该字段允许为空白(空字符串""),默认是False
  • db_column
    • 指定字段的名称
  • db_index
    • 若为True则创建索引
  • default
    • 默认值
  • primary_key
    • 若为True,则字段设定为主键
  • unique
    • 若为True,该字段唯一

二、基本数据操作:

1、增删改查

  • 存储

    • save()
  • 查询
    • 查所有 objects.all()
    • 查单个 objects.get(pk=xx)
  • 更新
    • 基于查询的
    • 查好的对象,修改属性,然后save()
  • 删除
    • 基于查询的
    • 调用delete()

2、模型过滤

  • filter()

    • 选中
  • exclude()
    • 剔除
  • 都可连续使用
    • 可以链式调用
    • Peroson.filter().filter.xxx.exclude().exclude().yyy
  • all()
    • 获取所有数据,可切片
  • order_by()
    • 排序
  • values()
    • 一条数据就是一个字典,返回一个列表
  • get()
    • 获取一个数据,若未找到匹配项会产生DoesNotExist异常,若找到多个则产生MultiObjectsReturned异常
  • first()
    • 返回查询集中的第一个对象
  • last()
    • 返回查询集中的最后一个对象
  • count()
    • 返回查询集中的对象个数
  • exists()
    • 判断查询集中是否有数据,有则返回True

3、条件查询

规则:属性__运算符=值

  • gt

    • 大于 filter(sage__gt=30)
  • lt
    • 小于 filter(sage__lt=30)
  • gte
    • 大于等于 filter(sage__gte=30)
  • lte
    • 小于等于 filter(sage__lte=30)
  • in
    • 是否包含在范围内 filter(pk__in=[2,4,6])
  • contains
    • 是否包含,大小写敏感,类似于like模糊查询 filter(sname__contains='王')
  • startswith
    • 以xx开始 filter(sname__startswith='王')
  • endswith
    • 以xx结束 filter(sname__endswith='王')
  • exact
    • 精确判断,大小写敏感 filter(isDelete=False)
  • isnull
    • 是否为空 filter(sname__isnull=False)

4、聚合函数

使用aggregate返回聚合函数的值

  • Avg

    • 平均值
  • Count
    • 数量
  • Max
    • 最大值
  • Min
    • 最小值
  • Sum
    • 求和

举例:

Students.objects().aggregate(Max('sage'))

5、F对象

  • 可以获取属性的值

    • 举例:grades = Grade.objects.filter(girlnum__gt=F('boynum'))
  • 可以实现一个模型的不同属性的运算操作

  • 还可以支持算术运算

    • 举例:grades = Grade.objects.filter(girlnum__gt=F('boynum')-10)

6、Q对象

过滤器的方法中的重要参数,常用于组合条件

  • 可以对条件进行封装

    • grades = Grade.objects.filter(Q(girlnum__gt=5) & Q(boynum__gt=10))
  • 封装之后可以支持逻辑运算
    • 与 &
    • 或 |
    • 非 ~

7、模型成员

  • 显性属性

    • 开发者手动书写的属性
  • 隐性属性
    • 开发者未书写,ORM自动生成的
    • 如果把隐性属性手动申明,系统便不会添加隐性属性

8、模型关系

  • 1:1

    • 应用场景

      • 用于复杂表的拆分
      • 扩展新功能
    • OneToOneField
      • 关系申明后有细微差别
    • 实现
      • 使用外键实现
      • 对外键添加了唯一约束
    • 数据删除
      • 级联表同时删除

        • 主表:从表数据删除,主表不受影响
        • 从表:主表数据删除,从表数据直接删除
      • PROTECT 受保护
        • 开发中为了防止误操作会设置此模式
        • 主表中存在级联数据,若受保护则删除不成功
        • 主表中不存在级联数据删除成功
      • SET
        • SET_NULL

          • 提前设置字段允许为空
        • SET_DEFAULT
          • 提前设置字段默认值
        • SET()
          • 自定义指定值
      • 级联数据获取
        • 主获取从:隐性属性,默认就是级联数据的名字
        • 从获取主:显性属性,就是属性的名字
  • 1:M
    • ForeignKey
    • 从获取主
      • 主从获取:隐性属性,级联模型_set

        • student_set Manager的子类

          • all
          • filter
          • exclude
          • Manager上的函数皆可使用
      • 主从获取
        • 显性属性
  • M:N
    • 开发中很少使用多对多属性,而是自己维护多对多关系
    • 产生表时会产生单独的关系表
      • 关系表中储存关联表的主键,通过多个外键实现
      • 多个外键值不能同时相等
    • 级联数据获取
      • 从获取主

        • 使用属性,属性是一个Manager子类
      • 主获取从
        • 隐性属性
    • 级联数据
      • add
      • remove
      • clear
      • set
  • ManyRelatedManager
    • 函数中自定义的类
    • 并且父类时一个参数
    • 动态创建

9、模型继承

  • 默认继承会将通用字段放到父表中,特定字段放在自己表中,中间使用外键连接

    • 关系太复杂,效率低,查询慢
    • 父类表中会有过多数据
  • 使用元信息来解决这个问题
    • 使模型抽象化 class Meta: abstract = True
    • 抽象模型不会在数据库中产生映射
    • 子模型映射出来的表直接包含父模型的字段

10、在开发中

  • model -> sql

    • 都可以使用
  • sql -> model
    • 使用 python manage.py inspectdb

      • 可直接根据表生成模型
      • 元信息中包含 manage=False
  • 若自己的模型不想被迁移管理,也可以使用 manage=False进行申明


若有其他问题可以关注微信公众号“夜寒信息”,后台客服,为您解答


微信关注公众号:夜寒信息
致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持!


基于Django的web开发(一)相关推荐

  1. Python PyCharm Django 搭建web开发环境

    Python & PyCharm & Django 搭建web开发环境 一.安装软件 1.安装 Python 2.7.PyCharm.pip(Python包管理工具).Django ( ...

  2. 基于Rust的Web开发,actix的基本使用

    基于Rust的Web开发,actix的基本使用 rust-web 环境搭建 url路径参数传递 get请求参数传递 post请求表单参数传递 post请求Json参数传递 rust-web Rust语 ...

  3. 基于Django的商城开发项目笔记(一)

    基于Django的商城开发项目笔记(一) 一.环境搭建 1.安装Python:去Python官网下载最新版本Python进行安装,安装时记得勾选将Python加入系统环境变量 2.在命令行输入pip ...

  4. 绝对干货:19个有用的基于云的Web开发工具

    随着Web开发行业的快速发展,许多Web工具似乎简化了创建基于Web的应用程序的过程,并帮助开发人员更快的掌握. 在提供的众多工具中,有一些值得指出. Web开发人员的在线游乐场 Web应用程序开发包 ...

  5. python +Django 搭建web开发环境初步,显示当前时间

    1.python 的安装 网上很多关于django跟python 开发的资料,这块我正在实习准备用这个两个合起来搞一个基于web 的东西出来现在开始学习,写点东西记录一下心得. 开发环境是window ...

  6. 基于django的web模板系统

    1    django模板系统介绍 1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便            2,其次 ...

  7. django mysql开发_基于django框架web项目实战开发四 django+mysql实现增删查改功能

    第一步:编写增删查改功能代码 打开项目myweb目录下view.py, 并编写以下代码 view.py from django.shortcuts import render, redirect fr ...

  8. Django+python+web开发的思维导图式辅助记忆笔录

    Django学习笔记(一) Django背景 项目流程 1.需求分析 1.1需求文档 1.2需求评审.分析 功能分析 模块划分 2.WSGI-Web框架基础 2.1 简单的web server Dja ...

  9. java servlet 开发_Java之基于Servlet的Web开发简介

    由于学习的过程中,接触到了这部分内容,所以特别的在这进行整理,分享给大家. 1.定义 Servlet是Java Servlet的简称,称为小服务程序或服务连接器: 2.原理 从原理上讲,Servlet ...

最新文章

  1. 【ACM】杭电OJ 2039
  2. java.lang.Instrument 动态修改替换类代码
  3. 《Head First Python》笔记 第四章 持久存储
  4. 一句话实现Mysql查询结果带行号
  5. 重磅!华为HCIE将于2021年5月30日改版,取消面试考试
  6. wps流程图怎么不能添加文字_windows不能访问共享文件夹,不能添加共享打印机时,怎么解决呢...
  7. 点击图片,AJAX删除后台图片文件
  8. oracle 备份批处理,windows下oracle自动备份批处理
  9. .NET Core 开发之旅 (1. .NET Core R2安装教程及Hello示例)
  10. Golang——数组遍历、最大值、求和、多维数组
  11. 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
  12. Apache的多处理模块MPM
  13. python调整屏幕缩放比例_python实现批量按比例缩放图片效果
  14. android9 三星 港版,三星S9+官方港版安卓9固件rom刷机包:TGY-G9650ZHS4CSD7
  15. java子网掩码计算器_java 子网掩码计算
  16. 天气预报本地准时宝隐私政策
  17. java组件及事件处理(13)--ActionListener监听算平方数
  18. webpack安装问题(已解决)
  19. dell服务器硬件参数提升速度,DELL R620服务器配置
  20. 计算机中丢失aclst16,Win10系统运行CAD2006提示计算机中丢失ac1st16.dll怎么办

热门文章

  1. 【Matlab】图形用户界面设计
  2. 数学分析:一元实函数论----一元实函数基础
  3. P1296 奶牛的耳语
  4. php 微信服务号登录授权
  5. Echarts之圆饼图用法
  6. 在信号传输线上为什么要线路阻抗匹配?如何匹配?
  7. 好用的物资管理系统材料管理软件一般具备哪些功能?
  8. html5画图作品,10款最佳HTML5绘图工具
  9. 使用全加器实现补码的加减运算
  10. arping指令即其参数对应的功能