跟大佬学django-HTTPURL模型:ORM

Posted xiaxiaoxu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟大佬学django-HTTPURL模型:ORM相关的知识,希望对你有一定的参考价值。

什么是HTTP

访问网站经常要用到HTTP,HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是客户端(比如计算机的浏览器、网络爬虫程序)和服务器端(网站)请求和应答的标准(TCP),封装了Web服务的整个过程。通常,有客户端发起请求,建立到服务器指定端口(默认为80)TCP连接。服务器在指定端口监听客户端的请求,一旦受到,就像客户端返回状态信息(比如“HTTP/1.1 200”)和内容信息(如请求的文件、错误消息或者其他信息),这就是响应。简单地说,HTTP要做的事情如下。

请求(request):客户端到服务器端。

响应(response):服务器端到客户端。

HTTP/1.1协议共定义了8中请求方式,分别是:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE和CONNECT。注意这些请求方式的名称都是大写,不要用小写。

GET:向指定的服务器发出请求,主要用于读取信息并显示。

POST:向指定服务器提交数据,请求服务器进行处理(如提交表达或者上传文件)

随着技术的发展,现在另外一种协议正在被广泛使用—HTTPS,全程是Hyper Text Transfer Protocol Secure,比HTTP多了一个secure。前面提到了HTTP默认的端口是80,而HTTPS默认的端口是443。相比HTTP,HTTPS安全性更高,因为HTTP以明文方式封装信息,如果被某些抓包工具获得,很容易分析出其内容,而HTTPS以加密的方式传送信息,这也是它主键流行的原因。

 

什么是URL

要在客户端访问服务器端,需要知道访问哪个服务器(服务器的位置),这就是URL要做的事情。URL全程是(Uniform/Universal Resource Locator,翻译为“统一资源定位符”,俗称网页地址(网址)。)

 

有了URL,就标志着步入了网络时代。

 

URL的标准格式是:协议类型://服务器地址(必要时需加上端口号)/路径/文件名。

 

协议类型:可以是HTTP,也可以使HTTPS。

服务器地址:通常为域名,比如itdiffer.com,也可以是IP地址。如果是默认的80端口,则不需要写,否则需要写上端口。

路径:以“/”区别目录。对于GET请求方式,还可以用“?”发起参数,每个参数以“&”隔开,再以“=”分开参数名称与值。

文件名:如果有必要协商,优势可以省略,有服务器根据路径匹配响应程序文件。

 

本教程中的项目因为是在本地调试,所以可以使用http://域名:8080/path或者http://ip:8080/path的方式,读者可以通过修改本地的域名,将域名或者ip替换为自己喜欢的域名(linux系统修改/etc/hosts文件,windows系统可以修改system32/drivers/etc/host文件)

模型:ORM

在早期的网站中,都是把需要在网页上呈现的信息直接写到html文件中,这种类型的内容是静态的,现在网站中的某些部分依然存在这种静态网页,比如很多网站中的“关于本站”的简单介绍就是静态的。

随着网站功能的增加,需要为访问者提供动态内容。动态内容就是当用户发起访问请求时,网站实时地从数据库提取内容并呈现在网页上。在这类动态网站中,大多数是通过数据库实现对数据的保存和读取的,所以数据库是网站最基本和底层的组成部分。

python本身有读取数据库的模块,所以可以通过SQL直接实现程序和数据库的交互。django用另外一种方式解决了这个问题,在这种方式中不需要开发者使用SQL语句,而是使用更python发化的方式实现对数据库的操作,这就是ORM,即Object-Relational Mapping(对象关系映射)。

 

ORM的作用是在关系型数据库和业务实体对象之间进行映射,这样在操作业务对象时,就不需要再去和复杂的SQL语句打交道,只需要简单地操作对象的属性和方法。

django的数据库模型层大量使用ORM,这是一个仁者见仁、智者见智的事情,或者说这种处理方式并非都好,也有缺点。在通常的开发中,这种方式能够给我们带来很大的便利:

可移植性强。ORM通常具有很好的可移植性,本项目中使用SQLite数据库,如果想改为mysql数据库,只需要在settings.py文件中做好数据库的配置,然后进行迁移数据的操作即可完成数据库的一直,不需要对ORM进行任何修改。

安全性好。使用ORM后很少或者不需要执行SQL,所以这时就不必担心注入SQL注入等形式的攻击了,更何况ORM还提供了一个自动引用和转义输入变量的机制,开发者不用在安全性的问题上花费太多时间,可以将精力集中在程序的业务逻辑和开发上。

查询语法简单。面对较为复杂的查询,如果使用SQL语句,常常要写很多;而是用了ORM,因为它本质上就是python对象,能够让本来复杂的SQL语句变得简洁,所以能够实现更多的技巧,

 

上述三点,足以让我们至少在相当一部分项目中使用django封装的这个数据库模型层完成对数据库的操作,就中小项目而言,这种方式足够支撑业务需要,并且能够快速开发。

 

django的ORM表现方式就是编写数据模型类,这些类可以写到任何文件中,通常写在每个应用的models.py文件中。每个数据库模型类都是django.db.models.Model的子类。

应用的名称(小写字母)和数据模型类的名称(小写字母)共同组成一个数据库表的名称(“appname”_“modelname”,例如blog_blogarticles)

 

当数据模型类写好之后,通过执行django的数据迁移操作(python manage.py makemigrations, python manage.py migrate)就能够创建相应的数据库表,用来保存网站项目的数据。以后如果要修改数据库表的结构,只需要修改数据模型类,迁移数据就能实现数据库结构的调整。所以,即使现在还不懂或不太懂SQL,也挡不住用户学习django的步伐。

以上是关于跟大佬学django-HTTPURL模型:ORM的主要内容,如果未能解决你的问题,请参考以下文章

跟大佬学django-发布博客文章

十余年谷歌大佬的见解:成为算法工程师到底需要学些什么?

清华大佬超详细讲解进阶学Python之 Python的函数基础

Frank的OIer之路

数学建模天天学_第四天_多元线性回归模型

数学建模天天学_第四天_多元线性回归模型