一、web框架

web框架:

  1. 自己完成socket的web框架:如,Tornado等
  2. 由WSGI完成socket的web框架:如,Django、flash等

两种实现过程:

第二种WSGI方式的,由于自带socket所以可直接写后端代码。

python标准库提供的独立WSGI服务器称为wsgiref,其他的一些接口格式:

'cgi': CGIServer,
'flup': FlupFCGIServer,
'wsgiref': WSGIRefServer,
'waitress': WaitressServer,
'cherrypy': CherryPyServer,
'paste': PasteServer,
'fapws3': FapwsServer,
'tornado': TornadoServer,
'gae': AppEngineServer,
'twisted': TwistedServer,
'diesel': DieselServer,
'meinheld': MeinheldServer,
'gunicorn': GunicornServer,
'eventlet': EventletServer,
'gevent': GeventServer,
'geventSocketIO':GeventSocketIOServer,
'rocket': RocketServer,
'bjoern' : BjoernServer,
'auto': AutoServer,

一个WSGI :(web框架最最最基础版:hello word!)

from wsgiref.simple_server import make_server

def RunServer(environ, start_response):  # web 框架
# environ 参数,里面包含了用户请求的所有信息
start_response('200 OK',[('Content_Type','text/html')])
return ['<h1>Hello,web!</h1>'.encode()] if __name__=='__main__': # wsgi
# 创建socket server对象
httpd = make_server('', 8000,RunServer) # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
print('serving http on port 8000') # 只要有请求进来,执行RunServer函数
httpd.serve_forever() # while循环等待用户请求

二、自定义web框架

from wsgiref.simple_server import make_server

def RunServer(environ, start_response):  # web 框架
# environ 参数,里面包含了用户请求的所有信息
start_response('200 OK',[('Content_Type','text/html')])
url=environ['PATH_INFO']
if url == '/index/':
return ['index'.encode()]
elif url == '/news/':
return ['news'.encode()]
else:
return [''.encode()] if __name__=='__main__': # wsgi
# 创建socket server对象
httpd = make_server('', 8000,RunServer) # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
print('serving http on port 8000..') # 只要有请求进来,执行RunServer函数
httpd.serve_forever() # while循环等待用户请求

自定义1号

from wsgiref.simple_server import make_server

def f1():
return ['<h1>F1</h1>'.encode()] def f2():
return ['<h1>F2</h1>'.encode()]
# 定义的规则
routers={
'/index/':f1(),
'/news/':f2()
}
def RunServer(environ, start_response): # web 框架
# environ 参数,里面包含了用户请求的所有信息
start_response('200 OK',[('Content_Type','text/html')])
url=environ['PATH_INFO']
if url in routers.keys():
func_name = routers[url]
return func_name
else:
return ['<h1>404</h1>'.encode()] if __name__=='__main__': # wsgi
# 创建socket server对象
httpd = make_server('', 8000,RunServer) # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
print('serving http on port 8000..') # 只要有请求进来,执行RunServer函数
httpd.serve_forever() # while循环等待用户请求

自定义2号

from wsgiref.simple_server import make_server

def f1():          # t1.html可以改为t1.tpl,两种写法,tpl=template
f=open('D:/1.pycharm/day2019_03_06/templates/t1.html', 'rb') # 注意这里是以二进制的形式读出
data=f.read()
f.close()
return [data,] def f2():
return ['F2'.encode()] routers={
'/index/': f1(),
'/news/': f2()
}
def RunServer(environ, start_response): # web 框架
start_response('200 OK',[('Content_Type','text/html')])
url=environ['PATH_INFO'] if url in routers.keys():
func_name = routers[url]
return func_name # python3注意这里不能写为函数,返回的直接是这个值
else:
return ['<h1>404</h1>'.encode()] if __name__=='__main__': # wsgi
# 创建socket server对象
httpd = make_server('', 9000,RunServer) # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
print('serving http on port 9000..') # 只要有请求进来,执行RunServer函数
httpd.serve_forever() # while循环等待用户请求

自定义3号

注意:在复制代码测试时,打开文件的路径记得修改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello Word</title>
</head>
<body>
<div sytle="color:red;"><h1>我是一只小鸭子啦啦啦啦。。</h1></div>
<hr/>
<input type="text" value="请输入文字" />
<input type="button" value="提交"/>
</body>
</html>

自定义3号所要的HTML代码

 三、jinja2

jinja2是一个模板系统,它提供了特殊的语法就能使用它进行语言的渲染

