一、Web框架本质

  • 所有的web应用程序本质上都是socket,用户的浏览器其实就是一个socket客户端。
  • python中常用的web框架有:
    • Django
    • Flask
    • web.py
  • WSGI(web server gateway interface)定义了使用python编程的web app和web server之间的接口格式,实现了服务端与客户端的解耦。
  • pytho标准库提供的独立WSGI服务器称为wsgired。

二、利用wsgrired自定义Web框架

#!/usr/local/bin/python3
#-*-coding:utf-8 -*-
#Author:Felix Song ;Environment:pycharm 5.0.3(python3.6) #用python标准库开发一个自己的web框架
from wsgiref.simple_server import make_server #第二步改造,获取conf中的内容
import conf_url def RunServer(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
#第一步,获取用户URL,debug模式下,在start_response加断点,然后浏览器访问在Variables下的environ中找
userUrl = environ['PATH_INFO']
print(userUrl)
urlpatterns = conf_url.routes() #第三步改造
#第二步改造
func = None
# for item in conf_url.url: #第三步注释掉
for item in urlpatterns:#第三步改造
if item[0] == userUrl:
func = item[1]
break if func:
return func()
else:
return [bytes('<h1>404</h1>',encoding='utf-8')] '''
#第二步,根据URL输入的不同返回不同的值,但是如果页面很多用if else就比较费劲了...改造下,新建一个conf.py在里边定义所有的URL模型
if userUrl == '/index/':
return [bytes('<h1>index</h1>',encoding='utf-8')]
elif userUrl == '/login/':
return [bytes('<h1>login</h1>',encoding='utf-8')]
elif userUrl == '/logout/':
return [bytes('<h1>logout</h1>',encoding='utf-8')]
else:
return [bytes('<h1>404 no found</h1>',encoding='utf-8')]
''' if __name__ == '__main__':
httpd = make_server('',8000,RunServer)
print('Serving http on port 8000...')
httpd.serve_forever()

server

#!/usr/local/bin/python3
#-*-coding:utf-8 -*-
#Author:Felix Song ;Environment:pycharm 5.0.3(python3.6) def index():
return [bytes('<h1>index</h1>',encoding='utf-8')]
# return [b'<h1>index</h1>']
def login():
return [bytes('<h1>login</h1>',encoding='utf-8')] #第三步改造,路由系统
def routes():
urlpatterns = (('/index',index),('/index',index),('/index',index))
return urlpatterns # #第二步改造,网页对照表
# url = (
# ('/index',index),
# ('/index',index),
# ('/index',index),
# )

conf_url

 三、MVC框架(代码的归类)

  Model包:对数据库操作

  View包:存放html文件

    login.html:

  Controller包:业务逻辑处理

    Account.py:账户相关控制放在这里

    Admin.py:后台管理

四、MTV框架(代码的归类)

  Model包:对数据库的操作

  Template包:存放html文件

  View包:业务逻辑

参考:

http://www.cnblogs.com/wupeiqi/articles/4491246.html

http://www.cnblogs.com/wupeiqi/articles/5237672.html

01 Web框架介绍的更多相关文章

  1. WEB框架介绍

    python  web框架分类 自己实现socket Tornado 借助wsgi实现socket Django:因为Django用的wsgi,所以不用操作socket. wsgi有很多,如下, MV ...

  2. python web框架介绍对比

    Django Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django.要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善.市场占 ...

  3. Flask基础(01)-->Flask框架介绍

    什么是Flask? 说白了,Flask就是一种web框架 在python中常用的框架有 flask django tornado 什么又是web框架呢?  为什么要使用web框架呢? 增强扩展性和稳定 ...

  4. web框架django初探

    Web框架介绍 一般会分为两部分:服务器程序和应用程序.服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理.应用程序则负责具体的逻辑处理.为了方便应用程序的开发,就出 ...

  5. [转载] 新兵训练营系列课程——平台服务部署及Web框架

    原文: http://weibo.com/p/1001643875679132642345 大纲 微博平台主要负责微博基础功能.接下来将会介绍 平台的作用,以及服务提供的形式 平台Web服务的部署 平 ...

  6. 自定义python web框架

    -- Bootstrap http://www.bootcss.com/ -- Font Awesome http://fontawesome.io/ -- bxslider http://bxsli ...

  7. 【python之路41】web框架

    一.web框架介绍 一共有两种web框架 1.既包含socket又能逻辑处理 tornado框架 2.只能处理逻辑 Django bottle flask  二.web框架的本质 众所周知,对于所有的 ...

  8. Go语言Web框架gwk介绍4

    Go语言Web框架gwk介绍 (四)   事件 gwk支持事件系统,但并没有硬编码有哪些事件,而是采用了比较松散的定义方式. 订阅事件有两种方式: 调用On函数或者OnFunc函数 func On(m ...

  9. Go语言Web框架gwk介绍 3

    Go语言Web框架gwk介绍 (三)   上一篇忘了ChanResult ChanResult 可以用来模拟BigPipe,定义如下 type ChanResult struct { Wait syn ...

随机推荐

  1. C# 数组之ArrayList

    一.引言 ArrayList类相当于一种高级的动态数组,是Array类的升级版本. 一般的Array,底层是数组实现的,对于数据的查找和修改十分高效.但是有2个大的缺点,其一为增删低效,其二为数组长度 ...

  2. Codeforces 140C(二分、构造)

    要点 可以贪心选数量最多的那三个构造 二分的话里面的check我不太会.正解是既然当前答案为\(k\)个,那每个物品最多只会出现\(k\)次,多余的丢掉,剩下的总数如果大于等于\(3k\)则true. ...

  3. 补充:jQuery的ajax

    一.jQuery的ajax 什么是ajax AJAX = 异步的javascript和XML(Asynchronous Javascript and XML) 简言之,在不重载整个网页的情况下,AJA ...

  4. (转)Nginx的https配置记录以及http强制跳转到https的方法梳理

    Nginx的https配置记录以及http强制跳转到https的方法梳理 原文:http://www.cnblogs.com/kevingrace/p/6187072.html 一.Nginx安装(略 ...

  5. document.getElementById(...) is null

    <html> <head> <script type="text/javascript"> document.getElementById('b ...

  6. clickhouse源码Redhat系列机单机版安装踩坑笔记

    前情概要 由于工作需要用到clickhouse, 这里暂不介绍概念,应用场景,谷歌,百度一大把. 将安装过程踩下的坑记录下来备用 ClickHouse源码 git clone安装(直接下载源码包安装失 ...

  7. MySQL 如何在一个语句中更新一个数值后返回该值 -- 自增长种子竞态问题处理

    什么是竞态问题? 假设有一个计数器,首先当前值自增长,然后获取到自增长之后的当前值.自增长后的值有可能被有些操作用来当做唯一性标识,因此并发的操作不能允许取得相同的值. 为什么不能使用使用UPDATE ...

  8. springboot项目实现批量新增功能

    这个困扰我一整天东西,终于解决了. 首先是mybatis中的批量新增sql语句. 注意:这里我给的是我需要新增的字段,你们改成你们需要的字段. <insert id="insertBa ...

  9. 1008 选数 2002年NOIP全国联赛普及组

    1008 选数 2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description ...

  10. 关于原生javascript的this,this真是个强大的东东

    最近一直坐在东钿微信服务平台,上上级领导提出一个要求,就是微信分享. 因为首页是一个tab切换页,领导想在分享的时候区分上产调还是评估.我研究了很久很久,一直都是失败,今天领导又问了.于是我就向我们老 ...