Python全栈 项目(HTTPServer、PiP使用)

pip是Python官方推荐的包管理工具   属于python的一部分

 pip的使用 

pip的安装

sudo apt-get install python-pip

sudo apt-get install python3-pip

安装包

pip3  install   package

升级

pip3  install  --upgrade  package

查看python包清单

pip3 list

卸载

pip3 uninstall  package

查找软件包

pip3 search  package

显示软件包信息

pip3 show  package

生成软件环境文件

pip3  freeze  >  requirements.txt

根据环境文件安装第三方包

pip3  install  -r  requirements.txt

from gevent import  monkey

monkey.patch_all()

功能 : 在socket导入之前使用后,用来修改套接字的阻塞行为

基于协程并发服务器模型:

import gevent
# 在socket导入之前使用
from gevent import monkey
monkey.patch_all()
from socket import *
from time import ctime 

def server(port):
    s = socket()
    s.bind((‘0.0.0.0‘,port))
    s.listen(5)
    while True:
        c,addr = s.accept()
        print("Connect from",addr)
        gevent.spawn(handler,c)

#处理客户端请求
def handler(c):
    while True:
        data = c.recv(1024).decode()
        if not data:
            break
        print("Receive:",data)
        c.send(ctime().encode())
    c.close()

if __name__ == "__main__":
    server(8888)

HTTPServer

前端  前台  客户端  用户端

功能 :

1. 和用户进行交互,获取用户请求

2. 和后端进行通信,整理用户请求给后端

3. 接受后端数据内容,展现给用户

要求:

1. 良好的用户体验

2. 较全面的交互能力

3. 必要的前端优化

4. 良好的跨平台型

后端  后台   服务端

功能:

1. 接受前端请求

2. 进行逻辑处理和运算

3. 和磁盘交互 (文件处理,数据库处理)

4. 进行数据整理,更好的向前端返回结果

要求:

1. 更好的并发性

2. 更快速的处理速度

3. 更好的健壮性

4. 可维护和可扩展

5. 数据的安全

HTTPServer + Frame 版本

httpserver 功能 :

1. 接受HTTP请求 (socket通信)

2. 解析http请求

*  请求类型  GET,POST

*  请求内容

3. 将具体的请求整理后给 web Frame

4. 接受后端应用返回的数据内容

5. 将数据组织为HTTP response的格式发给客户端

什么是框架?

矿建即开发模板,通过根据框架规则填写内容即可完成快速开发工作

Frame 功能:

1. 接收httpserver发送的request请求

2. 进行逻辑处理或者数据整合

3. 将结果发送给httpserver

* 如果能够处理则返回结果和数据

* 不能处理返回原因

结构 :

HTTPServer --- static目录

--- HttpServer.py

--- WebFrame.py

--- setting.py

--- views.py

m = __import__(module)

功能 : 导入一个模块

参数:要导入的模块

返回值:模块对象

getattr(obj,attr)

功能:获取一个对象的属性

参数: obj   对象

attr  属性

返回值: 返回属性值

__call__() 魔法方法

作用 : 让实例对象可以像函数一样被调用执行

class CallTest(object):
    def __call__(self,a,b):
        print("This is call test")
        print("a =",a,"b =",b)

test = CallTest()
test(1,2)

HTTPServer完整代码:

Server:

#coding=utf-8

‘‘‘
module: HTTPServer.py
name : Paris
time : 2018-8-28
功能 :httpserver部分
modules:
    Python3.5 、socket、sys
    threading、re、setting
‘‘‘
from socket import  *
import sys
from threading import Thread
import re
from setting import * 

#处理http请求类
class HTTPServer(object):
    def __init__(self,application):
        self.sockfd = socket()
        self.sockfd.setsockopt        (SOL_SOCKET,SO_REUSEADDR,1)
        #获取模块接口
        self.application = application

    def bind(self,host,port):
        self.host = host
        self.port = port
        self.sockfd.bind((self.host,self.port))
    #启动服务器
    def serve_forever(self):
        self.sockfd.listen(10)
        print("Listen the port %d..."%self.port)
        while True:
            connfd,addr = self.sockfd.accept()
            print("Connect from",addr)
            handle_client = Thread            (target = self.client_handler,                args = (connfd,))
            handle_client.setDaemon(True)
            handle_client.start()

    def client_handler(self,connfd):
        #接收浏览器request
        request = connfd.recv(4096)
        #可以分析请求头和请求体
        request_lines = request.splitlines()
        #获取请求行
        request_line = request_lines[0].decode(‘utf-8‘)

        #获取请求方法和请求内容
        pattern = r‘(?P<METHOD>[A-Z]+)\s+(?P<PATH_INFO>/\S*)‘
        try:
            env = re.match(pattern,request_line).groupdict()
        except:
            response_headlers =  "HTTP/1.1 500 SERVER ERROR\r\n"
            response_headlers += "\r\n"
            response_body = "server error"
            response = response_headlers + response_body
            connfd.send(response.encode())

        # method,filename = \
        # re.findall(r‘^([A-Z]+)\s+(/\S*)‘, request_line)[0]

        #将解析内容合成字典给web frame使用
        # env = {‘METHOD‘:method,‘PATH_INFO‘:filename}
        # print(env)

        #将env给Frame处理,得到返回内容
        response = self.application(env)

        #发送给客户端
        if response:
            connfd.send(response.encode())
            connfd.close()