在jinja2中,存在的三种语法:

  1. 控制结构{% %}
  2. 变量取值{{ }}
  3. 注释(# #)

例:jinja2对HTML的处理称为:模板引擎进行的模板渲染

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我是女生生</title>
</head>
<body>
<h1>hello</h1>
<hr/>
<h1>{{name}}</h1>
<ul>
{%for item in user_list%}
<li>{{item}}</li>
{%endfor%}
</ul>
</body>
</html>

XXOO.html

渲染: 相互整合

from wsgiref.simple_server import make_server
from jinja2 import Template
def f1():
return ['<h1>ok</h2>'.encode()] def f2():
f=open('D:/1.pycharm/day2019_03_06/jinjia_222/XXOO.html', 'rb')
result = f.read()
result = result.decode()
template = Template(result)
# jinja2 渲染:接收值,进行特特殊的替换
data = template.render(name='Presely', user_list = ['oo','xx'] )
return [data.encode()] # 定义规则
routers={
'/index/': f1(),
'/news/': f2()
}
def RunServer(environ, start_response): # web 框架
start_response('200 OK',[('Content_Type','text/html')])
url=environ['PATH_INFO'] if url in routers.keys():
func_name = routers[url]
return func_name # 注意这里不能写为函数,返回的直接是这个值
else:
return [''.encode()] if __name__=='__main__': # wsgi
# 创建socket server对象
httpd = make_server('', 8000,RunServer) # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息
print('serving http on port 8000..') # 只要有请求进来,执行RunServer函数
httpd.serve_forever() # while循环等待用户请求

渲染

有关jinja2:https://www.cnblogs.com/dachenzi/p/8242713.html

四、web框架之MVC/MTV

本质上两个所指的框架是一个样的;

Django所用模式就是MTV模式,但需要额外的定义url映射关系

python_web框架的更多相关文章

  1. Python_web框架解析

    这一阵正在学习廖雪峰老师的实战课程,这里对其中web.py框架进行一些分析,总结一下学到的东西. 这一部分的课程网站:http://www.liaoxuefeng.com/wiki/001374738 ...

  2. python web -- flask

    Flask是一个简洁的 Python_web 框架. 零. virtualenv 虚拟环境配置. $ easy_install pip $ pip install virtualenv $ virtu ...

  3. QQ第三方登录-python_web开发_django框架

    准备工作 1. 成为QQ互联的开发者 参考链接: <http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%8 ...

  4. 整合django和bootstrap框架

    环境: python版本:2.7.8 django版本:1.7.1 bootstrap版本:3.3.0 首先github上面有两个开源的项目用来整合django和bootstrap. https:// ...

  5. python_web应用雏型

    python_web应用雏型 Web应用程序顾名思义,就是一种可以通过Web访问的应用程序, Web应用的最大特点是用户只需要有网络和浏览器,不需要再安装其他软件就可顺利通过web访问到程序. WEB ...

  6. DRF框架之DRF的引入

    DRF框架是python_web中采用前后端分离开发模式的框架,其处理JSON数据是最快的. 通过DRF框架,我们后端程序员只需要拼接并响应JSON数据即可,并且数据复用性高适用于浏览器端.APP端等 ...

  7. python pytest接口自动化框架搭建(一)

    1.首先安装pytest pip install pytest 2.编写单测用例 在pytest框架中,有如下约束: 所有的单测文件名都需要满足test_*.py格式或*_test.py格式. 在单测 ...

  8. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  9. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

随机推荐

  1. pytest 13 使用自定义标记mark

    前言: pytest可以规定那些要跑,那些不跑,跑特定的哪些?比如以下的这个例子: #!/usr/bin/env/python # -*-coding:utf-8-*- import pytest @ ...

  2. Grains 与 Pillars

    Grains 与 Pillars Grains介绍 Grains接口是salt用来采集底层系统信息的,包含了操作系统信息.域名.IP地址.内核.内存等一些底层信息.就是因为grains采集了这些信息, ...

  3. 【linux】常用命令集锦&持续更新...

    滴:转载引用请注明哦[握爪]:https://www.cnblogs.com/zyrb/p/9709013.html  对深度学习训练及日常work中的常用linux命令进行整理. [一]screen ...

  4. SQL随记(六)

    1.关于dbms_sql包的一些执行语句 cursor_name := DBMS_SQL.OPEN_CURSOR; --打开游标: DBMS_SQL.PARSE(cursor_name, var_dd ...

  5. HTTP协议7之Cookie--转

    Cookie是HTTP协议中非常重要的东西, 之前拜读了Fish Li 写的[细说Cookie], 让我学到了很多东西.Fish的这篇文章写得太经典了. 所以我这篇文章就没有太多内容了. 最近我打算写 ...

  6. 装饰器模式-Decorator(Java实现)

    装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...

  7. c++对象的存储空间

    1. 非静态成员 2. 静态成员变量 静态成员变量不占对象的内存空间 3. 成员函数 成员函数不占内存空间 4. 析构函数 5. 类中有虚析构函数 6. 继承空类和多重继承空类存储空间的计算 7. t ...

  8. Unity Tiny & ECS 学习笔记

    1.官方文档 https://docs.unity3d.com/Packages/com.unity.tiny@0.13/manual/intro-for-unity-developers.html ...

  9. 2019年最受欢迎IMX6系列开发板,资料全开源,助力产品研发不在话下

    迅为IMX6开发板: Android4.4系统  Linux + Qt5.7系统  Ubuntu12.04系统 部分真实案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 板载:4G全网 ...

  10. 2018-2019-2-20175235 实验一 《Java开发环境的熟悉》实验报告

    实验一 Java开发环境的熟悉 实验内容及要求: 1.使用JDK编写简单的Java程序 2.使用IDEA编辑编译运行调试测试Java程序 实验内容,步骤与心得: (一).Linux命令行下Java程序 ...