专栏首页机器学习与统计学Python 零基础完成网站搭建~~

Python 零基础完成网站搭建~~

1、讲解Python Web开发,必定离不开HTTP。有多少人知道HTTP的工作流程呢?

2、我们访问网站,网站服务器把内容反馈给我们。网站服务器是什么?

3、都说HTTP网站不安全,要变成HTTPS的。如何建立HTTPS网站?

本文就针对以上问题做简单解答,更详细的内容请阅读《Python高效开发实战――Django、Tornado、Flask、Twisted(第3版)》一书。

PART.

01

HTTP流程

HTTP是Web浏览器与Web服务器之间通信的标准协议,是Internet上能够可靠地交换文件的重要基础。HTTP的基本交互流程如图1所示。

图1 HTTP的基本交互流程

每个HTTP站点都有一个服务器进程监听着TCP的HTTP端口,HTTP端口默认为80,也可由服务器进程设置为其他端口。

当服务器发现有客户端建立连接并提交了一个 HTTP 请求(Request)后,就根据请求的内容执行相应的操作,并将结果返回给客户端(Response)。

通常客户在浏览器中发起一次网络访问的步骤如下。

(1)输入网址并按Enter键,比如访问http://mysite:8080/app/index.html。

(2)浏览器通过域名系统查询mysite的真实IP,比如212.34.98.20。

(3)向服务器212.34.98.20的8080端口发起TCP连接请求并建立连接。

(4)发送HTTP请求的内容,包括访问的地址/app/index.html、访问方式GET、浏览器本身的产品名等。

(5)服务器返回/app/index.html中的数据作为Response发送给客户端。如果请求的不是一个文件,则服务器需要执行相应的代码,动态生成且返回给客户端。

(6)浏览器接收到结果后关闭与服务器的TCP连接。

(7)浏览器将接收到的结果呈现在显示器上。

注意:域名解析本身不是HTTP的一部分,客户端应在向服务器建立TCP连接之前就通过DNS服务器完成域名解析工作。

以上是最典型的HTTP流程,当今的HTTP版本还允许客户端在一次HTTP请求完成后不关闭TCP连接,以便第2次发送HTTP请求时复用该连接,从而达到减少系统整体开销的目的,此技术在HTTP中叫作keep-alive。

PART.

02

基于HTTP的网站开发

经过几十年的发展,已经出现几个成熟的处理HTTP的知名Web服务器。

这些Web服务器可以解析(handle)HTTP,当Web服务器接收到一个HTTP请求时,会根据配置的内容返回一个静态HTML页面或者调用某些代码动态生成返回结果。

Web服务器把动态响应(dynamic response)产生的委托(delegate)给其他一些程序,例如Python代码、JSP(JavaServer Pages)脚本、Servlets、ASP(Active Server Pages)脚本等。

无论它们的目的如何,这些服务器端(server-side)的程序通常会产生一个HTTP响应让浏览器浏览。

由于目标操作系统、应用场景及商业目的的不同,当今主流的Web服务器各有特色,将它们的特性简单地概括如下。

  • Apache:是世界上用得最多的Web服务器,市场占有率达60%左右。由于其卓越的性能,Tomcat或JBoss等很多其他Web服务器使用Apache为自己提供HTTP接口服务。
  • Nginx:是一款轻量级、高性能的HTTP和反向代理服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
  • IIS:微软的Web服务器产品。由于Windows的影响,IIS是目前最流行的Web服务器产品之一,它的最大优势当然是对微软ASP.net及其周围产品的支持。
  • Tomcat:是一个开源服务器,是Java Servlet 2.2和JavaServer Pages 1.1技术的标准实现。
  • JBoss:是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB 3的规范。但JBoss的核心服务不包括支持Servlet、JSP的Web容器,一般与Tomcat或Jetty绑定使用。

当前的主流Web服务器都实现了主流语言的可调用接口标准,这些标准如下。

  • CGI:Common Gateway Interface,CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
  • ISAPI:Internet Server Application Program Interface,是微软提供的一套面向Web服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,例如提供了过滤器应用程序的接口。
  • WSGI:Web Server Gateway Interface,是一套专为Python语言制定的网络服务器标准接口。本书将要学习的Python Web框架均以WSGI为基础标准。

从客户端浏览器的角度来看,它的每次访问是通过HTTP访问Web服务器从而获得某种服务(下载文件、查看页面、订购商品等)的,但实际上Web服务器仅起到桥梁的作用,即将浏览器的HTTP请求解码,转换成服务器端程序能够识别的接口调用方式,然后将服务器端程序生成的返回封装成HTTP Response,并返回给浏览器。

