基于Django的web开发(一)
基于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 appname
或python 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='王')
- 是否包含,大小写敏感,类似于like模糊查询
- startswith
- 以xx开始
filter(sname__startswith='王')
- 以xx开始
- endswith
- 以xx结束
filter(sname__endswith='王')
- 以xx结束
- 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()
- 自定义指定值
- SET_NULL
- 级联数据获取
- 主获取从:隐性属性,默认就是级联数据的名字
- 从获取主:显性属性,就是属性的名字
- 级联表同时删除
- 应用场景
- 1:M
- ForeignKey
- 从获取主
- 主从获取:隐性属性,级联模型_set
- student_set Manager的子类
- all
- filter
- exclude
- Manager上的函数皆可使用
- student_set Manager的子类
- 主从获取
- 显性属性
- 主从获取:隐性属性,级联模型_set
- 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开发(一)相关推荐
- Python PyCharm Django 搭建web开发环境
Python & PyCharm & Django 搭建web开发环境 一.安装软件 1.安装 Python 2.7.PyCharm.pip(Python包管理工具).Django ( ...
- 基于Rust的Web开发,actix的基本使用
基于Rust的Web开发,actix的基本使用 rust-web 环境搭建 url路径参数传递 get请求参数传递 post请求表单参数传递 post请求Json参数传递 rust-web Rust语 ...
- 基于Django的商城开发项目笔记(一)
基于Django的商城开发项目笔记(一) 一.环境搭建 1.安装Python:去Python官网下载最新版本Python进行安装,安装时记得勾选将Python加入系统环境变量 2.在命令行输入pip ...
- 绝对干货:19个有用的基于云的Web开发工具
随着Web开发行业的快速发展,许多Web工具似乎简化了创建基于Web的应用程序的过程,并帮助开发人员更快的掌握. 在提供的众多工具中,有一些值得指出. Web开发人员的在线游乐场 Web应用程序开发包 ...
- python +Django 搭建web开发环境初步,显示当前时间
1.python 的安装 网上很多关于django跟python 开发的资料,这块我正在实习准备用这个两个合起来搞一个基于web 的东西出来现在开始学习,写点东西记录一下心得. 开发环境是window ...
- 基于django的web模板系统
1 django模板系统介绍 1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便 2,其次 ...
- django mysql开发_基于django框架web项目实战开发四 django+mysql实现增删查改功能
第一步:编写增删查改功能代码 打开项目myweb目录下view.py, 并编写以下代码 view.py from django.shortcuts import render, redirect fr ...
- Django+python+web开发的思维导图式辅助记忆笔录
Django学习笔记(一) Django背景 项目流程 1.需求分析 1.1需求文档 1.2需求评审.分析 功能分析 模块划分 2.WSGI-Web框架基础 2.1 简单的web server Dja ...
- java servlet 开发_Java之基于Servlet的Web开发简介
由于学习的过程中,接触到了这部分内容,所以特别的在这进行整理,分享给大家. 1.定义 Servlet是Java Servlet的简称,称为小服务程序或服务连接器: 2.原理 从原理上讲,Servlet ...
最新文章
- 【ACM】杭电OJ 2039
- java.lang.Instrument 动态修改替换类代码
- 《Head First Python》笔记 第四章 持久存储
- 一句话实现Mysql查询结果带行号
- 重磅!华为HCIE将于2021年5月30日改版,取消面试考试
- wps流程图怎么不能添加文字_windows不能访问共享文件夹,不能添加共享打印机时,怎么解决呢...
- 点击图片,AJAX删除后台图片文件
- oracle 备份批处理,windows下oracle自动备份批处理
- .NET Core 开发之旅 (1. .NET Core R2安装教程及Hello示例)
- Golang——数组遍历、最大值、求和、多维数组
- 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
- Apache的多处理模块MPM
- python调整屏幕缩放比例_python实现批量按比例缩放图片效果
- android9 三星 港版,三星S9+官方港版安卓9固件rom刷机包:TGY-G9650ZHS4CSD7
- java子网掩码计算器_java 子网掩码计算
- 天气预报本地准时宝隐私政策
- java组件及事件处理(13)--ActionListener监听算平方数
- webpack安装问题(已解决)
- dell服务器硬件参数提升速度,DELL R620服务器配置
- 计算机中丢失aclst16,Win10系统运行CAD2006提示计算机中丢失ac1st16.dll怎么办