Web框架

web 框架本质  -  Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。

HTTP协议

HTTP协议介绍HTTP协议对收发消息的格式要求每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。HTTP响应的Header中有一个 Content-Type表明响应的内容格式。它的值如text/html; charset=utf-8。text/html则表示是网页,charset=utf-8则表示编码为utf-8。

socket 服务端 基础版
-------------------------
import socketsk = socket.socket()
sk.bind(('127.0.0.1',8002))
sk.listen()while True:conn,addr = sk.accept()data = conn.recv(8096)print(data)conn.send(b'HTTP/1.1 200 ok\r\nk1: v1\r\n\r\n')conn.send(b'<h1>ok!</h1>')conn.close()----------------------------------根据不同路径返回不同内容
while True:    conn,addr = sk.accept()    data = conn.recv(8096)    data = data.decode()    url = data.split()[1]    conn.send(b'HTTP/1.1 200 ok\r\nk1: v1\r\n\r\n')    if url == '/sx':        conn.send(b'11')    elif url == '/bj':        conn.send(b'22')    else:        conn.send(b'not found!')    conn.close()-------------------------------------def 函数版---
import socketsk = socket.socket()sk.bind(('127.0.0.1',8002))sk.listen()def sx(url):    ret = 'nihao   -  {}'.format(url)    return ret.encode()def bj(url):    ret = 'huairen   -  {}'.format(url)    return ret.encode()while True:    conn,addr = sk.accept()    data = conn.recv(8096)    data = data.decode()    url = data.split()[1]    conn.send(b'HTTP/1.1 200 ok\r\nk1: v1\r\n\r\n')    if url == '/sx':        ret = sx(url)    elif url == '/bj':        ret = bj(url)    else:        ret = b'not found'    conn.send(ret)    conn.close()-----------------------------------进阶列表版
import socketsk = socket.socket()sk.bind(('127.0.0.1',8002))sk.listen()def sx(url):    ret = 'nihao   -  {}'.format(url)    return ret.encode()def bj(url):    ret = 'huairen   -  {}'.format(url)    return ret.encode()# 定义一个地址和函数的对应关系的列表list1 = [('/sx',sx),('/bj',bj)]while True:    conn,addr = sk.accept()    data = conn.recv(8096) # 接收数据    data = data.decode()    url = data.split()[1]  # 获取url    conn.send(b'HTTP/1.1 200 ok\r\nk1: v1\r\n\r\n')    func = None    for i in list1:        if url == i[0]:            func = i[1]            break    if func:        ret = func(url)    else:        ret = b'not found'      conn.send(ret)    conn.close()----返回html网页------------------
def index(url):    with open('index.html', 'rb') as f:        ret = f.read()        return ret

list1 = [('/sx',sx),('/index',index)]--------返回一个动态页面------------
def timer(url):    now = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())    with open('time.html','r',encoding='utf-8') as f:        data = f.read()        data = data.replace('@@time@@',now)        return data.encode('utf-8')list1 = [('/sx',sx),('/index',index),('/timer',timer)]

"""
根据URL中不同的路径返回不同的内容--函数进阶版
返回HTML页面
让网页动态起来
wsgiref模块版
"""
--------------------------------------------------
from wsgiref.simple_server import make_serverdef index(url):with open('index.html','r',encoding='utf-8') as f:s = f.read()return bytes(s,encoding='utf-8')def timer(url):import timewith open('time.html','r',encoding='utf-8') as f:s = f.read()s = s.replace('@@time@@',time.strftime("%Y-%m-%d %H:%M:%S"))return bytes(s,encoding='utf-8')list1 = [('/index/',index),('/time/',timer)]def run_server(environ,start_response):#设置http 响应的状态码和头信息start_response('200 OK',[('Content-Type', 'text/html;charset=utf8'),])url = environ['PATH_INFO'] #取到用户输入的urlfunc = Nonefor i in list1:if i[0] == url:func = i[1]breakif func:response = func(url)else:response = b'404 not found!'return [response,]
if __name__ == '__main__':httpd = make_server('127.0.0.1',8888,run_server)print('我在8888等你呦...')httpd.serve_forever()