服务器端程序、Web服务器、客户端之间的关系如图2所示。

图2 服务器端程序

最简单的服务器端程序可以是直接读取某文件或返回固定的网页内容;稍复杂一些的服务器端程序需要处理客户端通过HTTP、URL、HTML中传入的参数、动态执行逻辑代码、在数据库或缓存中读写数据等一系列操作,才能最终生成调用结果。

PART.

03

实战演练

建立安全的HTTPS网站

普通HTTP站点的协议与数据以明文方式在网络上传输,而HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的HTTP通道,即在HTTP下加入SSL层,通过SSL达到数据加密及身份认证的功能。

目前几乎所有的银行、证券、公共交通的网站均以HTTPS方式搭建。

OpenSSL是一个强大的免费Socket层密码库,蕴含了主要的密码算法、常用的密钥和证书封装管理功能及SSL协议。目前大多数网站通过OpenSSL工具包搭建HTTPS站点,其步骤如下。

  • 在服务器中安装OpenSSL工具包。
  • 生成SSL密钥和证书。
  • 将证书配置到Web服务器。
  • 在客户端安装CA证书。

本节演示在Linux Ubuntu下OpenSSL的使用方法,以及Nginx在Linux下的证书配置方式。

Windows中OpenSSL的使用方式与Linux中的完全一致,读者可以自行尝试。

1.在服务器中安装OpenSSL工具包

通过如下两条命令安装OpenSSL:

# sudo apt-get install openssl
# sudo apt-get install libssl-dev

