简介:许多朋友问有关Djangoapi如何查询的问题。本文的首席CTO笔记开始为您的参考做出详细的答案。我希望这对每个人都会有所帮助!让我们一起看看!
本文目录清单:
1. python + django multi -table查询方法要求提供建议2. django如何称呼youdao dictionary或jinshan dictionary api来获取单词发音?3。如何使用Django提供的API借口来使用网站4的API。从A.LET中选择名称,请回忆第5章中有关书籍(书)的数据模型:fromdjango.dbimportmodelsclasspublisher(models.model):name = models.charfield(max_length = 30)地址= models.chafield.chafield(maxwlyd(max valxwfield(max valxwfield)最大valxwlldin的说明第5章,数据库对象的特定字段的值只需要直接使用属性。例如,要确定具有ID的书的标题,我们执行此操作:frofMysite.books.modelsimportbookb =book.objects.get(id = 50)b.titleu'thedjangobook',但之前,有一个我们之前没有提及的是exourcekey或manytomanyfield的关联对象字段,它们略有不同。当您访问exourcekey值时,当您获得外汇字段时,您将获得RELevant数据模型对象。例如:b = book.objects.gets(id = 50)b.publisherb.publisher.websiteu'''''''''''''''''''''在关系的另一端,由于不对称的关系而有所不同。objects.get(name ='apusepublishing')p.book_set.all()[,] racebook_set只是一个queryset(请参阅第5章),因此它可以实现数据过滤和除法,例如:1p = publisher。objects.get(name ='aprespublishing')p.book_set.filter(name__icontains ='django')[,]属性名称book_set由小写(例如书)组成 使用模型名称。Mart-to-manyvalues与多价值(多到众多值)相同,但是我们正在处理QuerySet而不是模型实例。例如,如何在此处查看本书的作者:b = book.objects.gets(id = 50)b.authors.all()[,] b.authors.filter(first_name ='adrian')[] b.authors.filter(first_name ='adam')[)[]反向查询也是可能的。要查看作者的所有书籍,请使用funer.book_set,就像这样:a = auter.objects.get(first_name ='admin',last_name ='holovaty')a.book_set.seb.all()[,]就像使用外键字段一样,属性名称book_set是在数据模型(模型)之后添加的。更改数据库模式(数据库chema)3当我们在第5章中介绍syncdb命令时,我们注意到Syncdb仅创建了一个数据库中的表。Essence如果您添加或修改数据模型中的字段,或删除数据模型,则需要在数据库中手动修改它。本节将解释如何做:当修改处理模型时,重要的是要记住Django数据库层的工作流程。如果模型包含一个尚未在数据库中建立的字段,Django将报告错误的信息。当您首先使用DJANGO数据库API请求表(也就是说,它将在运行时造成错误而不是编译).3django不在乎数据库表中的模型中是否没有定义列。DJANGO不在乎是否存在是否存在未表示的表单1通过数据库中的模型。1更改模型的模型体系结构意味着需要更改Python代码和数据库。当您需要将字段添加到产品设置表(或模型)时,添加字段1时,要使用的技术是使用Django来不关心模型中的列的特征是否不关心。该策略是在数据库中添加字段,然后同步Django模型以包含新字段。3但是,3.但是, 这里有鸡肉和鸡肉的问题。因为您想知道新添加的SQL语句,所以您需要使用django的manage.pysqlass命令来查看它,这需要模型中存在的字段。(注意:您不必使用相同的SQL语句与Django创建一个新的领域,但这确实是一个好主意,可以使所有内容保持同步。)3解决此鸡肉问题的解决方案是发展环境中的变化,而不是发布环境。(您正在使用(您正在使用)测试/开发环境,对吗?新的createtable语句。关注新字段的定义。打开数据库的交互式命令界面(例如,psql或mysql,或者您可以使用manage.pydbshell).pydbshell).exectable可添加新列表。usepython的管理.pyshell验证是否通过导入模型和选择表单正确添加了新字段(例如,mymodel.objects.all()[5])。essence3然后在产品服务器上实现这些步骤。启动数据库的交互式界面。5在该数据库的交互式界面中执行开发环境步骤,第三步的AlterTable语句。将新字段添加到模型。如果您使用控制工具的某个版本,并且在第一步中,您在开发环境中进行了修改。现在,您可以在生产环境中更新代码(例如,如果使用颠覆,请执行svnupdate。restart Weberver使修改有效。让我们练习,例如在第5章中将num_pages字段添加到书籍模型中。首先总体而言,我们将将开发环境中的模型更改为以下表格:classBook(models.model):titlef__unicode __(self):return selfs.title
以下是词典的请求头以获得发音。您只需要将以下Hello替换为要查询的单词。
获取 /dictvoice?音频= hellotype = 2 http /1.1
接受: */ *
用户代理:Mozilla/5.0(构图; MSIE 9.0; Windows NT 6.1; WOW64; TRIDEN/5.0)
推荐人:;keyfrom = fanyi.smartresult
接受语言:ZH-CN
接受:gzip,放气
主持人:dict.youdao.com
连接:保持活力
WebService实际上是Web API,但是为了促进使用通用数据格式,例如XML。因此,您可以使用第三方应用程序(例如第三 - 方XML库)自己构建此类环境,或使用第三派对应用,例如Djangorestframework
模型是Django项目的基础。如果起初设计不当,那么在下一个开发过程中将遇到更多问题。或修改模型。这样做的后果是,在下一个开发过程中,我们必须做更多的努力来纠正这些错误。
因此,在修改模型时,我们必须尽可能多地考虑!以下是我们经常使用的一些工具和技术:
南方,对于数据迁移,我们将在每个Django项目中使用它。但是,当Django 1.7时,将会有Django.db。移民。
Django-Model-Utils,用于处理常见模式,例如TimessTampedModel。
django-extensions主要使用shell_plus命令,该命令将自动加载所有应用程序中的所有应用程序
1.基本原则
首先,在不同的应用程序中分发模型。如果您的Django项目中有20多个型号,则应考虑旋转该应用程序。我们建议每个应用程序的模型不超过5码。
其次,尝试使用ORM。我们需要的大多数数据库索引都可以通过对象相关模型来实现,ORM为我们带来了许多快捷方式,例如生成SQL语句,读取/更新数据库时的安全验证。因此,如果您可以使用简单的ORM语句,则应尝试尽可能多地使用ORM。只有当纯SQL语句大大简化ORM语句时,才使用纯SQL语句。并且,在编写纯SQL语句时,应优先使用RAW()然后使用frain()。
第三,如有必要,添加索引。添加db_index = tum tum to to Model非常简单,但是很难理解何时应该添加它。建立模型后,我们不会提前添加索引。索引:
当所有数据库查询中的使用率为10%-25%时
或当有真实数据时,或者可以正确估计使用索引后的效果确实令人满意
第四,请注意模型的继承。该模型的继承需要在Django中非常谨慎。Django提供了三种继承方法,1。Abstract Base类继承(请勿与Pyhton Standard库的ABC模块混合),2。Multi -Table(Multi -Table(Multi -Table(Multi -Table)模型继承。下表列出了这三个继承的优点和缺点:
Django的创建者和许多其他开发人员认为,多观看继承方法不是一个好方法。因此,我们强烈建议您不要使用此方法。以下是选择模型继承的一些常见方法:
如果只有少数模型重复了字段,则无需使用模型继承。您只需要将这些相同的字段添加到每个模型中。
如果您有足够的模型具有重复的字段,则大多数字段是由抽象基类继承的,并且将同一字段提取为抽象基类。
代理模型很少使用,与其他两个继承存在许多差异。
请不要使用多桌继承,因为它既消耗资源又消耗复杂。如果可以,请尝试使用OneTooneFields和Forefore。
在Django项目中,创建时间和修改时间的两个字段最有用。抽象基类继承的示例如下:
2. Django模型设计
如何设计良好的Django模型可能是最难,最复杂的话题。在这里,让我们看一些基本技能:
A。标准化
我们首先建议了解数据库归一化。如果您不知道这是什么,那么我们强烈建议您先阅读相关书籍,或搜索“关系数据库设计”或“数据库标准化”。在模型之前,应首先确保设计数据库。
b。缓存
正确使用缓存来帮助我们提高数据库的性能。详细信息,我们将在未来的文章中进一步介绍。
C.何时使用空和空白
在定义模型字段时,我们可以设置null = true和blank = true(默认值为false),知道何时设置null和空白对开发人员也非常重要。在以下表格中,我们如何列出一个,我们如何一个一个列出,我们如何一个一个列出。使用这两个选项:
D.何时使用binaryfield
在Django 1.6中,添加了二进制文件中的二进制数据(二进制数据或字节)。对于BinaryField,我们不能使用ORM的过滤器,不包括其他SQL操作。但是在少数情况下,我们将使用BinaryField,例如,MessagePack格式的内容,传感器接受的原始数据和压缩数据。但是应该注意的是,二进制数据通常非常大,因此可能会慢慢降低数据库。如果发生这种现象,我们可以存储文件中的二进制数据存储,然后使用文件字段存储文件的路径信息。
另外,请勿直接从BinaryField读取文件,并将其呈现给用户。因为,1。从数据库中读取和写作总是比文件系统慢;2.数据库备份将变得巨大,花更多的时间;它需要更多的时间; 3。获取文件的过程增加了此链接,从Django到数据库。
3.不要替换默认模型管理器
实际上,从ORM获得模型是通过Django的模型管理器完成的。Django为每个模型提供默认模型管理器。我们不建议替换它,因为::::
当使用模型继承时,模型将继承抽象基类模型的模型管理器,而无需继承非提交基类的经理。
Model的第一个模型管理器通常用作默认管理器。替换后,可能会出现不可预测的问题。
4.数据库事务(事务)
在Django 1.6中,每个数据库查询的ORM默认值是使用M.Create()或M.Update()时,每次timeIT都会简化对第一学者对ORM的理解的理解。但是缺点是,当一种视图包含两个数据库修改时,它可能会成功,但另一个视图可能会导致数据库不完整并带来很多危险。
解决此问题的方法是使用数据库事务。在即将到来的一系列数据库操作中,它包含在事务中。当其中一个失败时,其他操作将自动返回。Django 1.6为我们带来了一套新的简单简单简单的简单性。强大的交易机制使我们能够轻松地使用数据库事务。
A。将整个HTTP请求包装在交易中
Django为我们提供了一种简单的方法,可以将所有数据库操作包裹在交易中的HTTP请求中:
您只需要在数据库设置中添加'atomic_requests':TRUE选项,并且可以将整个HTTP请求包装在交易中。这样做的好处显然是安全的,但是劣势可能会下降。因此,我们必须采用更有针对性的交易。其次,应该注意的是,数据库的状态仅是数据库的状态,而不是其他数据库项目,例如发送电子邮件。因此,当涉及这些非数据库项目时,我们应该使用ittransaction.con_atomic_request()docoration()装饰(十年):
b。更清楚的交易控制
更清楚的是,交易控制意味着改善真实问题Web应用程序的性能,但这也意味着更多的开发时间。在大多数网站下,由于流量有限,Atomic_requests的使用就足够了。使用手动交易控制时,请注意:
不要进行数据修改的操作,应将其排除在交易之外
数据修改的操作应在交易中
在特殊情况下,您可以违反上述两个
应当指出的是,当视图返回django.http.streaminghttpresponse时,您应该将atomic_requests设置为false,或使用trassaction.non_atomic_requests修改视图。流由流触发的额外SQL查询将自动成为Django的Django Defaut Autocommit模式。
xxx.objects.get()
car.objects.get(id = 5)值得注意的是,get()方法只能用于检查列。如果返回结果后没有或超过一个,它将报告一个错误。.filter(ID = 5)的列表,允许为空,如果只有一个,则取了第一个
结论:以上是如何询问djangoapi的相关内容。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?