python_web框架
一、web框架
web框架:
- 自己完成socket的web框架:如,Tornado等
- 由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中,存在的三种语法:
- 控制结构{% %}
- 变量取值{{ }}
- 注释(# #)
例: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框架的更多相关文章
- Python_web框架解析
这一阵正在学习廖雪峰老师的实战课程,这里对其中web.py框架进行一些分析,总结一下学到的东西. 这一部分的课程网站:http://www.liaoxuefeng.com/wiki/001374738 ...
- python web -- flask
Flask是一个简洁的 Python_web 框架. 零. virtualenv 虚拟环境配置. $ easy_install pip $ pip install virtualenv $ virtu ...
- 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 ...
- 整合django和bootstrap框架
环境: python版本:2.7.8 django版本:1.7.1 bootstrap版本:3.3.0 首先github上面有两个开源的项目用来整合django和bootstrap. https:// ...
- python_web应用雏型
python_web应用雏型 Web应用程序顾名思义,就是一种可以通过Web访问的应用程序, Web应用的最大特点是用户只需要有网络和浏览器,不需要再安装其他软件就可顺利通过web访问到程序. WEB ...
- DRF框架之DRF的引入
DRF框架是python_web中采用前后端分离开发模式的框架,其处理JSON数据是最快的. 通过DRF框架,我们后端程序员只需要拼接并响应JSON数据即可,并且数据复用性高适用于浏览器端.APP端等 ...
- python pytest接口自动化框架搭建(一)
1.首先安装pytest pip install pytest 2.编写单测用例 在pytest框架中,有如下约束: 所有的单测文件名都需要满足test_*.py格式或*_test.py格式. 在单测 ...
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
随机推荐
- pytest 13 使用自定义标记mark
前言: pytest可以规定那些要跑,那些不跑,跑特定的哪些?比如以下的这个例子: #!/usr/bin/env/python # -*-coding:utf-8-*- import pytest @ ...
- Grains 与 Pillars
Grains 与 Pillars Grains介绍 Grains接口是salt用来采集底层系统信息的,包含了操作系统信息.域名.IP地址.内核.内存等一些底层信息.就是因为grains采集了这些信息, ...
- 【linux】常用命令集锦&持续更新...
滴:转载引用请注明哦[握爪]:https://www.cnblogs.com/zyrb/p/9709013.html 对深度学习训练及日常work中的常用linux命令进行整理. [一]screen ...
- SQL随记(六)
1.关于dbms_sql包的一些执行语句 cursor_name := DBMS_SQL.OPEN_CURSOR; --打开游标: DBMS_SQL.PARSE(cursor_name, var_dd ...
- HTTP协议7之Cookie--转
Cookie是HTTP协议中非常重要的东西, 之前拜读了Fish Li 写的[细说Cookie], 让我学到了很多东西.Fish的这篇文章写得太经典了. 所以我这篇文章就没有太多内容了. 最近我打算写 ...
- 装饰器模式-Decorator(Java实现)
装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...
- c++对象的存储空间
1. 非静态成员 2. 静态成员变量 静态成员变量不占对象的内存空间 3. 成员函数 成员函数不占内存空间 4. 析构函数 5. 类中有虚析构函数 6. 继承空类和多重继承空类存储空间的计算 7. t ...
- Unity Tiny & ECS 学习笔记
1.官方文档 https://docs.unity3d.com/Packages/com.unity.tiny@0.13/manual/intro-for-unity-developers.html ...
- 2019年最受欢迎IMX6系列开发板,资料全开源,助力产品研发不在话下
迅为IMX6开发板: Android4.4系统 Linux + Qt5.7系统 Ubuntu12.04系统 部分真实案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 板载:4G全网 ...
- 2018-2019-2-20175235 实验一 《Java开发环境的熟悉》实验报告
实验一 Java开发环境的熟悉 实验内容及要求: 1.使用JDK编写简单的Java程序 2.使用IDEA编辑编译运行调试测试Java程序 实验内容,步骤与心得: (一).Linux命令行下Java程序 ...