命令运行成功后,OpenSSL命令和配置文件将被安装到Linux系统目录中。

  • OpenSSL命令:/usr/bin/openssl。
  • 配置文件:/usr/lib/ssl/*。

2.生成SSL密钥和证书

通过如下步骤生成CA证书ca.crt、服务器密钥文件server.key和服务器证书server.crt:

// 生成CA 密钥
# openssl genrsa -out ca.key 2048

// 生成CA证书,days参数以天为单位设置证书的有效期。在本过程中会要求输入证书的所在地、公司名、站点名等
# openssl req -x509 -new -nodes -key ca.key -days 365 -out ca.crt

// 生成服务器证书RSA的密钥对
# openssl genrsa -out server.key 2048
// 生成服务器端证书CSR,本过程中会要求输入证书所在地、公司名、站点名等
# openssl req -new -key server.key -out server.csr
// 生成服务器端证书 ca.crt
# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365

上述命令生成服务器端证书时,必须在Common Nanme(CN)字段中如实输入站点的访问地址。即如果站点通过www.mysite.com访问,则必须定义CN=www.mysite.com;如果通过IP地址访问,则需设置CN为具体的IP地址。

3.配置Nginx HTTPS服务器

在站点配置文件/etc/nginx/sites-enabled/default中添加如下server段,可以定义一个基于HTTPS的接口,该接口的服务器端程序仍旧为uWSGI接口127.0.0.1:3011。

server {
listen       443;       # HTTPS服务端口
server_name 0.0.0.0;      # 本机上的所有IP地址
ssl                  on;
ssl_certificate  /etc/nginx/ssl/server.crt;
ssl_certificate_key  /etc/nginx/ssl/server.key;


location \ {
uwsgi_pass http://127.0.0.1:3011;
}
}

其中需要注意的是参数ssl_certificate和ssl_certificate_key需要分别指定生成的服务器证书和服务器密钥的全路径文件名。

至此,我们已经可以使用浏览器访问服务器的443端口进行HTTPS加密通信了。再也不用为如何学习Python迷茫了,《Python高效开发实战——Django、Tornado、Flask、Twisted(第3版)》一书本着“纯碎干货,实用至上”的原则,让我们成为真正的全栈开发人才。

▊《Python高效开发实战——Django、Tornado、Flask、Twisted(第3版)

刘长龙 著

  • 畅销书Python Web编程集大成之作,全面升级
  • Python 3.8、Django 3、Tornado 6、Flask 1.1.2、Twisted 20
  • 作者多年Python项目实践经验及代码编写技巧分享
  • 助你零基础完成网站搭建、数据库设计、前后端开发

本书分为3篇:上篇是Python基础,带领初学者实践Python开发环境,掌握基本语法,同时对网络协议、Web客户端技术、数据库建模等网络编程基础进行深入浅出的学习;中篇是Python框架,学习当前***的Python Web框架,即Django、Tornado、Flask和Twisted,达到对各种Python网络技术融会贯通的目的;下篇是Python框架实战,分别使用4种框架进行项目实践,利用其各自的特点开发适用于不同场景的网络程序。本书内容精练、重点突出、实例丰富、讲解通俗,是广大网络应用设计和开发人员不可多得的一本参考书。

本文分享自微信公众号 - 机器学习与统计学(tjxj666)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WordPress 搭建网站流程-零基础搭建 wordpress 教程

    接触 WordPress 时间久了,魏艾斯博客发现很多人都想学习如何用 WordPress 搭建网站,苦于没人领进门不明白从哪里开始,在门外乱转也不得要领。老魏...

    魏艾斯博客www.vpsss.net
  • 前言

    Django 是使用 Python 编写的一个开源 Web 框架,可以用它来快速搭建一个高性能的网站。 Django makes it easier to b...

    追梦人物
  • Labs Contest 云学院线上代码竞赛 !

    在 Function As A Service,Serverless,PaaS 大行其道的今天,你是否已经忘记了自己动手搭建所需环境的乐趣呢?第一次使用 yum...

    小Q
  • 史上最全,0基础快速入门Python

    首先,在学习之前一定会考虑一个问题——Python版本选择 对于编程零基础的人来说,选择Python3。 ? 1、学习基础知识 首先,Python 是一个有条理...

    BestSDK
  • Python3网络爬虫实战-5、Web库

    Web 想必我们都不陌生,我们现在日常访问的网站都是 Web 服务程序搭建而成的,Python 同样不例外也有一些这样的 Web 服务程序,比如 Flask、D...

    py3study
  • 一文了解你是否适合学习pythpn?

    编程对于任何一个新手来说都不是一件容易的事情,特别是在中国基本以C语言作为启蒙语言的国家。Python对于任何一个想学习的编程的人来说的确是一个福音,阅读Pyt...

    一墨编程学习
  • 腾讯云大学「学习路径—云计算、小程序、运维、人工智能」助力开发者轻松上云

    腾讯云大学面向云生态用户的一站式学习成长平台,提供丰富优质的云计算、大数据、人工智能等课程内容,以及权威的腾讯云技术认证体系。

    可可爱爱没有脑袋
  • Windows下Tensorflow的环境安装和Hello world

    导语 深度学习 数字识别 Tensorflow 环境搭建 本人对深度学习是0基础,python也是没有用过,最近很流行深度学习,因此也想学习一下,...

    MelonTeam
  • python爬虫学习,这里有一条高效的学习路径

    对于小白来说,爬虫可能是一件非常复杂、技术门槛很高的事情。比如有的人认为学爬虫必须精通 Python,然后哼哧哼哧系统学习 Python 的每个知识点,很久之后...

    python学习教程
  • 网站目录/绝对路径/相对路径-零基础搭建wordpress教程

    网站基本知识包括很多方面,网站结构、网页路径、域名、服务器、建站等等,我们已经写过域名和新手如何选择服务器了,正好最近遇到群友对网站基本知识有些疑问,魏艾斯博客...

    魏艾斯博客www.vpsss.net
  • 零基础学Python--搭建你的开发环境

    也许有些小伙伴看了上一篇文章之后,发觉Python是真的很简单。但是不知道学了到底有什么用,其实应用非常的广,像是网络的前端后端、机器学习、计算机视觉,甚至你需...

    一墨编程学习
  • 实验列表

    1.Linux 基础入门 https://cloud.tencent.com/developer/labs/lab/10000

    蒋小爱
  • 零基础Python学习路线,小白的进阶之路!

    近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多。一些学习Python的小白在学习初期,总希望能够得到一份Python学习路线图,小编经...

    一墨编程学习
  • python入门学习步骤,希望对你有所帮助

    学习python的过程分为四个阶段:了解python、找个例子练手、做项目、能力提升。

    python学习教程
  • 关于Python爬虫,这里有一条高效的学习路径

    关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 ? 如果你仔细观察,就不难发现,懂爬...

    昱良
  • Python爬虫系列(一)初期学习爬虫的拾遗与总结(11.4更)

    ---- 最近,为了提取裁判文书网的有关信息,自己迈入Python的学习之路,写了快两周的代码,自己写这篇文章总结下踩过的坑,还有遇到一些好的资料和博客等总结下...

    致Great
  • 学好Python-新手小白如何做?

    新手小白如何学好Python?有哪些参考方法吗?这是一个老生常谈的话题了。今天为大家带来两位前辈的分享,他们给出了非常实用的方法和思路,希望对你有所帮助。

    小小科
  • 关于Python爬虫,这里有一条高效的学习路径

    如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,...

    Python进阶者
  • 私藏已久的7个Python视频教程

    导读:有没有Python视频教程?有,甚至还有机会接触到国际顶尖大学的计算机视频课程。

    华章科技

扫码关注云+社区

领取腾讯云代金券