python web开发 编写web框架
参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432339008728d0ddbe19ee594980be3f0644a9371894000
解释:https://blog.csdn.net/qq_38801354/article/details/73008111
重写web框架的好处
1)可以直接这样写
#处理带参数的URL/blog/{id}可以这么写:
@get('/blog/{id}')
def get_blog(id):
pass
#处理query_string参数可以通过关键字参数**kw或者命名关键字参数接收:(这个还不太懂)
@get('/api/comments')
def api_comments(*, page='1'):
pass
#对于函数的返回值,不一定是web.Response对象,可以是str、bytes或dict。
#所以如果希望渲染模板,我们可以这么返回一个dict:
return {
'__template__': 'index.html',
'data': '...'
}
而不是需要使用aiohttp时必须的一些步骤
#直接使用aiohttp
import asyncio from aiohttp import web async def index(request):
await asyncio.sleep(0.5)
return web.Response(body=b'<h1>Index</h1>')
#--------------------------------------------------看这个
async def hello(request):#使用async关键字添加协程装饰器
await asyncio.sleep(0.5)
#对request参数进行操作,获取响应的操作
text = '<h1>hello, %s!</h1>' % request.match_info['name']
#构造reponse对象并返回
return web.Response(body=text.encode('utf-8')) async def init(loop):
app = web.Application(loop=loop)
app.router.add_route('GET', '/', index)
app.router.add_route('GET', '/hello/{name}', hello)
srv = await loop.create_server(app.make_handler(), '127.0.0.1', 8000)
print('Server started at http://127.0.0.1:8000...')
return srv loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()
所以,自定义的web框架能封装上面的一些步骤,让你只需要编写函数就好了
2)可以对模块进行单独测试,不然,需要你模拟一个浏览器请求即request才可以实现
开始编写Web框架
第一步:以aiohttp框架为基础去编写
@get和@post
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。
建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
把一个函数映射(相当于绑定)为一个URL处理函数
第二步:定义RequestHandler
使用者编写的URL处理函数不一定是一个coroutine,因此我们用RequestHandler()来封装一个URL处理函数(不懂)
RequestHandler 目的就是从URL函数中分析其需要接收的参数,从request中获取必要的参数,调用URL函数。
RequestHandler 是一个类,创建的时候定义了 __call__() 方法,因此可以将其实例视为函数。
关于Call方法的作用:https://www.cnblogs.com/superxuezhazha/p/5793536.html
#一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。 #我们把 Person 类变成一个可调用对象: class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender def __call__(self, friend):
print 'My name is %s...' % self.name
print 'My friend is %s...' % friend
#现在可以对 Person 实例直接调用: >>> p = Person('Bob', 'male')#__init__中传入的参数是干这样的事情的,类似于初始化
>>> p('Tim')#然后用实例来调用
My name is Bob...
My friend is Tim...
#单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。
python web开发 编写web框架的更多相关文章
- 关于web开发前端h5框架的选择
关于web开发前端h5框架的选择 看了很多移动版框架都是基于app混合式开发的,不是单独h5网站的基于h5开发的web框架从组件丰富度,兼容性,相关教程来说bootstrap还是最好的react和vu ...
- PHP做Web开发的MVC框架(Smarty使用说明 )
PHP做Web开发的MVC框架(Smarty使用说明 ) 一.Smarty简明教程 1.安装演示 下载最新版本的Smarty-3.1.12,然后解压下载的文件.接下来演示Smarty自带的demo例子 ...
- Python Web 开发的十个框架【转载】
Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...
- 六十一 Web开发 使用Web框架
由于用Python开发一个Web框架十分容易,所以Python有上百个开源的Web框架.这里我们先不讨论各种Web框架的优缺点,直接选择一个比较流行的Web框架——Flask来使用. 用Flask编写 ...
- web开发-MVC IoC 框架(转)
随着Web应用的商业逻辑包含逐渐复杂的公式分析计算.决策支持等,使客户机越 来越不堪重负,因此将系统的商业分离出来.单独形成一部分,这样三层结构产生了. 其中‘层’是逻辑上的划分. 三层体系结构是将整 ...
- 一个C#开发编写Java框架的心路历程
前言 这一篇絮絮叨叨,逻辑不太清晰的编写Java框架的的一个过程,主要描述我作为一个java初学者,在编写Java框架时的一些心得感悟. 因为我是C#的开发者,所以,在编写Java框架时,或多或少会带 ...
- Python Web开发:使用Django框架创建HolleWorld项目
开发环境搭建 Python环境安装 下载地址:https://www.python.org/downloads// Django安装 打开Windows CMD输入pip install django ...
- python web开发——c2 flask框架和flask_script
重定向/error 通过flask中的redirect方法和自定义的newpath函数.redirect_demo函数实现重定向: #coding:utf-8 from flask import Fl ...
- 15款加速 Web 开发的 JavaScript 框架
JavaScript 可以通过多种方式来创建交互式的网站和 Web 应用程序.利用 JavaScript,可以让你移动 HTML 元素,创建各种各样的自定义动画,给你的访问者更好的终端用户体验. 对于 ...
随机推荐
- C++ auto类型说明符
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50864612 编程时常常需要把表达式的 ...
- js cookie 设置
(function () { function getCookie(name) { var start = document.cookie.indexOf(name + "="); ...
- php RSA 简单实现
这是rsa_private_key.pem-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC ...
- jdk环境变量设置理解
1.系统变量→新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 2.系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOM ...
- [笔记][Java7并发编程实战手冊]3.4 等待多个并发事件的完毕CountDownLatch倒计数闭锁
[笔记][Java7并发编程实战手冊]系列文件夹 简单介绍 本文学习CountDownLatch 倒计数闭锁. 本人英文不好.靠机器翻译,然后有一段非常形象的描写叙述,让我把它叫为倒计数 用给定的计数 ...
- Android error--No implementation found for native Lcomd
在利用NDK编译Cpp执行时,出现了No implementation found for native Lcom等错误,调试好久,才发现 XXX.h和XXX.cpp.在XXX.cpp里#includ ...
- Photon + Unity3D 线上游戏开发 学习笔记(一)
大家好. 我也是学习Photon + unity3D 的新手 有什么说错的地方大家见谅哈. 我的开发环境是 unity3D 4.1.3 , Visual Studio 是2010 版本号的 p ...
- ubuntu16.04下配置caffe无GPU
1. 安装依赖项 1 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5- ...
- 16.unix网络编程一卷 unp.h
unix网络编程 --ubuntu下建立编译环境 1.安装编译器,安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下 ...
- Spark RDD概念学习系列之action操作
不多说,直接上干货! action操作