if __name__ == "__main__":
    #将要使用的模块导入进来
    sys.path.insert(1,MODULE_PATH)
    m = __import__(MODULE)
    application = getattr(m,APP)

    httpd = HTTPServer(application)
    httpd.bind(HOST,PORT)
    httpd.serve_forever()

setting:

# setting.py

#httpserver配置文件
HOST = ‘0.0.0.0‘
PORT = 8000

#设置要使用的模块和应用
MODULE_PATH = "."  #设置Frame模块路径
MODULE = ‘WebFrame‘  #设置模块名称
APP = ‘app‘  #使用的应用

WebFrame:

#coding=utf-8
from views import *
‘‘‘
WebFrame.py
WebFrame 框架
用于处理server解析请求
‘‘‘

#设置静态文件夹路径
STATIC_DIR = "./static"

#应用
class Application(object):
    def __init__(self,urls):
        self.urls = urls

    def __call__(self,env):
        method = env.get("METHOD",‘GET‘)
        path = env.get("PATH_INFO",‘/‘) #请求内容

        if method == ‘GET‘:
            if path == ‘/‘ or path[-5:] == ‘.html‘:
                response = self.get_html(path)
            else:
                response = self.get_data(path)
        elif method == ‘POST‘:
            pass

        return response

    def get_html(self,path):
        if path == ‘/‘:
            get_file = STATIC_DIR + "/index.html"
        else:
            get_file = STATIC_DIR + path
        try:
            fd = open(get_file)
        except IOError :
            #没有找到请求网页
            responseHeaders = "HTTP/1.1 404 not found\r\n"
            responseHeaders += ‘\r\n‘
            response_body = "Sorry,the page not found"
        else:
            responseHeaders = "HTTP/1.1 200 OK\r\n"
            responseHeaders += ‘\r\n‘
            response_body = fd.read()
        finally:
            response = responseHeaders + response_body
            return response

    def get_data(self,path):
        for url,handler in self.urls:
            if path == url:
                response_headers = "HTTP/1.1 200 OK\r\n"
                response_headers += ‘\r\n‘
                response_body = handler()
                return response_headers + response_body 

        response_headers = "HTTP/1.1 404 not found\r\n"
        response_headers += ‘\r\n‘
        response_body = "Sorry ,not found the data"
        return response_headers + response_body

urls = [
    (‘/time‘,show_time),
    (‘/hello‘,say_hello),
    (‘/bye‘,say_bye),
]

app = Application(urls)

views:

# views.py
# 具体处理模块
import time

def show_time():
    return time.ctime()

def say_hello():
    return "hello world"

def say_bye():
    return "Good Bye"

python 的 httpserver模块

python2 BaseHTTPServer

python3 http.server

示例:

try:
    from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
except ImportError:
    from http.server import BaseHTTPRequestHandler,HTTPServer

class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        print(self.headers) #请求头
        print(self.path)  #请求内容
        fd = open(‘test.html‘,‘rb‘)
        content = fd.read()
        #组织response
        self.send_response(200)
        self.send_header(‘Content-Type‘,‘text/html‘)
        self.end_headers()
        self.wfile.write(content)

    def do_POST(self):
        pass

address = (‘0.0.0.0‘,8080)
#生成httpserver对象
httpd = HTTPServer(address,RequestHandler)
httpd.serve_forever() #启动服务器

原文地址:https://www.cnblogs.com/ParisGabriel/p/9551501.html

时间: 2024-10-31 04:57:28

Python全栈 项目(HTTPServer、PiP使用)的相关文章

Python全栈 项目(电子词典、协程、pdb调试)

后面我就不截图了 大家还是看原文吧                          https://yq.aliyun.com/articles/629534 . .......................................................................................................................................................................

python入门、python数据分析(numpy、matplotlib、sklearn等)tensflow、爬虫、机器学习、深度学习、自然语言处理、数据挖掘、机器学习项目实战、python全栈、PHP、java、java web、openCV、hadoop、matlab、android、数据结构算法和刷题等教学视频