------------引用第三方 jinja2----------from wsgiref.simple_server import make_server
from jinja2 import Template
def index(url):#读取html文件with open('index2.html','r',encoding='utf-8') as f:data = f.read()temp = Template(data)  #生成模板文件ret = temp.render({'name':'alex','hobby_list': ['抽烟', '喝酒', '烫头']})#把数据填充到模板中return bytes(ret,encoding='utf-8')def home(url):with open('home.html','r',encoding='utf-8') as f:s = f.read()return bytes(s,encoding='utf-8')
list1 = [('/index/',index),('/home/',home)]
def run_server(environ,start_response):#设置http 响应的状态码和头信息start_response('200 OK',[('Content-Type', 'text/html;charset=utf8'),])url = environ['PATH_INFO'] #取到用户输入的urlfunc = Nonefor i in list1:if i[0] == url:func = i[1]breakif func:response = func(url)else:response = b'404 not found!'return [response,]
if __name__ == '__main__':httpd = make_server('127.0.0.1',8888,run_server)print('我在8888等你呦...')httpd.serve_forever()

转载于:https://www.cnblogs.com/zhangchen-sx/p/10269186.html

Django web框架相关推荐

  1. Django Web框架教学笔记-1

    <Django Web框架教学笔记> 目录 文章目录 <Django Web框架教学笔记> 目录 Django框架的介绍 Django的安装 Django框架开发 创建项目的指 ...

  2. Django web 框架学习之旅(3)

    <Django Web 框架> 目录 静态文件 Django中的应用 - app 什么是应用(app) 创建应用app Django应用的结构组成 数据库 和 模型 Django下使用my ...

  3. Django web框架学习之旅(4)

    <Django Web 框架> 目录 Django shell的使用 admin 后台数据库管理 自定义后台管理数据表 修改后台Models的展现形式 模型管理器类 数据库表管理 数据表关 ...

  4. Django Web框架的使用

    1.前言 Django是基于Python的重量级开源Web框架.Django拥有高度定制的ORM和大量的API,简单灵活的视图编写.优雅的url.适用于快速开发的模板以及强大的管理后台. Django ...

  5. 在IIS上部署基于django WEB框架的python网站应用

    django是一款基于python语言的WEB开源框架,本文给出了如何将基于django写的python网站部署到window的IIS上. 笔者的运行环境: Window xp sp3 IIS 5.1 ...

  6. python Django web 框架 (二十)之ORM

    Django之模型层第一篇:单表操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库 ...

  7. Django web框架学习笔记

    Django1.11.4 版本支持Python3.5 3.6 1.Django安装 pip install django==1.11.4 2.验证是否安装成本 python import django ...

  8. Django web框架-----Django连接现有mysql数据库

    第一步:win10下载mysql5.7压缩包配置安装mysql,创建数据库或导入数据库 第二步:win10搭建django2.1.7开发环境,创建项目为mytestsite,创建应用app为quick ...

  9. Django web框架-----Django连接本地现有mysql数据库

    第一步:win10下载mysql5.7压缩包配置安装mysql,创建数据库或导入数据库 第二步:win10搭建django2.1.7开发环境,创建项目为mytestsite,创建应用app为quick ...

最新文章

  1. Java, Mono, or C++?
  2. oracle重新启动步骤
  3. 实训项目2Linux基本命令,实训项目2 Linux文件系统管理
  4. 有效用例分析阅读笔记一
  5. C++Primer再学习(3)
  6. P2085 最小函数值 堆
  7. veket智能机器人
  8. 测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站
  9. AjaxPro.dll和AjaxPro.2.dll的web配置方法
  10. 高性能框架gevent和gunicorn在web上的应用及性能测试
  11. 想起了那个充满忧伤的夏天
  12. C语言:计算1!+2!+3!+...+100!
  13. Wondershare DVD Creator mac版如何刻录光盘文件
  14. html5 localStorage
  15. 计算机会计学ufo报表,计算机会计学 第四章 报表子系统.pdf
  16. 强强联合!蚂蚁金服与新炬网络战略合作,共同致力于国产数据库的技术推广和生态建设...
  17. docker用现有容器创建镜像
  18. MACBOOK快捷键输入
  19. mysql三表关联查询
  20. 室内定位技术的应用及室内定位技术的种类-新导智能

热门文章

  1. 面向过程(结构化)分析方法与面向对象分析方法的区别
  2. 明朝是中国历史上最有骨气的王朝?【ZZ】
  3. Redis源码解析——内存管理
  4. Ubuntu定时任务crontab命令介绍
  5. TeamViewer介绍:远程控制计算机
  6. 图像处理和图像识别中常用的matlab函数
  7. 【TX2】英伟达Nvidia TX2连接蓝牙设备
  8. 【linux】Matchbox(一):启动脚本
  9. android wear无法启用,android-wear – 无法创建Android虚拟设备,“没有为此目标安装系统映像”...
  10. python自动翻译小工具_Python实现翻译小工具