当前位置: 首页 > news >正文

笑话网站php程序南山网站设计多少钱

笑话网站php程序,南山网站设计多少钱,成华区微信网站建设推广,自己做视频网站有点卡系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求HttpRequest请求类 第七章 会话管理#xff08;CookiesSession#xff09; 第八章 文件上传…系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求HttpRequest请求类 第七章 会话管理CookiesSession 第八章 文件上传实现 第九章 多种视图view 第十章 Django5模板引擎 第十一章 模型定义与使用 第十二章 ORM执行SQL语句和事务 第十三章 表单定义与使用 第十四章 内置Admin系统 第十五章 内置Auth认证系统 文章目录 系列文章目录前言模型定义模型数据迁移模型查询模型分页查询高级查询匹配符模型多表查询模型数据新增模型数据修改模板删除数据总结 前言 Django5对各种数据库提供了很好的支持包括PostgreSQL、MySQL、SQLite和 Oracle而且为这些数据库提供了统一的API方法这些API统称为ORM框架。通过使用Django5内置的ORM框架可以实现数据库连接和读写操作。 模型定义 ORM框架是一种程序技术用于实现面向对象编程语言中不同类型系统的数据之间的转换。 从效果上说它创建了一个可在编程语言中使用的“虚拟对象数据库”通过对虚拟对象数据库的操作从而实现对目标数据库的操作虚拟对象数据库与目标数据库是相互对应的。在 Django5中虚拟对象数据库也称为模型通过模型实现对目标数据库的读写操作实现方法如下: 1.配置目标数据库在settings.py中设置配置属性 2.构建虚拟对象数据库在App 的models.py文件中以类的形式定义模型。 3.通过模型在目标数据库中创建相应的数据表。 4.在其他模块如视图函数里使用模型来实现目标数据库的读写操作。 settings.py下我们配置mysql数据库 模型字段类型如下 AutoField:自增长类型数据表的字段类型为整数长度为11位。 BigAutoField:自增长类型数据表的字段类型为bigint长度为20位。 CharField:字符类型。 BooleanField:布尔类型。 CommaSeparatedIntegerField:用逗号分割的整数类型。 DateField:日期( Date类型。 DateTimeField:日期时间( Datetime)类型。Decimal:十进制小数类型。 EmailField:字符类型,存储邮箱格式的字符串。 FloatField:浮点数类型数据表的字段类型变成Double类型。IntegerField:整数类型数据表的字段类型为11位的整数。 BigIntegerField:长整数类型。 IPAddressField:字符类型存储Ipv4地址的字符串。 GenericIPAddressField:字符类型存储Ipv4和Ipv6地址的字符串。 NullBooleanField:允许为空的布尔类型。 PositiveIntegerFiel:正整数的整数类型。 PositiveSmallIntegerField:小正整数类型取值范围为0~32767。 SlugField:字符类型包含字母、数字、下画线和连字符的字符串。 SmallIntegerField:小整数类型取值范围为-32,768~32,767。 TextField:长文本类型。 TimeField:时间类型显示时分秒HH:MM[ :ss[.uuuuuu]]。 URLField:字符类型存储路由格式的字符串。 BinaryField:二进制数据类型。 FileField:字符类型存储文件路径的字符串。 ImageField:字符类型存储图片路径的字符串。 FilePathField:字符类型从特定的文件目录选择某个文件。 模型字段参数如下 verbose_name:默认为None在 Admin站点管理设置字段的显示名称。 primary_key:默认为False若为True则将字段设置成主键。 max_length:默认为None设置字段的最大长度。 unique:默认为False若为True则设置字段的唯一属性。 blank:默认为False若为True则字段允许为空值数据库将存储空字符串。 null:默认为False若为True则字段允许为空值数据库表现为NULL。 db_index:默认为False若为True则以此字段来创建数据库索引。default:默认为NOT_PROVIDED对象设置字段的默认值。 editable:默认为True允许字段可编辑用于设置Admin的新增数据的字段。 serialize:默认为True允许字段序列化可将数据转化为JSON格式。 unique_for_date:默认为None设置日期字段的唯一性。 unique_for_month:默认为None设置日期字段月份的唯一性。 unique_for_year:默认为None设置日期字段年份的唯一性。choices:默认为空列表设置字段的可选值。 help_text:默认为空字符串用于设置表单的提示信息。 db_column:默认为None设置数据表的列名称若不设置则将字段名作为数据表的列名。 db_tablespace:默认为None如果字段已创建索引那么数据库的表空间名称将作为该字段的索引名。注意:部分数据库不支持表空间。 auto_created:默认为False若为True则自动创建字段用于一对一的关系模型。validators:默认为空列表,设置字段内容的验证函数。 error_messages:默认为None设置错误提示。 ForeignKey方法参数如下 参数名参数说明to指定关联的目标模型类。可以使用字符串表示模型类的路径也可以直接使用模型类的引用。on_delete指定当关联对象被删除时的行为。CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET0、DO_NOTHING。related_name指定反向关联的名称默认为模型类名_set。to_field指定关联的目标模型类中用于关联的字段名称。默认为主键字段。db_index如果为True则在目标模型的关联字段上创建索引。null指定关联字段是否可以为空。如果 nullTrue则数据库中该字段将允许 NULL值。blank指定关联字段是否可以为空。如果blankTrue则表单中该字段可以为空。limit_choices_to指定关联对象的过滤条件。可以是一个字典、一个 QuerySet或一个函数。verbose_name用于在 Django Admin后台中显示字段名称。help_text用于在 Django Admin后台中显示帮助文本。 on_delete的models属性有下面设置选项: CASCADE:这就是默认的选项级联删除你无需显性指定它。 PROTECT: 保护模式如果采用该选项删除的时候会抛出ProtectedError错误。 SET_NULL: 置空模式删除的时候外键字段被设置为空前提就是blankTrue, nullTrue,定义该字段的时候允许为空。 SET_DEFAULT: 置默认值删除的时候外键字段设置为默认值所以定义外键的时候注意加上一个默认值。 SET(): 自定义一个值该值当然只能是对应的实体了 根据上述信息我们去模型models.py中建图书信息和图书种类各一张表属于1对N关系。 from django.db import modelsclass BookTypeInfo(models.Model):id models.AutoField(primary_keyTrue)bookTypeName models.CharField(max_length20)class Meta:db_table t_bookTypeverbose_name 图书类别class BookInfo(models.Model):id models.AutoField(primary_keyTrue)bookName models.CharField(max_length20)price models.FloatField()publishDate models.DateField()bookType models.ForeignKey(BookTypeInfo,on_deletemodels.PROTECT)class Meta:db_table t_bookverbose_name 图书信息模型数据迁移 然后我们执行python manage.py makemigrations生成数据库迁移文件 所谓的迁移文件, 是类似模型类的迁移类,主要是描述了数据表结构的类文件 这个生成的迁移文件在migrations目录下每执行一次都会生成一个新文件。 插入几条数据 INSERT INTO t_booktype VALUES (1, 计算机类); INSERT INTO t_booktype VALUES (2, 数学类);INSERT INTO t_book VALUES (1, Python从入门到放弃, 98.8, 2004-03-16, 1); INSERT INTO t_book VALUES (2, Java编程思想, 100, 2004-03-16, 1); INSERT INTO t_book VALUES (3, Head First设计模式, 88, 2020-03-16, 1); INSERT INTO t_book VALUES (4, 数学的秘密, 50, 2019-03-06, 2);模型查询 我们知道数据库设有多种数据查询方式如单表查询、多表查询、子查询和联合查询等而 Django 的ORM框架对不同的查询方式定义了相应的API方法。下面我们通过实例来深入学习下 我们来实现下图书信息的查询顺便通过外键关联配置把图书类别信息也级联查询出来。我们通过all()方法查询出所有图书信息 views.py里我们加下bookList方法 def bookList(request):title 图书列表bookList BookInfo.objects.all()content_value {title: title, bookList: bookList}return render(request, bookList.html, contextcontent_value)urls.py里加下映射配置 path(book/list, helloWorld.views.bookList)templates下新建book目录book目录下新建list.html: !DOCTYPE html html langen headmeta charsetUTF-8title{{ title }}/title /head body h1{{ title }}/h1 table border1trth序号/thth书名/thth价格/thth出版日期/thth分类/th/tr{% for book in bookList %}trtd{{ book.id }}/tdtd{{ book.bookName }}/tdtd{{ book.price }}/tdtd{{ book.publishDate|date:Y-m-d }}/tdtd{{ book.bookType.bookTypeName }}/td/tr{% endfor %} /table /body /html 测试运行浏览器输入http://127.0.0.1:8000/book/list 可以看到表中所有内容。接下来我们使用高级点的查表语法。 下面我们继续学习下ORM框架给我们提供的一些其他常用方法 # 查询所有信息 bookList BookInfo.objects.all() # 获取数据集的第一条数据的bookName属性值 print(bookList[0].bookName) # 返回前2条数据 select * from t_book limit 2 bookList BookInfo.objects.all()[:2] # 查询指定字段 bookList BookInfo.objects.values(bookName, price) # 查询指定字段 数据以列表方式返回列表元素以元组表示 bookList BookInfo.objects.values_list(bookName, price) ORM框架提供了get()方法返回满足条件的单个数据# 获取单个对象一般是根据id查询 book BookInfo.objects.get(id2) print(book.bookName)ORM框架提供了filter()方法返回满足条件的数据 # 返回满足条件id2的数据返回类型是列表 bookList BookInfo.objects.filter(id2) bookList BookInfo.objects.filter(price100, id1) # filter的查询条件可以设置成字典格式 d dict(price100, id1) bookList BookInfo.objects.filter(**d) # SQL的or查询需要引入Qfrom django.db.models import Q # 语法格式Q(fieldvalue)|Q(fieldvalue) 多个Q之间用|隔开 bookList BookInfo.objects.filter(Q(id1) | Q(price88)) # SQL的不等于查询在Q查询中用“~”即可 # SQL select * from t_book where not (id1) bookList BookInfo.objects.filter(~Q(id1))ORM框架提供了exclude()方法返回不满足条件的数据 # 也可以使用exclude 返回满足条件之外的数据 实现不等于查询 bookList BookInfo.objects.exclude(id1) ORM框架提供了count()方法返回满足查询条件后的数据量# 使用count()方法返回满足查询条件后的数据量 t BookInfo.objects.filter(id2).count() print(t) ORM框架提供了distinct()方法返回去重后的数据# distinct()方法返回去重后的数据 bookList BookInfo.objects.values(bookName).distinct() print(bookList) ORM框架提供了order_by()方法对结果进行排序默认是升序如果需要降序只需要在字段前面加“-”即可 # 使用order_by设置排序 # bookList BookInfo.objects.order_by(price) bookList BookInfo.objects.order_by(-id)ORM框架提供了annotate方法来实现聚合查询比如数据值求和求平均值等。 # annotate类似于SQL里面的GROUP BY方法 # 如果不设置values默认对主键进行GROUIP BY分组 # SQL: select bookType_idSUM(price) AS price_sum from t_book GROUP BY bookType_id r BookInfo.objects.values(bookType).annotate(Sum(price)) # SQL: select bookType_idAVG(price) AS price_sum from t_book GROUP BY bookType_id模型分页查询 在Django中实现分页通常使用Paginator类。以下是一个简单的示例展示了如何在Django视图中实现分页功能 bookList BookInfo.objects.all() # Paginator(object_list ,per_page) # object_list 结果集/列表 # per_page 每页多少条记录 p Paginator(bookList, 2) # 获取第几页的数据 bookListPage p.page(2) print(总记录数, BookInfo.objects.count())高级查询匹配符 由于是通过参数来传递字段限制条件例如当我们要查询年龄大于12的学生我们并不能直接这样使用 querystudent1 Student.objects.filter(age12)Django通过字段后加__条件值的方式来解决这样的问题例如上面就可以这样进行查询 querystudent1 Student.objects.filter(age__gt12)1. 等于 exact。 例查询name等于‘xiao ming’的学生 Student.objects.filter(namexiao ming) Student.objects.filter(name__exactxiao ming)#此处的exact可以省略2. 模糊查询 like包含 contains 例查询姓名包含xiao的学生。 Student.objects.filter(name__containsxiao) 开头startswith 结尾endswith 例查询姓名以xiao开头的学生 以ming结尾的学生 Student.objects.filter(name__startswithxiao) Student.objects.filter(name__endswithming)3. 空查询 isnull 例查询姓名不为空的学生 Student.objects.filter(name__isnullFalse)4. 范围查询 in 例查询年龄12或15或16的学生 Student.objects.filter(age__in[12,15,16])5. 比较查询 gt大于 lt(less than) gte(equal) lte 例查询年龄大于等于12的学生 Student.objects.filter(age__gte12)6. 日期查询 date 例查询1994年出生的学生。 Student.objects.filter(birthyear__date1994) 例查询1994年1月1日后出生的学生。 Student.objects.filter(birthyear__date__gt date(1994,1,1))7. 返回不满足条件的数据 exclude 例查询id不为3的学生。 Student.objects.exclude(id3)模型多表查询 我们在日常的开发中常常需要对多张数据表同时进行数据查询。多表查询需要在数据表之间建立表关系才能够实现。一对多或一对一的表关系是通过外键实现关联的而多表查询分为正向查询和反向查询。 以模型BookInfo和BokkTypeInfo为例如果查询主题是BookInfo通过外键bookType_id去查询BooKTypeInfo的关联数据那么该查询称为正向查询如果查询对象的主题是模型BookTypeInfo要查询它与模型BookInfo的关联数据那么该查询称为反向查询 下面是一个实例 def bookList2(request):多表查询 正常查询 和反向查询:param request::return:# 正向查询book: BookInfo BookInfo.objects.filter(id2).first()print(book.bookType.bookTypeName)# 反向查询bookType BookTypeInfo.objects.filter(id1).first()print(bookType.bookinfo_set.first().bookName)print(bookType.bookinfo_set.all())content_value {title: 图书列表}return render(request, book/list.html)模型数据新增 Django对数据库的数据进行增、删、改操作是借助内置ORM框架所提供的API方法实现的,简单来说它在模型基础类 Model里定义数据操作方法通过类继承将这些操作方法传给开发者自定义的模型对象再由模型对象调用即可实现数据操作。 添加操作通过模型的save方法实现添加下可以返回主键id值。 我们在前面实例的基础上来实现这个例子。 因为添加页面是需要图书类别的数据我们用下拉框实现。所以这里需要一个预处理操作。 先在views.py里定义一个添加预处理方法preAdd def preAdd(request):预处理添加操作:param request::return:bookTypeList BookTypeInfo.objects.all()print(bookTypeList)content_value {title: 图书添加, bookTypeList: bookTypeList}return render(request, book/add.html, contextcontent_value)urls.py里加下映射 path(booklist/preadd, helloWorld.views.preAdd),原先的list.html加上添加的链接 a href/book/preAdd添加/abr/再创建下图书添加页面add.html !DOCTYPE html html langen headmeta charsetUTF-8title{{ title }}/title /head body h1{{ title }}/h1 form action/booklist/add methodpost{% csrf_token %}书名input typetext namebookNamebr价格input typetext namepricebr出版日期input typedate namepublishDatebr分类select namebookType_id{% for bookType in bookTypeList %}option value{{ bookType.id }}{{ bookType.bookTypeName }}/option{% endfor %} /selectbrinput typesubmit value提交 /form /body /html最后在views.py里创建图书添加函数add def add(request):图书添加:param request::return:# print(request.POST.get(bookName))# print(request.POST.get(publishDate))# print(request.POST.get(bookType_id))# print(request.POST.get(price))book BookInfo()book.bookName request.POST.get(bookName)book.publishDate request.POST.get(publishDate)book.bookType_id request.POST.get(bookType_id)book.price request.POST.get(price)book.save()# 数据添加后获取新增数据的主键idprint(book.id)return bookList(request)运行测试浏览器输入http://127.0.0.1:8000/booklist 模型数据修改 模型数据修改和添加都是用的save方法。 我们结合案例先实现下 我们在views.py里先定义preUpdate方法修改预处理根据id获取图书信息以及获取图书类别列表 def preUpdate(request, id):预处理修改操作:param request::return:print(id:, id)book BookInfo.objects.get(idid)print(book)bookTypeList BookTypeInfo.objects.all()print(bookTypeList)content_value {title: 图书修改, bookTypeList: bookTypeList, book: book}return render(request, book/edit.html, contextcontent_value)运行运行 urls.py里加下映射 path(book/preUpdate/int:id, helloWorld.views.preUpdate),book/list.html修改下加下修改操作链接 a href/book/preUpdate/{{ book.id }}修改/a新建编辑页面edit.html !DOCTYPE html html langen headmeta charsetUTF-8title{{ title }}/title /head body h3{{ title }}/h3 form action/book/update methodpost{% csrf_token %}tabletrtd图书名称/tdtdinput typetext namebookName value{{ book.bookName }}/td/trtrtd出版日期/tdtdinput typetext namepublishDate value{{ book.publishDate | date:Y-m-d }}/td/trtrtd图书类别/tdtdselect namebookType_id{% for bookType in bookTypeList %}option value{{ bookType.id }}{% if book.bookType.id bookType.id %}selected{% endif %}{{ bookType.bookTypeName }}/option{% endfor %}/select/td/trtrtd图书价格/tdtdinput typetext nameprice value{{ book.price }}/td/trtrtd colspan2input typehidden nameid value{{ book.id }}input typesubmit value提交/td/tr/table /form /body /html再写一个update方法保存图书信息 def update(request):图书修改:param request::return:book BookInfo()book.id request.POST.get(id)book.bookName request.POST.get(bookName)book.publishDate request.POST.get(publishDate)book.bookType_id request.POST.get(bookType_id)book.price request.POST.get(price)book.save()return bookList(request)运行运行 urls.py里再加下映射 path(book/update, helloWorld.views.update),我们来测试下浏览器输入http://127.0.0.1:8000/booklist 模板删除数据 Django5 ORM框架提供了delete()方法来实现数据删除操作下面是一些常用的方式删除所有数据删除指定id数据根据filter条件删除删除。 删除所有数据 BookInfo.objects.all().delete()删除指定id数据 BookInfo.objects.get(id1).delete()根据条件删除多条数据 BookInfo.objects.filter(price__gte90).delete()我们来完善下前面的实例 views.py里先定义delete方法。 def delete(request, id):图书删除:param request::return:# 删除所有数据# BookInfo.objects.all().delete()# 删除指定id数据BookInfo.objects.get(idid).delete()# 根据条件删除多条数据# BookInfo.objects.filter(price__gte90).delete()return bookList(request)urls.py里加下映射 path(book/delete/int:id, helloWorld.views.delete),book/list.html里加下删除操作 a href/book/delete/{{ book.id }}删除/a删除后数据就消失了不信你自己试试 总结 本章主要认识了ORM框架 虚拟对象数据库也学习了如何对虚拟对象数据库进行增删改查操作。继续加油吧。
http://www.hkea.cn/news/14478493/

