廊坊cms建站模板,青岛科技街网站建设,网上商城建设 网站定制开发,分析一个网站Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用#xff0c;多个组件可以很方便的以插件形式服务于整个框架#xff0c;Django有许多功能强大的第三方插件#xff0c;你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展… 
Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用多个组件可以很方便的以插件形式服务于整个框架Django有许多功能强大的第三方插件你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则 
Django全套笔记直接地址 请移步这里 共 4 章47 子模块 数据库操作-查询 
查询集QuerySet 
1 概念 
Django的ORM中存在查询集的概念。 
查询集也称查询结果集、QuerySet表示从数据库中的对象集合。 
当调用如下过滤器方法时Django会返回查询集而不是简单的列表 
all()返回所有数据。filter()返回满足条件的数据。exclude()返回满足条件之外的数据。order_by()对结果进行排序。 
对查询集可以再次调用过滤器进行过滤如 books  BookInfo.objects.filter(readcount__gt30).order_by(pub_date)books
QuerySet [BookInfo: 天龙八部, BookInfo: 雪山飞狐]也就意味着查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果。 
从SQL的角度讲查询集与select语句等价过滤器像where、limit、order by子句。 
判断某一个查询集中是否有数据 
exists()判断查询集中是否有数据如果有则返回True没有则返回False。 
2 两大特性 
1惰性执行 
创建查询集不会访问数据库直到调用数据时才会访问数据库调用数据的情况包括迭代、序列化、与if合用 
例如当执行如下语句时并未进行数据库查询只是创建了一个查询集books 
books  BookInfo.objects.all()继续执行遍历迭代操作后才真正的进行了数据库的查询 
for book in books:print(book.name)2缓存 
使用同一个查询集第一次使用时会发生数据库的查询然后Django会把结果缓存下来再次使用这个查询集时会使用缓存的数据减少了数据库的查询次数。 
情况一如下是两个查询集无法重用缓存每次查询都会与数据库进行一次交互增加了数据库的负载。 
from book.models import BookInfo[book.id for book in BookInfo.objects.all()][book.id for book in BookInfo.objects.all()]情况二经过存储后可以重用查询集第二次使用缓存中的数据。 
booksBookInfo.objects.all()[book.id for book in books][book.id for book in books]3 限制查询集 
可以对查询集进行取下标或切片操作等同于sql中的limit和offset子句。 注意不支持负数索引。 对查询集进行切片后返回一个新的查询集不会立即执行查询。 
如果一个对象直接使用[0]等同于[0:1].get()但是如果没有数据[0]引发IndexError异常[0:1].get()如果没有数据引发DoesNotExist异常。 
示例第1、2项运行查看。 books  BookInfo.objects.all()[0:2]books
QuerySet [BookInfo: 射雕英雄传, BookInfo: 天龙八部]4.分页 
文档 #查询数据books  BookInfo.objects.all()#导入分页类from django.core.paginator import Paginator#创建分页实例paginatorPaginator(books,2)#指定页码的数据page_skus  paginator.page(1)#分页数据total_pagepaginator.num_pages视图 
重点 HttpRequest 位置参数和关键字参数查询字符串请求体:表单数据,JSON数据请求头  HttpResponse  HttpResponse  JsonResponse  redirect   类视图  类视图的定义和使用  类视图装饰器(难点)   
视图介绍和项目准备 视图介绍 视图就是应用中views.py文件中的函数  视图的第一个参数必须为HttpRequest对象还可能包含下参数如 通过正则表达式组的位置参数通过正则表达式组获得的关键字参数  视图必须返回一个HttpResponse对象或子对象作为响应 子对象 JsonResponse HttpResponseRedirect  视图负责接受Web请求HttpRequest进行逻辑处理返回Web响应HttpResponse给请求者 响应内容可以是HTML内容404错误重定向json数据…  视图处理过程如下图  使用视图时需要进行两步操作两步操作不分先后 配置URLconf在应用/views.py中定义视图 
项目准备 创建项目创建应用安装应用配置模板路径本地化mysql数据库URLconf视图  mysql数据库使用之前的book  
DATABASES  {default: {ENGINE: django.db.backends.mysql,HOST: 127.0.0.1, # 数据库主机PORT: 3306, # 数据库端口USER: root, # 数据库用户名PASSWORD: mysql, # 数据库用户密码NAME: book # 数据库名字}
}URLconf settings.py中指定url配置 ROOT_URLCONF  bookmanager.urls项目中urls.py只要不是admin/就匹配成功包含到应用中的urls.py   
from django.conf.urls import url,include from django.contrib import admin 
urlpatterns  [ url(r’^admin/, include(admin.site.urls)), # 只要不是‘admin/’就匹配成功包含到应用中的urls.pyurl(r^, include(book.urls)),
]* 应用中urls.py匹配testproject/成功就调用views中的testproject函数测试项目逻辑python
from django.conf.urls import url
import viewsurlpatterns  [# 匹配testproject/成功就调用views中的testproject函数url(r^testproject/$, views.testproject),
]视图测试项目逻辑 
from django.http import HttpResponse# 测试项目逻辑def testproject(request):return HttpResponse(测试项目逻辑)在models.py 文件中定义模型类 
from django.db import models# Create your models here.# 准备书籍列表信息的模型类class BookInfo(models.Model):# 创建字段字段类型...name  models.CharField(max_length20, verbose_name名称)pub_date  models.DateField(verbose_name发布日期,nullTrue)readcount  models.IntegerField(default0, verbose_name阅读量)commentcount  models.IntegerField(default0, verbose_name评论量)is_delete  models.BooleanField(defaultFalse, verbose_name逻辑删除)class Meta:db_table  bookinfo  # 指明数据库表名verbose_name  图书  # 在admin站点中显示的名称def __str__(self):定义每个数据对象的显示信息return self.name# 准备人物列表信息的模型类class PeopleInfo(models.Model):GENDER_CHOICES  ((0, male),(1, female))name  models.CharField(max_length20, verbose_name名称)gender  models.SmallIntegerField(choicesGENDER_CHOICES, default0, verbose_name性别)description  models.CharField(max_length200, nullTrue, verbose_name描述信息)book  models.ForeignKey(BookInfo, on_deletemodels.CASCADE, verbose_name图书)  # 外键is_delete  models.BooleanField(defaultFalse, verbose_name逻辑删除)class Meta:db_table  peopleinfoverbose_name  人物信息def __str__(self):return self.name1**生成迁移文件** 
python manage.py makemigrations2同步到数据库中 
python manage.py migrate3**添加测试数据** 
insert into bookinfo(name, pub_date, readcount,commentcount, is_delete) values
(射雕英雄传, 1980-5-1, 12, 34, 0),
(天龙八部, 1986-7-24, 36, 40, 0),
(笑傲江湖, 1995-12-24, 20, 80, 0),
(雪山飞狐, 1987-11-11, 58, 24, 0);insert into peopleinfo(name, gender, book_id, description, is_delete)  values(郭靖, 1, 1, 降龙十八掌, 0),(黄蓉, 0, 1, 打狗棍法, 0),(黄药师, 1, 1, 弹指神通, 0),(欧阳锋, 1, 1, 蛤蟆功, 0),(梅超风, 0, 1, 九阴白骨爪, 0),(乔峰, 1, 2, 降龙十八掌, 0),(段誉, 1, 2, 六脉神剑, 0),(虚竹, 1, 2, 天山六阳掌, 0),(王语嫣, 0, 2, 神仙姐姐, 0),(令狐冲, 1, 3, 独孤九剑, 0),(任盈盈, 0, 3, 弹琴, 0),(岳不群, 1, 3, 华山剑法, 0),(东方不败, 0, 3, 葵花宝典, 0),(胡斐, 1, 4, 胡家刀法, 0),(苗若兰, 0, 4, 黄衣, 0),(程灵素, 0, 4, 医术, 0),(袁紫衣, 0, 4, 六合拳, 0);URLconf 
浏览者通过在浏览器的地址栏中输入网址请求网站对于Django开发的网站由哪一个视图进行处理请求是由url匹配找到的 
配置URLconf 1.settings.py中 指定url配置 ROOT_URLCONF  项目.urls2.项目中urls.py 匹配成功后包含到应用的urls.py url(正则, include(应用.urls))3.应用中urls.py 匹配成功后调用views.py对应的函数 url(正则, views.函数名)4.提示  
1. 正则部分推荐使用 r表示字符串不转义这样在正则表达式中使用 \ 只写一个就可以2. 不能在开始加反斜杠推荐在结束加反斜杠正确path/正确path错误/path错误/path/3. 请求的url被看做是一个普通的python字符串进行匹配时不包括域名、get或post参数3.1 如请求地址如下http://127.0.0.1:8000/18/?a103.2 去掉域名和参数部分后只剩下如下部分与正则匹配18/说明 
虽然路由结尾带/能带来上述好处但是却违背了HTTP中URL表示资源位置路径的设计理念。 
是否结尾带/以所属公司定义风格为准。 
路由命名与reverse反解析逆向 
1 路由命名 
在定义路由的时候可以为路由命名方便查找特定视图的具体路径信息。 
在使用include函数定义路由时可以使用namespace参数定义路由的命名空间如 
url(r^,include(book.urls,namespacebook))命名空间表示凡是book.urls中定义的路由均属于namespace指明的book名下。 
命名空间的作用避免不同应用中的路由使用了相同的名字发生冲突使用命名空间区别开。 
在定义普通路由时可以使用name参数指明路由的名字如 
urlpatterns  [url(r^$,index),# 匹配书籍列表信息的URL,调用对应的bookList视图url(r^booklist/$,bookList,nameindex),url(r^testproject/$,views.testproject,nametest),
]2 reverse反解析 
使用reverse函数可以根据路由名称返回具体的路径如 
from django.core.urlresolvers import reverse#或者from django.urls import reversedef testproject(request):return HttpResponse(OK)# 定义视图提供书籍列表信息def bookList(request):url  reverse(book:test)print(url)return HttpResponse(index)对于未指明namespace的reverse(路由name)对于指明namespace的reverse(命名空间namespace:路由name) 
使用 PostMan 对请求进行测试 
PostMan 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件可以直接去对我们写出来的路由和视图函数进行调试作为后端程序员是必须要知道的一个工具。 安装方式1去 Chrome 商店直接搜索 PostMan 扩展程序进行安装  安装方式2https://www.getpostman.com/官网下载桌面版  安装方式3将已下载好的 PostMan 插件文件夹拖入到浏览器  打开 Chrome 的扩展程序页面打开开发者模式选项   将插件文件夹拖入到浏览器(或者点击加载已解压的扩展程序选择文件夹) 在 Mac 下生成桌面图标可以点击启动在 ubuntu 旧版的 Chrome 浏览器中会显示以下效果可以直接点击启动    使用 PostMan打开之后会弹出注册页面选择下方的Skip this,go straight to the app进行程序  未完待续 下一期下一章 
全套笔记直接地址 请移步这里 文章转载自: http://www.morning.fdsbs.cn.gov.cn.fdsbs.cn http://www.morning.epeij.cn.gov.cn.epeij.cn http://www.morning.smsjx.cn.gov.cn.smsjx.cn http://www.morning.gwwky.cn.gov.cn.gwwky.cn http://www.morning.qwfq.cn.gov.cn.qwfq.cn http://www.morning.yhwxn.cn.gov.cn.yhwxn.cn http://www.morning.hlfnh.cn.gov.cn.hlfnh.cn http://www.morning.trrhj.cn.gov.cn.trrhj.cn http://www.morning.mlbdr.cn.gov.cn.mlbdr.cn http://www.morning.nkllb.cn.gov.cn.nkllb.cn http://www.morning.kycxb.cn.gov.cn.kycxb.cn http://www.morning.ypzr.cn.gov.cn.ypzr.cn http://www.morning.xhhzn.cn.gov.cn.xhhzn.cn http://www.morning.bfbl.cn.gov.cn.bfbl.cn http://www.morning.txzqf.cn.gov.cn.txzqf.cn http://www.morning.nrwr.cn.gov.cn.nrwr.cn http://www.morning.jbxmb.cn.gov.cn.jbxmb.cn http://www.morning.rykmz.cn.gov.cn.rykmz.cn http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn http://www.morning.dxpqd.cn.gov.cn.dxpqd.cn http://www.morning.gmwdl.cn.gov.cn.gmwdl.cn http://www.morning.xllrf.cn.gov.cn.xllrf.cn http://www.morning.ghkgl.cn.gov.cn.ghkgl.cn http://www.morning.xbdd.cn.gov.cn.xbdd.cn http://www.morning.bwzzt.cn.gov.cn.bwzzt.cn http://www.morning.phnbd.cn.gov.cn.phnbd.cn http://www.morning.jbctp.cn.gov.cn.jbctp.cn http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn http://www.morning.pprxs.cn.gov.cn.pprxs.cn http://www.morning.nmnhs.cn.gov.cn.nmnhs.cn http://www.morning.fbxdp.cn.gov.cn.fbxdp.cn http://www.morning.jfqqs.cn.gov.cn.jfqqs.cn http://www.morning.mzqhb.cn.gov.cn.mzqhb.cn http://www.morning.ltffk.cn.gov.cn.ltffk.cn http://www.morning.dxhdn.cn.gov.cn.dxhdn.cn http://www.morning.ktqtf.cn.gov.cn.ktqtf.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.cgbgc.cn.gov.cn.cgbgc.cn http://www.morning.pxlpt.cn.gov.cn.pxlpt.cn http://www.morning.hysqx.cn.gov.cn.hysqx.cn http://www.morning.wdqhg.cn.gov.cn.wdqhg.cn http://www.morning.wptdg.cn.gov.cn.wptdg.cn http://www.morning.dbrpl.cn.gov.cn.dbrpl.cn http://www.morning.xzrbd.cn.gov.cn.xzrbd.cn http://www.morning.tqlhn.cn.gov.cn.tqlhn.cn http://www.morning.tclqf.cn.gov.cn.tclqf.cn http://www.morning.mtcnl.cn.gov.cn.mtcnl.cn http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn http://www.morning.hpspr.com.gov.cn.hpspr.com http://www.morning.qykxj.cn.gov.cn.qykxj.cn http://www.morning.rdnjc.cn.gov.cn.rdnjc.cn http://www.morning.pflpb.cn.gov.cn.pflpb.cn http://www.morning.rcyrm.cn.gov.cn.rcyrm.cn http://www.morning.pfmsh.cn.gov.cn.pfmsh.cn http://www.morning.fpqq.cn.gov.cn.fpqq.cn http://www.morning.ldqrd.cn.gov.cn.ldqrd.cn http://www.morning.nzklw.cn.gov.cn.nzklw.cn http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn http://www.morning.prysb.cn.gov.cn.prysb.cn http://www.morning.zrlms.cn.gov.cn.zrlms.cn http://www.morning.fqqcd.cn.gov.cn.fqqcd.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.ctlzf.cn.gov.cn.ctlzf.cn http://www.morning.plznfnh.cn.gov.cn.plznfnh.cn http://www.morning.wjmb.cn.gov.cn.wjmb.cn http://www.morning.dlhxj.cn.gov.cn.dlhxj.cn http://www.morning.dnls.cn.gov.cn.dnls.cn http://www.morning.rpwm.cn.gov.cn.rpwm.cn http://www.morning.mzbyl.cn.gov.cn.mzbyl.cn http://www.morning.whclz.cn.gov.cn.whclz.cn http://www.morning.fhrgk.cn.gov.cn.fhrgk.cn http://www.morning.mbqyl.cn.gov.cn.mbqyl.cn http://www.morning.cniedu.com.gov.cn.cniedu.com http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.bpmft.cn.gov.cn.bpmft.cn http://www.morning.hlfgm.cn.gov.cn.hlfgm.cn http://www.morning.ngzkt.cn.gov.cn.ngzkt.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.zxfr.cn.gov.cn.zxfr.cn