精华内容
下载资源
问答
  • Python Web 编程

    2020-09-10 21:29:48
    作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

    作者:billy
    版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

    Web 基础

    1. HTTP 协议
      我们平时都会通过百度查询内容,在这个过程中,用户浏览器被称为客户端,而百度网站被称为服务器。这个过程实质上就是客户端向服务器发起请求,服务器接收请求后,将处理后的信息(也成为响应)传给客户端。这个过程就是通过 HTTP 协议实现的。
      HTTP(HyperText Transfer Protocol)超文本传输协议,是互联网上应用最为广泛的一种网络协议。HTTP 是利用 TCP 在两台计算机(通常是 Web 服务器和客户端)之间传输信息的协议。客户端使用 Web 浏览器发起 HTTP 请求给 Web 服务器,Web 服务器发送被请求的信息给客户端

    2. Web 服务器
      当在浏览器输入 URL 后,浏览器会先请求 DNS 服务器,获得请求站点的 IP 地址(即根据 URL 地址 www.baidu.com 获取其对应的 IP 地址,如 104.193.88.123),然后发送一个 HTTP Request(请求)给拥有该 IP 的主机(百度的服务器在美国芝加哥),接着就会接收到服务器返回的 HTTP Response(响应),浏览器经过渲染后,以一种较好的效果呈现给用户。

    我们重点来看一下 Web 服务器,Web 服务器的工作原理可以概括为以下 4 个步骤:

    • 建立连接:客户端通过 TCP/IP 协议建立到服务器的 TCP 连接;
    • 请求过程:客户端向服务器发送 HTTP 协议请求包,请求服务器里的资源文档;
    • 应答过程:服务器向客户端发送 HTTP 协议答应包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理 “动态内容”,并将处理后得到的数据返回给客户端。有客户端解释 HTML 文档,在客户端屏幕上渲染图形结果;
    • 关闭连接:客户端与服务器断开连接;

    HTTP 协议的常用请求方法:

    方法 描述
    GET 请求指定的页面信息,并返回实体主体
    POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中
    HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
    PUT 从客户端向服务器传送的数据取代指定的文档的内容
    DELETE 请求服务器删除指定的页面
    OPTIONS 允许客户端查看服务器的性能

    HTTP 状态码含义:

    代码 含义
    1** 信息,请求收到,继续处理
    2** 成功,行为被成功地接收、理解和采纳
    3** 重定向,为了完成请求,必须进一步执行的动作
    4** 客户端错误,请求包含语法错误或者请求无法实现
    5** 服务器错误,服务器不能实现一种明显无效的请求

    具体每一项代表的含义,可以参考:HTTP状态码详解

    1. 前端基础
      对于 Web 开发,通常分为前端(Front-End)和后端(Back-End)。“前端” 是与用户直接交互的部分,包括 Web 页面的结构、Web 的外观视觉表现以及 Web 层面的交互实现。“后端” 更多的是与数据库进行交互,处理相应的业务逻辑。需要考虑的是如何实现功能、数据的存取、平台的稳定性与性能等。后端的编程语言包括 Python、Java、PHP、ASP.NET 等,而前端编程语言包括 HTML、CSS 和 JavaScript。

    HTML 是用来描述网页的一种语言。HTML 指的是超文本标记语言(Hyper Text Markup Language),它不是一种编程语言,而是一种标记语言。标记语言是一套标记标签,这种标记标签通常被称为 HTML 标签,它们是由尖括号包围的关键词,比如 。HTML 标签通常是成对出现的,第一个标签是开始标签,第二个标签是结束标签。Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容。

    CSS 是 Cascading Style Sheets(层叠样式表)的缩写。CSS 是一种标记语言,用于为 HTML 文档中定义布局。例如,CSS 涉及字体、颜色、边距、高度、宽度、背景图像、高级定位等方面。运用 CSS 样式可以让页面变的美观,就像爱那个化妆前和化妆后的效果一样。

    JavaScript 是一种可以嵌入在 HTML 代码中,由客户端浏览器运行的脚本语言。在网页中使用 JavaScript 代码,不仅可以实现网页特效,还可以响应用户请求,实现动态交互的功能。例如,在用户注册页面中,需要对用户输入信息的合法性进行验证,包括是否填写了 “邮箱” 和 “手机号”,填写的格式是否正确等。

    作为 Python Web 初学者,只要掌握基本的前端知识即可。想了解更多关于前端的内容,可以参考以下两个网站:

    静态服务器

    对于 Web 开发,我们需要让用户在浏览器中看到完整的 Web 页面(也就是 HTML),在 Web 中,纯粹的 HTML 格式的页面通常被称为 “静态页面”,早期的网站通常都是由静态页面组成的。例如马云早期的创业项目 “中国黄页” 网站就是由静态页面组成的静态网站。下面通过实例结合 Python 网络编程和 Web 编程,创建一个静态服务器

    1. 创建 views 文件夹,在 views 文件夹下创建 index.html 页面作为首页,index.html 的代码如下:
    <!DOCTYPE html>
    <html lang="UTF-8">
    <head>
        <title>
            我的博客
        </title>>
    </head>>
    <body class="bs-docs-home">
    
    <!--Docs master nav-->
    <header class="navbar navbar-static-top bs-docs-nav" id="top">
    <div class="container">
        <div class="navbar-header">
            <a href="/" class="navbar-brand">我的博客</a>>
        </div>
        <nav id="bs-navbar" class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/107725117">Python 进阶之路</a>
                </li>
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/97393033">Qt 进阶之路</a>
                </li>
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/104144719">我的网址收藏</a>
                </li>
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/93847054">设计模式</a>
                </li>
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/105390364">请善待90后</a>
                </li>
                <li>
                    <a href="/contact.html">联系博主</a>
                </li>
            </ul>
        </nav>
    </div>
    </header>>
    
    <!--Page content of coursel-->
    <main class="bs-docs-masthead" id="content" tabindex="-1">
        <div class="container">
            <span class="bs-docs-booticon bs-docs-booticon-lg bs-docs-booticon-outline">自我介绍</span>
            <p class="lead">博主主要从事于客户端、嵌入式、移动端的开发工作,酷爱研发,热于分享!</p>
            <p class="lead">
                <a href="/contact.html" class="btn btn-outline-inverse btn-lg">联系博主</a>
            </p>
        </div>
    </main>
    </body>>
    </html>>
    
    1. 在 views 文件夹下创建 contact.html 文件,作为跳转页面,contact.html 的代码如下:
    <!DOCTYPE html>
    <html lang="UTF-8">
    <head>
        <title>
            我的博客
        </title>>
    </head>>
    <body class="bs-docs-home">
    
    <!--Docs master nav-->
    <header class="navbar navbar-static-top bs-docs-nav" id="top">
        <div class="bs-docs-header" id="content" tabindex="-1">
            <br class="container">
            <h1>联系博主</h1>
            <div class="lead">
                <address>
                    <br>电子邮件: <strong>123456789@qq.com</strong></br>
                    <br>地址: 上海市嘉定区安亭镇紫金大别墅区36号</br>
                    <br>邮政编码: 201711</br>
                    <br><abbr title="Phone">联系电话: </abbr>021-12345678
                </address>
            </div>
        </div>
    </header>
    
    1. 在 views 同级目录下创建 web_server.py 文件,用于实现客户端和服务器的 http 通信,具体代码如下:
    import socket
    import re
    from multiprocessing import Process
    
    # 设置静态文件根目录
    HTML_ROOT_DIR = "./views"    
    
    class HTTPServer(object):
        def __init__(self):
            # 创建 Socket 对象
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    
        def start(self):
            # 设置最多连接数
            self.server_socket.listen(128)  
            print("服务器等待客户端连接...")
    
            # 执行死循环
            while True:
                # 建立客户端连接
                client_socket, client_address = self.server_socket.accept() 
                print("[%s, %s]用户连接上了" % client_address)
    
                # 实例化进程类
                handle_client_process = Process(target=self.handle_client, args=(client_socket,))
                handle_client_process.start()
                client_socket.close()
    
        # 处理客户端请求
        def handle_client(self, client_socket):
            # 获取客户端请求数据
            request_data = client_socket.recv(1024) 
            print("request data: ", request_data)
            # 按照行 ('\r', '\r\n', '\n') 分隔
            requset_lines = request_data.splitlines()   
    
            for line in requset_lines:
                print(line)
    
            # 解析请求报文
            request_start_line = requset_lines[0]   
            print("*" * 10)
            print(request_start_line.decode("gbk"))
    
            # 使用正则表达式,提取用户请求的文件名
            file_name = re.match(r"\w+ +(/[^ ]*)", request_start_line.decode("utf-8")).group(1)
    
            # 如果文件名是根目录,设置文件名为 file_name
            if "/" == file_name:
                file_name = "/index.html"
    
            # 打开文件,读取内容
            try:
                file = open(HTML_ROOT_DIR + file_name, "rb")
            except IOError:
                response_start_line = "HTTP/1.1 404 Not Found\r\n"
                response_headers = "Server: My server\r\n"
                response_body = "The file is not found !"
            else:
                # 读取文件内容
                file_data = file.read()
                file.close()
    
                response_start_line = "HTTP/1.1 200 OK\r\n"
                response_headers = "Server: My server\r\n"
                response_body = file_data.decode("utf-8")
    
            # 拼接返回数据
            response = response_start_line + response_headers + "\r\n" + response_body
            print("response data: ", response)
            # 向客户端返回响应数据
            client_socket.send(bytes(response, "gbk"))    
            client_socket.close() 
    
        def bind(self, port):
            # 绑定端口
            self.server_socket.bind(("", port)) 
    
    def main():
        http_server = HTTPServer()
        http_server.bind(8000)
        http_server.start()
    
    if __name__ == "__main__":
        main()
    
    

    运行 web_server.py 文件,然后使用谷歌浏览器访问 “127.0.0.1:8000/”,得到以下结果:

    服务器等待客户端连接...
    [127.0.0.1, 55459]用户连接上了
    request data:  b'GET / HTTP/1.1\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: zh-Hans-CN,zh-Hans;q=0.5\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363\r\nAccept-Encoding: gzip, deflate\r\nHost: 127.0.0.1:8000\r\nConnection: Keep-Alive\r\n\r\n'
    b'GET / HTTP/1.1'
    b'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    b'Accept-Language: zh-Hans-CN,zh-Hans;q=0.5'
    b'Upgrade-Insecure-Requests: 1'
    b'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'
    b'Accept-Encoding: gzip, deflate'
    b'Host: 127.0.0.1:8000'
    b'Connection: Keep-Alive'
    b''
    **********
    GET / HTTP/1.1
    response data:  HTTP/1.1 200 OK
    Server: My server
    
    <!DOCTYPE html>
    <html lang="UTF-8">
    <head>
        <title>
            我的博客
        </title>>
    </head>>
    <body class="bs-docs-home">
    
    <!--Docs master nav-->
    <header class="navbar navbar-static-top bs-docs-nav" id="top">
    <div class="container">
        <div class="navbar-header">
            <a href="/" class="navbar-brand">我的博客</a>>
        </div>
        <nav id="bs-navbar" class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/107725117">Python 进阶之路</a>
                </li>
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/97393033">Qt 进阶之路</a>
                </li>
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/104144719">我的网址收藏</a>
                </li>
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/93847054">设计模式</a>
                </li>
                <li>
                    <a href="https://blog.csdn.net/qq_34139994/article/details/105390364">请善待90后</a>
                </li>
                <li>
                    <a href="/contact.html">联系博主</a>
                </li>
            </ul>
        </nav>
    </div>
    </header>>
    
    <!--Page content of coursel-->
    <main class="bs-docs-masthead" id="content" tabindex="-1">
        <div class="container">
            <span class="bs-docs-booticon bs-docs-booticon-lg bs-docs-booticon-outline">自我介绍</span>
            <p class="lead">博主主要从事于客户端、嵌入式、移动端的开发工作,酷爱研发,热于分享!</p>
            <p class="lead">
                <a href="/contact.html" class="btn btn-outline-inverse btn-lg">联系博主</a>
            </p>
        </div>
    </main>
    </body>>
    </html>>
    
    [127.0.0.1, 55527]用户连接上了
    request data:  b'GET /contact.html HTTP/1.1\r\nReferer: http://127.0.0.1:8000/\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: zh-Hans-CN,zh-Hans;q=0.5\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363\r\nAccept-Encoding: gzip, deflate\r\nHost: 127.0.0.1:8000\r\nConnection: Keep-Alive\r\n\r\n'
    b'GET /contact.html HTTP/1.1'
    b'Referer: http://127.0.0.1:8000/'
    b'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    b'Accept-Language: zh-Hans-CN,zh-Hans;q=0.5'
    b'Upgrade-Insecure-Requests: 1'
    b'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'
    b'Accept-Encoding: gzip, deflate'
    b'Host: 127.0.0.1:8000'
    b'Connection: Keep-Alive'
    b''
    **********
    GET /contact.html HTTP/1.1
    response data:  HTTP/1.1 200 OK
    Server: My server
    
    <!DOCTYPE html>
    <html lang="UTF-8">
    <head>
        <title>
            我的博客
        </title>>
    </head>>
    <body class="bs-docs-home">
    
    <!--Docs master nav-->
    <header class="navbar navbar-static-top bs-docs-nav" id="top">
        <div class="bs-docs-header" id="content" tabindex="-1">
            <br class="container">
            <h1>联系博主</h1>
            <div class="lead">
                <address>
                    <br>电子邮件: <strong>123456789@qq.com</strong></br>
                    <br>地址: 上海市嘉定区安亭镇紫金大别墅区36号</br>
                    <br>邮政编码: 201711</br>
                    <br><abbr title="Phone">联系电话: </abbr>021-12345678
                </address>
            </div>
        </div>
    </header>
    

    在这里插入图片描述
    在这里插入图片描述

    WSGI 接口

    WSGI(Web Server Gateway Interface)服务器网端接口,是 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。WSGI 中存在两种角色:接受请求的的 Server(服务器)和处理请求的 Application(应用),它们底层是通过 FastCGI 沟通的。当 Server 收到一个请求后,可以通过 Socket 把环境变量和一个 Callback 回调函数传给后端 Application,Application 在完成页面组装后通过 Callback 把内容返回给 Server,最后 Server 再将响应返回给 Client。

    使用 Python 的 wsgiref 模块可以不用考虑服务器和客户端的连接、数据的发送和接收等问题,而专注以业务逻辑的实现。下面通过实例应用 wsgiref 创建页面。

    使用上个例子中 views 文件夹下的 index.html 作为主页
    在 views 文件夹同级目录下创建 application.py 文件,用于实现 Web 应用程序的 WSGI 处理函数,具体代码如下:

    def app(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])   # 响应信息
        file_name = environ['PATH_INFO'][1:] or '/index.html'	# 获取 url 参数
        HTML_ROOT_DIR = "./views"					# 设置 HTML 文件目录
    
        try:
            file = open(HTML_ROOT_DIR + file_name, "rb")		# 打开文件
        except IOError:
            response = "The file is not found !"			# 如果异常,返回 404
        else:
            file_data = file.read()					# 读取文件内容
            file.close()						# 关闭文件
            response = file_data.decode("utf-8")			# 构造响应数据	
    
        return [response.encode("utf-8")]				# 返回数据
    

    在 views 文件夹同级目录下创建 web_server.py 文件,用于启动 WSGI 服务器,加载 application() 函数,具体代码如下:

    from wsgiref.simple_server import make_server			# 从 wsgiref 模块导入
    from application import app					# 导入编写的 application 函数
    
    httpd = make_server("", 8000, app)				# 创建一个服务器,IP 地址为空,端口为 8000,处理函数是 app
    print("Serving HTTP on port 8000...")
    
    httpd.serve_forever()						# 开始监听 HTTP 请求
    

    运行 web_server.py 文件,当显示 “Serving HTTP on port 8000…” 时,在浏览器地址栏输入 “127.0.0.1:8000”,就能访问 index.html 首页啦!

    Web 框架

    如果你要从零开始建立一些网站,可能会注意到你不得不一次又一次地解决一些相同的问题。这样做是非常麻烦的,并且违反了良好编程的核心原则之一 - DRY(不要重复自己)。

    有经验的 Web 开发人员在创建新站点时也会遇到类似的问题。当然,总会有一些特殊情况会因网站而异,但在大多数情况下,开发人员通常需要处理四项任务 - 数据的创建、读取、更新和删除,也称为 CURD。幸运的是,开发人员通过使用 Web 框架解决了这些问题。

    Web 框架是用来简化 Web 开发的软件框架。框架的存在是为了避免用户重新发明轮子,并且在创建一个新的网站时帮助减少一些开销。典型的框架提供了如下常用功能:

    • 管理路由
    • 访问数据库
    • 管理会话和 Cookies
    • 创建摸版来显示 HTML
    • 促进代码的重用

    事实上,框架根本就不是什么新的东西,它只是一些能够实现常用功能的 Python 文件。我们可以把框架看作是工具的集合,而不是特定的东西。框架的存在使得建立网站更快、更容易。

    前面我们学习了 WSGI(服务器网关接口),它是 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。也就是说,只要遵循 WSGI 接口规则,就可以自主开发 Web 框架。所以,各种开源 Web 框架至少有上百个,关于 Python 框架优劣的讨论页仍在继续。

    作为初学者,应该选择一些主流的框架来学习,因为主流的框架文档齐全,技术积累较多,社区繁盛,并且能得到更好的支持。下面介绍几种 Python 的主流 Web 框架:

    1. Django
      这可能是最广为人知和使用最广泛的 Python Web 框架了。Django 有世界上最大的社区和最多的包。它的文档非常完善,并且提供了一站式的解决方案,包括缓存、ORM、管理后台、验证、表单处理等,使得开发复杂的数据库驱动的网站变得简单。但是,Django 系统耦合度较高,替换掉内置的功能比较麻烦,所以学习曲线也相当崎岖;

    2. Flask
      Flask 是一个轻量级 Web 应用框架。它的名字暗示了它的含义,他基本上就是一个微型的胶水框架。Flask 把 Werkzeug 和 Jinja 粘和在一起,所以它很容易被扩展。Flask 也有许多的扩展可以供用户使用,Flask 也有一群忠诚的粉丝和不断增加的用户群。它有一份很完善的文档,甚至还有一份唾手可得的常见范例。Flask 很容易使用,用户只需要几行代码就可以写出来 “Hello World”;

    3. Bottle
      这个框架相对来说比较新。Bottle 才是名副其实的微框架 - 它只有大约 4500 行代码。它除了 Python 标准库以外,没有任何其他的依赖,甚至还有自己独特的一点儿模板语言。Bottle 的文档很详细并且抓住了事物的实质。它很像 Flask,也使用了装饰器来定义路径;

    4. Tornado
      Tornado 不单单是个框架,还是个 Web 服务器。它一开始视为 FriendFeed 开发的,后来在 2009 年的时候也给 Facebook 使用。它是为了解决实时服务而诞生的。为了做到这一点,Tornado 使用了异步非阻塞 IO,所以它的运行速度非常快;

    更多请参考

    展开全文
  • Python Web 编程框架

    千次阅读 2020-02-07 16:06:15
    目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django、...

    目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django、Tornado、Flask、Twisted。

    所谓网络框架是指这样的一组Python包,它能够使开发者专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议、线程、进程等方面。这样能大大提高开发者的工作效率,同时提高网络应用程序的质量。

    在目前Python语言的几十个开发框架中,几乎所有的全栈网络框架都强制或引导开发者使用MVC架构开发Web应用。所谓全栈网络框架,是指除了封装网络和线程操作,还提供HTTP栈、数据库读写管理、HTML模板引擎等一系列功能的网络框架。本文重点讲解的Django、Tornado和Flask是全栈网络框架的典型标杆;而Twisted更专注于网络底层的高性能封装而不提供HTML模板引擎等界面功能,所以不能称之为全栈框架。

    MVC(Model-View-Controller)模式最早由Trygve Reenskaug在1978年提出,在20世纪80年代是程序语言Smalltalk的一种内部架构。后来MVC被其他语言所借鉴,成为了软件工程中的一种软件架构模式。MVC把Web应用系统分为3个基本部分。

    模型(Model):用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,通过这些接口可以获取Model的所有功能。Model不依赖于View和Controller,它们可以在任何时候调用Model访问数据。有些Model还提供了事件通知机制,为在其上注册过的View或Controller提供实时的数据更新。

    视图(View):负责数据的显示和呈现,View是对用户的直接输出。MVC中的一个Model通常为多个View提供服务。为了获取Model的实时更新数据,View应该尽早地注册到Model中。

    控制器(Controller):负责从用户端收集用户的输入,可以看成提供View的反向功能。当用户的输入导致View发生变化时,这种变化必须是通过Model反映给View的。在MVC架构下,Controller一般不能与View直接通信,这样提高了业务数据的一致性,即以Model作为数据中心。

    这3个基本部分互相分离,使得在改进和升级界面及用户交互流程时,不需要重写业务逻辑及数据访问代码

    支持快速建站的框架——Flask

    Flask是Python Web框架族里比较年轻的一个,于2010年出现,这使得它吸收了其他框架的优点,并且把自己的主要领域定义在了微小项目上。同时,它是可扩展的,Flask让开发者自己选择用什么数据库插件存储他们的数据。很多功能简单但性能卓越的网站就是基于Flask框架而搭建的,比如http://httpbin.org/就是一个功能简单但性能强大的HTTP测试项目。Flask是一个面向简单需求和小型应用的微框架。

    相对于其他Python语言的Web框架而言,Flask的特点可以归结如下。

    内置开发服务器和调试器
    网络程序调试是在将编制好的网站投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。有经验的开发者都知道,这是保证网站系统能够正式应用的必要步骤。
    Flask 自带的开发服务器使开发者在调试程序时无须再安装其他任何网络服务器,比如Tomcat、JBoss、Apache等。Flask默认处于调试状态,使得运行中的任何错误会同时向两个目标发送信息:一个是Python Console,即启动Python程序的控制台;另一个是HTTP客户端,即Flask开发服务器将调试信息传递给了客户端。
    与Python单元测试功能无缝衔接
    单元测试是对最小软件开发单元的测试,其重点测试程序的内部结构,主要采用白盒测试方法,由开发人员负责。单元测试的主要目标是保证函数在给定的输入状态下,能够得到预想的输出,在不符合要求时能够提醒开发人员进行检查。
    Flask提供了一个与Python自带的单元测试框架unitest无缝衔接的测试接口,即Flask对象的test_client()函数。通过test_client()函数,测试程序可以模拟进行HTTP访问的客户端来调用Flask路由处理函数,并且获取函数的输出来进行自定义的验证。
    使用Jinja2模板
    将HTML页面与后台应用程序联系起来一直是网站程序框架的一个重要目标。Flask通过使用Jinja2模板技术解决了这个问题。Jinja2是一个非常灵活的HTML模板技术,它是从Django模板发展而来的,但是比Django模板使用起来更加自由且更加高效。Jinja2模板使用配制的语义系统,提供灵活的模板继承技术,自动抗击XSS跨站攻击并且易于调试。
    完全兼容WSGI 1.0标准
    WSGI(Web Server Gateway Interface)具有很强的伸缩性且能运行于多线程或多进程环境下,因为Python线程全局锁的存在,使得WSGI的这个特性至关重要。WSGI已经是Python界的一个主要标准,各种大型网路服务器对其都有良好的支持。WSGI位于Web应用程序与Web服务器之间,与WSGI完全兼容使得Flask能够配置到各种大型网络服务器中。
    基于Unicode编码
    Flask是完全基于Unicode的。这对制作非纯ASCII字符集的网站来说非常方便。HTTP本身是基于字节的,也就是说任何编码格式都可以在HTTP中传输。但是,HTTP要求在HTTP Head中显式地声明在本次传输中所应用的编码格式。在默认情况下,Flask会自动添加一个UTF-8编码格式的HTTP Head,使程序员无须担心编码的问题。

    展开全文
  • 了解Python编程——Python学习(一)

    千次阅读 2019-09-17 15:49:50
    目录 ...Python,与C、Java等编程一样,帮助我们更好的与计算机沟通。其功能全面,易学易用,属于可拓展的语言 人生苦短,我用Python Python背景介绍 Python的作者——荷兰人Guido van Ro...

    目录

    一.对Python程序的了解

    二.认识Python家族

    三.Python的数据类型组成

    四.程序中出现率最高的if-else

    一.对Python程序的了解

    1. Python是什么

      Python,与C、Java等编程一样,帮助我们更好的与计算机沟通。其功能全面,易学易用,属于可拓展的语言
      人生苦短,我用Python

    2. Python背景介绍

      Python的作者——Guido van Rossum

      Python正式诞生于1991年

      Python目前的版本,Python2和Python3,两者的代码不完全兼容

      Python的源文件以 .py文件名为后缀

      Python的解释器如今有多个语言实现,我们常用的是Cpython或者IPython(官方版本的C语言实现),其他的还有Jython(Java平台)、IronPython(NET和Mono平台)、PyPy(Python实现)

    3. Python语言特点

    (1) Python是一门跨平台(三大主流平台)语言,开源语言

    (2)一种解释型高级语言
    解释型高级语言,例如Python语言,代码解释功能强,语句较少,但是执行效率略低。与其相对应的编译性高级语言,例如C语言、C++、Java,代码数量多,但是接近于计算机编辑底层,执行效率高)

    举例说明:

    对于编译型高级语言来说

    其原理为

    源代码——编译器——目标代码——执行程序——结果

    (编译器将源代码逐条编译成机器代码,任何一条语句有错,都不能通过编译,最终形成目标代码,以后每次执行只执行目标代码即可,因此执行速度快。)

    大家熟知的王者荣耀手游

    游戏的下载:我们下载的是游戏的目标代码可执行文件(.exe)
    游戏的运行:我们双击执行程序,进入游戏
    游戏的更新:更新的源代码要重新经过编译器编译,生成新的目标代码以供玩家下载更新

    对于编译型高级语言来说

    其原理为

    源代码——解释器——结果

    (解释器逐条解释源代码,成功一条执行一条,每次执行时都需要解释,以致于运行速度略慢)

    所以在执行过程中它的运行速率会慢一些

    (3)Python开发效率高,执行效率低

    (4) 源代码可见

    (5)开发代码量少,功能强大,应用面广

    (6)模块扩展库种类繁多

    4. Python可以做什么

    爬虫(谷歌、百度等搜素引擎)

    Web后台开发(知乎,豆瓣)

    自动化运维与测试

    人工智能

    数据科学

    二.认识Python家族

    1. Python环境安装

    Python环境包含:

    1. Python解释器(CPython)
      解释执行Python代码
    2. 编辑器(IDLE,PyCharm,Sublime Text)
      编写Python代码的工具
    3. Python软件包管理系统(pip
      我们说“下一个Python”的时候,意思是下载Python的解释器
      Python环境下载:
      Python最新源码,解释器环境等最新下载

    下载地址: Python官网http://www.python.org/

    Windows下直接下载安装

    选择所需下载的版本即可(查看自己电脑的系统)
    在这里插入图片描述
    下载后,双击安装,选择“Install Now”默认安装,但一定勾选“Add Python 3.7 to PATH
    在这里插入图片描述
    Python 权威使用技术文档等最新下载

    Python文档下载地址:http://www.python.org/doc/

    在这里插入图片描述

    Python集成工具:Anacanda

    Anaconda3-4.4下载地址:https://repo.continuum.io/archive/Anaconda3-4.4.0-Windows-x86_64.exe

    Jupyter Notebook:

    交互式笔记本,本质是一个web应用程序,便于创建和共享程序文档,支持40多种编程语言以及markdown写作。

    PyCharm:

    Python的集成开发环境,在进行工程化项目编程时有利于提高

    未完待续…

    展开全文
  • python学习方法总结(内附python全套学习资料)

    万次阅读 多人点赞 2019-10-29 16:50:38
    我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的教学下独立完成python游戏,植物大战僵尸简单版,如果要肯花时间,接下来的网络开发也不是问题,人工智能也可以个调包也没啥问题。。。。。所以...

    不要再问我python好不好学了
    我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的教学下独立完成python游戏,植物大战僵尸简单版,如果要肯花时间,接下来的网络开发也不是问题,人工智能也可以学个调包也没啥问题。。。。。所以python真的是想学就一定能学会的!!!!

    **

    ----------公众号【一行玩python】----------领取资料-----------回复【python】

    **

    先聊聊互联网转行那些事儿
    很多人是小白,想从事或转行互联网,想以python为切入口,那么恭喜你,这可能是你离互联网工作最捷径的一条道路了,毕竟python相对于java,C等语言代码量小,更加简单易学,只要肯用心,最多只需要两个月,就能找到一份对应的工作,当然任何一份技能要精进都需要一万小时,得做好心理准备
    同时也许你有学历,数学,学习方法等种种问题,我将在文末一一解答
    下面将从基础语法,高阶语法,前端开发,web开发,爬虫开发,自动化运维,数据分析,人工智能介绍学习攻略,并附上全套学习资料

    1.Python基础语法-主线任务1

    使用python就像一个自由度超高的游戏,你得学会以下几点python基础语法,拿到进入这个游戏世界的钥匙:

    • 计算机组成原理
    • Python开发环境
    • Python变量
    • 流程控制语句
    • 高级变量类型
    • 函数应用
    • 文件操作
    • 面向对象编程
    • 异常处理
    • 模块和包

    2.Python高阶语法-主线任务2

    学习完基础语法,写写算法题不成问题,但是对应更复杂的环境和需求需要学习一些高阶内容,学完以下内容就可以刷副本,攒经验升级了:

    • 网络编程
    • 并发编程
    • 数据库编程
    • 正则表达式
    • Linux系统应用
    • 函数的高级应用
    • Python语法高阶
      学完以上两个主线任务就可以进行正式的工作内容,副本1,2,3一组紧密相关,副本4单独一组,副本5,6一组紧密相关,也可以从这三组选一个来学尽快加入工作

    3.副本1-前端开发

    看你对做个网页做个app有没有兴趣,学完副本3,4可以动手做一个相关的产品,来以此去求职,当然做的质量越高,学的东西就要越多,工资也是成正比的

    • HTML
    • CSS
    • PS的应用
    • JavaScript
    • jQuery
    • Vue.js框架

    4.副本2-后端开发

    对于网页,游戏等的后台支持,需要熟练掌握框架的使用,掌握数据库原理及相关优化

    • Djano框架
    • 数据库mySQL,Redis,MongoDB
    • git项目管理
    • 接口开发
    • flask框架

    5.副本3-爬虫

    爬虫就是爬取网络上的数据,无论是网页还是app,只要你能看到的数据都能爬取下来,当然有爬虫就有反爬虫,两种职业互相博益还是挺有意思的,精通爬虫必须要精通副本1-前端开发,你得知道网页时怎么来的,才能更好的爬取下来,爬下来的数据也可以为副本4-数据分析做准备

    • 爬虫开发
    • scrapy框架
    • 索引操作
    • 备份和回复
    • 定制化爬虫采集系统

    6.副本4-自动化运维

    主要利用shell来做一些自动化脚本的发布

    7.副本5-数据分析

    数据分析主要学习两个科学计算库numpy和pandas,两个可视化库matplotlib和seaborn,学完之后数据清洗,数据展示没有问题,用python画出了图才能给别人讲出有意思的故事,同时也能为学习副本6-人工智能打下牢固的基础

    • 数据结构和算法
    • 科学计算pandas和numpy
    • 数据可视化matplotlib和seaborn
    • 金融数据分析等

    8.副本6-人工智能

    python之所以能火,主要是因为人工智能的风口,所谓风口上的 都会飞,那么python也许就是风口上的代码,人工智能的两大目的分别是分类和预测,主要在识别图片和预测未来等应用场景,同时python又有最大开源库可以调用这些包来应用,所以应用起来非常方便,但是如果想从事人工智能行业,需要一定的数学基础,了解底层算法,才能更好的进入到神经网络和深度学习的领域

    • 机器学习
    • 量化交易
    • 机器视觉
    • 深度学习
    • 自然语言处理

    相关问题

    1.学历重要吗

    python是一门技术语言,在技术岗面试的时候主要看面试者技术能力过不过硬,学历占比没有非技术岗那么大

    2.数学差可以学python吗

    python是一门编程语言主要讲究逻辑,用到数学的地方不多,但是在人工智能(机器学习)方面用到了大量的概率统计的数学知识,需要有一定的基础理解其中的原理,才能精进

    3.学习时候要不要抄代码

    要抄代码,就像下笔如有神一样,边学边敲代码,然后再改代码,然后再自己写代码一步步进阶

    4.各个副本的职业前景

    从就业前景来看:AI人工智能 > python后端 > web前端 > 数据分析 > 爬虫 但是任何一个副本只要打到10000小时经验值,钱景都非常可观
    在这里插入图片描述

    展开全文
  • 利用Python,我们可以搭建一个简单的Web服务器,这里我参考了: https://ruslanspivak.com/lsbaws-part1/
  • 每周荐书:Java WebPython极客编程、移动Web前端(评论送书) 各位抱歉,上周活动停更一周,本周继续感谢大家对每周荐书栏目的支持,先公布下上期活动中奖名单 微雨燕凝霜寒森林之舟架构探险:轻量级微服务架构...
  • Python web 学习路线

    千次阅读 2018-09-06 12:58:19
    参考链接:python web开发从入门到精通学习笔记 基础 基础python的理解 面对对象编程 面向对象“设计思想”-封装-继承 python高级专题 进阶 linux基础 python web工具 python部署工具 关系型...
  • 滚雪球 Python 第三轮,Python Web 之 Django 的世界

    千次阅读 多人点赞 2021-03-19 14:32:45
    滚雪球 Python 第三轮 开启吧,Django 。1. Django 是什么1.1 Django MVT 模式1.2 其它 Python Web 框架2. Web 开发前置知识
  • 对于完全没有编程经验的初学者,在学习... 错误认知二:没有学好基础知识,听说django很火,就开始django开发web。 种种迹象表明,这些从零开始的学习者,普遍不知道从何入手,找了本编程教材发现第二章开始就...
  • 自学Python技巧之我们应该怎样学习Python编程?(图) Python已经成为较受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率呈线性增长。 有人在学习...
  • Python Web学习路线

    千次阅读 2019-02-22 15:47:24
    原文出处:https://www.oschina.net/question/3637314_2301915 无论是大数据、人工智能还是机器学习,Python都是最热门的首选语言。 &nbsp; 学好Python,可以从...
  • 学习 Python 编程的 19 个资源

    千次阅读 多人点赞 2018-01-11 00:00:00
    编译:wzhvictor,英文:codecondo segmentfault.com/a/1190000004187319用Python编写代码一点都不难,事实上它一直被赞誉为最容易编程语言。如果你准备学习web开发, Python是一个不错的开始,甚至想做游戏的...
  • Python是一种通用的解释型编程,主要用于Web开发、机器学习和复杂数据分析。Python对初学者来说是一种完美的语言,因为它易于学习和理解,随着这种语言的普及,Python程序员的机会也越来越大。 有的人问零基础能否...
  • 本教程中综合编程示例以及编程练习题的视频讲解,均在无极大学网站上发布,可以访问该网站观看视频讲解。 第1章 入门基础1.6 Python学习路线图1.6.1 学习路线图1.6.2 网站开发1.6.3 数据分析1.6.4 网络爬虫 1.6 ...
  • BaseHTTPServer模块:提供基本的web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler处理器。 SimpleHTTPServer模块:包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。 CGIHTTPServer模块:包含处理...
  • Python Web 1 —— python和MongoDB安装

    千次阅读 2016-06-11 17:35:42
    最近突然有对服务器后台编程产生了浓厚的兴趣,想试着用Python + Mongo DB进行游戏后台的开发。PythonPython是一门具有强类型(即变量类型是强制要求的)、动态性、隐式类型(不需要做变量声明)、大小写敏感(var和VAR
  • 0基础学python,聊聊这半年我是如何自学编程

    万次阅读 多人点赞 2018-06-22 15:47:16
    诚然,转行当程序员不仅是政治正确还是事实正确,但是这个过程其实并不容易,倒不是因为程序员门槛高,而是很多人认为学编程很难,并且拒绝尝试。其实掌握方法后,并且拉近自己与编程的距离,你会发现,你完全可以...
  • python基础编程Python中turtle作图示例

    千次阅读 多人点赞 2020-03-21 21:59:36
    这篇文章主要介绍了Python中turtle作图示例,分享了几则turtle作图的小实例,具有一定参考价值,需要的朋友可以了解下 在Python里,海龟不仅可以画简单的黑线,还可以用它画更复杂的几何图形,用不同的颜色,甚至还...
  • 前文分享了Wireshark抓包原理知识,并结合NetworkMiner工具抓取了图像资源和用户名密码,本文将讲解Python网络攻防相关基础知识,包括正则表达式、Web编程和套接字通信。本文参考了爱春秋ADO老师的课程内容,这里也...
  • Web Frameworks for Python

    千次阅读 2012-07-17 12:31:57
    Web Frameworks for Python 一篇很详细很全面介绍python下的web framework的文章,来自于python官网。 A Web framework is a collection of packages or modules which allow developers to write Web ...
  • 现如今说起IT行业人员...然而等到一头栽到IT行业大军中来,才发现想要当程序员还是需要你会门编程语言才可以的。这里还是要推荐下小编的Python学习群:483546416,不管你是小白还是大牛,小编我都欢迎,不定期分享干...
  • 因为足够简单,现在连小学生都选择开始学Python了。 很多教编程的一开始安装Python都是教你在命令台(一个黑框框的东西)下写代码,面对这么一个黑框框的东西,你会立马没了兴趣。这样做其实是不对的,正确的...
  • Tornado是Python的一款高人气Web开发框架,这里我们来展示使用Python的Tornado框架实现一个Web端图书展示页面的实例,通过该实例可以清楚地学习到Tornado的模板使用及整个Web程序的执行流程. 首先,为什么选择Tornado...
  • Python快速编程入门课后习题答案

    万次阅读 多人点赞 2019-11-24 13:03:43
    五、程序分析题 第十二章 一、选择题 二、判断题 三、填空题 四、简答题 END 前言 本文整理了填空、选择、判断等一些课后习题答案,具体的编程题可以见:Python快速编程入门课后程序题答案。 第一章 一、填空题 ...
  • 2019最新Python学习教程_Python学习视频_Python学习路线:学Python,这次你可得认真看完了! 有多少伙伴是因为一句‘人生苦短,我用Python’ 去学Python的!前面跟大家有更新很多Python学习教程普及过多次的Python...
  • Python web全栈开发学习路线:

    千次阅读 2019-05-05 15:02:46
    Python web全栈开发学习路线: 一、Linux运维 Python基础 进阶: Linux运维: Linux安装,网络基础知识点,ISO七层模型,Linux基本命令,Linux文件系统,Linux常用命令,Linux权限管理,Linux用户管理,Linux编辑器...
  • 某天与web渗透老师聊天,老师得知我一点不懂python后,深情的告诉我,Python是一门友好的语言。 我就秒懂了更深层次的含义是:你不会Python真是太shit了。O(∩_∩)O哈哈~, 我遵循老师的教导,急不可耐地学了半个月...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 166,027
精华内容 66,410
关键字:

web编程怎么学python

python 订阅