扫描二维码加好友购买视频,绝对优惠,谢谢支持. python入门和进阶熟练教学视频 入门: 进阶: python数据分析教学视频 python数据分析晋级班 tensorflow教程及实战 python爬虫教学 机器学习课程 深度学习课程 机器学习项目班 自然语言处理教学视频 python全栈教学视频 数据挖掘视频 PHP教学视频 java java web openCV教学视频 Hadoop教学视频 matlab教学 andriod教学视频 数据结构算法班及面试班 原文地址:https://w

python全栈和python自动化课程的区别在哪?

老男孩算是国内组早的做python培训的机构了,下面小编对于python自动化课程及全栈课程做了一个总结,希望能帮到你们: python全栈开发: 适合人群:应届本科生,专科,及零基础学员学习基础:0基础上课形式:脱产5个月,周一至周五上课课程内容:linux基础知识,python基础知识,网络编程,数据库应用,web开发,算法设计模式项目实战:博客系统开发,CRM系统开发,CMDB开发,主机开发管理,爬虫开发,金融量化交易项目开发未来发展方向:python全栈开发工程师就业方向:python爬

51CTO - 老男孩python全栈心路

转眼入学都两个月了,自从参加老男孩python全栈的课以来,感觉收获很多. 一.为什么参加培训 我是非计算机专业毕业的,有那么几年的工作经验,之前都是依靠自学,所谓的野路子出身.刚开始还好,目标就是查资料,解决问题. 但后来随着工作年限的积累,别人的工资都蹭蹭蹭的往上涨,而我只能一点点的往上挪.心中难免不服气,比我牛的比我工资高我也就认了,为啥那些没我有经验的,水平不如我的工资也可以比我高? 后来发现,人家都说科班出身的,用了四年的时间来打基础,而我只能是遇到问题临时抱佛脚.心理平衡了,自然就要

Python全栈培训纯面授怎么样?

随着人工智能时代的来临,Python的前景越来越光明,岗位需求量越来越大.网络学习是随着计算机网络的飞速发展而开始盛行的一种新型的教学模式,但在Python培训行业,纯面授班似乎更受欢迎,我们来看看这都是为什么. 一.纯面授的培训班有老师手把手教你.在千锋Python培训纯面授班,你可以与老师面对面交流,及时解决你的疑惑.而网络课程就不可能了. 二.在纯面授班,学员之间可以互相学习交流.千锋Python培训面授班就是这样的. 试想,如果你自己在家通过网络进行学习,身边没有同学,只有你自己,完全没

python全栈开发devops运维自动化方向初到高级在线课程分享

适用人群 面向想要devops方向发展的全栈python运维开发工程师 课程概述 课程范围:我们的课程由浅入深包含C01到C05五个等级:包含前后端知识,覆盖培养一个合格python全栈工程师所需要的所有技能:还有Ca系列附加课对开发规范和git使用方式提供帮助说明,并对一些新的知识点持续更新: 包含项目:一共4个项目(用户系统cmdbansible任务管理系统项目发布系统),并包含源码. 视频课程地址和详情介绍:http://study.163.com/course/introduction.

Python 全栈开发【第一篇】:目录

Python 全栈开发[第0篇]:目录 第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基础语法入门 Python 全栈开发[第三篇]:数据类型.字符编码.文件操作 第二阶段:函数编程&常用标准库 Python 全栈开发[第四篇]:函数.递归.生成器.迭代器 Pyhton 全栈开发[第五篇]:常用模块学习 第三阶段:面向对象编程&网络编程基础 Python 全栈开发[第六篇]:面向对象

python 全栈之路

python 全栈之路 一. python 1. Python基础知识部分 Python Python那点事 Python windows和linux下 安装 Python2,Python3 Python 开启入坑之路 Python 基本数据类型 Python 那些零碎的知识点 Python -函数 Python - 面对对象 Python - 模块 Python - 文件操作 Python - python中经常踩得的坑 2. Python - 网络编程 3. Python - 并发编程 二.

《从零开始做一个MEAN全栈项目》(1)

欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 在本系列的开篇,我打算讲一下全栈项目开发的优势,以及MEAN项目各个模块的概览. 为什么选择全栈开发?     对于初学者来说,学习一门新的语言和技术的体验总是让人愉快的,也会满足于掌握了一些新的东西并且解决了一些实际问题.在一个小组中采用全栈开发时,你可以更加有效地把握项目全局概念,这也有利于让你了解项目中的不同模块以及它们之间是如何协同工作的.你会对你们的产品中他人的贡献更加清晰,你也就了解了这款产品如何