相关文章:

  • 有哪些可以做宣传旅游的网站沈阳推广平台哪个好
  • 世界顶尖名表瑞士网站不要中国手表网站云南网站制作多少钱
  • 简述建设iis网站的基本过程传奇网页游戏推荐囧游村
  • 做婚纱的网站吉安网站公司
  • 毕业设计代做网站价格专业做视频的网站有哪些内容
  • 网站收录查询api建设网站都需要准备什么
  • 百度站长工具网站认证wordpress怎么设置菜单
  • 如何自己做网站赚钱wordpress 采集蜘蛛
  • 做调查的网站‘华建建设集团网站
  • 网站备案类型做网站排行
  • 建设我们的网站政务网站建设原则
  • 手机端网站开发建设内容如何做全网影视网站
  • 中小企业网站建设服务公司网站文章要求
  • 郑州网站建设中心英语网站 php源码
  • 管理咨询师报考条件2022年深圳网站seo教程
  • 广告制作公司注册做网站优化需要做什么
  • 国内网站空间快消品网站建设
  • 网站优化3个关键词和10个关键词的区别网站收益
  • 在网站建设流程中编程属于()阶段wordpress建站事例
  • 信阳公司网站建设打开百度一下网页版
  • 静态网站后台找大学生做网站
  • aspcms分类信息网站青岛建设信息网
  • 电子商务网站建设的评估吉林省建设厅价格信息网站
  • 做设计找素材都有什么网站韩国风格网站
  • 北京企业建站技术秒拍wordpress插件
  • 网站生成手机页面wordpress瀑布流图片主题
  • 苏州seo网站推广哪家好深圳网站建设延安
  • 做推广可以上那些网站装修公司加盟费多少
  • 网站域名备案变更成华区建设局门户网站
  • 杭州网站开发企业wordpress oss压缩