handler

Web开发---路由实现

一曲冷凌霜 提交于 2020-03-24 23:01:35
类Flask框架实现 路由route 路由功能实现 路由类实现 #路由 # url = 'http://127.0.0.1:9999/python/index.html?id=5&name=wayne&age=20' # path = '/python/index.html' class Router: ROUTETABLE = {} def register(self,path,handler): self.ROUTETABLE[path] = handler def indexhandler(request): return '<h1>欢迎来到index.html</h1>' def pythonhandler(request): return "<h1>欢迎来到python.html</h1>" router = Router() router.register('/',indexhandler) router.register('/python',pythonhandler) 404处理 注册函数的改造 将注册函数改造成装饰器 class Router: ROUTETABLE = {} @classmethod #注册路由,装饰器 def register(cls,path): def wrapper(handler): cls.ROUTETABLE[path] =

Python中Web框架编写学习心得

徘徊边缘 提交于 2020-03-24 22:21:15
学习廖雪峰老师的 Python实战教程 ,在Web框架这部分看了大致一个多礼拜,前面的知识学的不够扎实,由于比较复杂,因此在这里总结下,也算是巩固了。 先看下框架的调用代码: app = web.Application(loop=loop, middlewares=[logger_factory, response_factory]) init_jinja2(app, filters=dict(datetime=datetime_filter)) add_routes(app, 'handlers') add_static(app) 使用web.Application类创建aiohttp server——app,其中loop为Eventloop用来处理HTTP请求,middlewares为中间件,在这里用来记录日志并处理handler返回的数据为web.response对象,这里看下 response_factory 的代码 async def response_factory(app, handler): async def response(request): logging.info('Response handler...') #获取handler的返回值,根据返回值的不同类型进行处理 r = await handler(request) print(type(r)) if

设计模式——责任链模式

倖福魔咒の 提交于 2020-03-24 16:24:50
本系列博客是自己在学习设计模式过程中收集整理的文章集合,其他文章参看 设计模式传送门 本文是转载文章,原文请参考 此博客 概念 责任链模式 (Chain of Responsibility)中包含包含一些命令对象和处理对象。处理对象会通过指针形成链式结构(责任链),命名对象经过 责任链上的处理对象一个个处理得到最终的处理结果。 优缺点 在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。 优点 降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息。 增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则。 增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或者删除责任。 责任链简化了对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。 责任分担。每个类只需要处理自己该处理的工作,不该处理的传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原则。 缺点 不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理

JavaScript事件模型

早过忘川 提交于 2020-03-24 08:14:59
1、什么是事件? 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码。这种在传统软件工程中被称为观察员模式的模型,支持页面的行为(JavaScript 代码)与页面的外观(HTML 和CSS 代码)之间的松散耦合。DOM2 级规范开始尝试以一种符合逻辑的方式来标准化DOM事件。 2、什么是事件流? 事件冒泡 :IE 的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。如: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Event Bubbling Example</title> 5 </head> 6 <body> 7 <div id="myDiv">Click Me</div> 8 </body> 9 </html> 事件触发顺序为: 事件捕获 :Netscape Communicator 团队提出的另一种事件流叫做事件捕获(event capturing)。事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在事件到达预定目标之前捕获它。 1 <!DOCTYPE html> 2 <html> 3 <head

javascript中的事件Event(一)

你说的曾经没有我的故事 提交于 2020-03-24 07:33:50
一、Event基本信息 1、事件流:描述的是从页面中接受事件的顺序 IE的事件流是事件冒泡流,Netscape的事件流是事件捕获流。 2、事件冒泡 IE的事件流叫做事件冒泡(event bubbing),即事件开始时由具体的元素接受,然后逐级向上传播到较为不具体的节点。如果点击div。则事件流如下 div --> body --> html --> body 事件冒泡的过程如图 3、事件捕获 Netscape提出的事件流是事件捕获(event capturing),即不太具体的节点更早的接受到事件,然后逐级向下传递,具体的节点最后接受到事件。如果点击div,则事件流如下 body--> html --> body -->div 4、DOM事件流 DOM2级规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件捕获阶段。 事件流传递情况如下 二、事件处理(handler) 1、事件监听器或事件处理程序,即响应某个事件的函数,名字是以"on"开头的。 2、DOM0 级的Event handler 每个元素(包括window,document)都有自己的事件处理程序属性,属性通常全部小写,将属性设置成函数即可指定处理函数。 var btn = document.getElementById('myBtn'); btn.onclick = function() { alert(this

asp.net core mvc剖析:路由

若如初见. 提交于 2020-03-23 07:35:51
在mvc框架中,任何一个动作请求都会被映射到具体控制器中的方法上,那框架是如何完成这样一个过程的,现在我们就来简单分析下流程。 我们紧跟上面的主题,任何一个请求都会交给处理管道进行处理,那mvc处理的流程自然也应该处于这个管道中,在startup.cs文件的Configure方法中,我们会看到这样的代码 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}", defaults: new { area = "admin" }); });   这部分代码的作用我们都清楚,就是配置路由规则,把用户的请求,路由到控制器方法上,我们来看它里面怎么做到的。首先看下UseMvc方法,直接上代码: public static IApplicationBuilder UseMvc( this IApplicationBuilder app, Action<IRouteBuilder> configureRoutes) { 。。。。。。 //实例化路由构造器 var routes = new RouteBuilder(app) { //设置默认处理器,就是路由符合条件时使用MvcRouteHandler来处理请求 DefaultHandler

Android中后台线程如何与UI线程交互

一个人想着一个人 提交于 2020-03-23 06:09:40
我想关于这个话题已经有很多前辈讨论过了。今天算是一次学习总结吧。 在android的设计思想中,为了确保用户顺滑的操作体验。一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务。因此我们必须要重新开启一个后台线程运行这些任务。然而,往往这些任务最终又会直接或者间接的需要访问和控制UI控件。例如访问网络获取数据,然后需要将这些数据处理显示出来。就出现了上面所说的情况。原本这是在正常不过的现象了,但是android规定除了UI线程外,其他线程都不可以对那些UI控件访问和操控。为了解决这个问题,于是就引出了我们今天的话题。Android中后台线程如何与UI线程交互。 据我所知android提供了以下几种方法,用于实现后台线程与UI线程的交互。 1、handler 2、Activity.runOnUIThread(Runnable) 3、View.Post(Runnable) 4、View.PostDelayed(Runnabe,long) 5、AsyncTask 方法一:handler handler是android中专门用来在线程之间传递信息类的工具。 要讲明handler的用法非常简单,但是我在这里会少许深入的讲一下handler的运行机制。 为了能够让handler在线程间传递消息,我们还需要用到几个类。他们是looper,messageQueue,message。

理解jquery on 委托事件的机制

折月煮酒 提交于 2020-03-21 16:44:44
前两天做了一个点击任意位置,都能关闭菜单的功能,因为菜单里面的每一个a,的点击事件都是用on绑定的。所以在阻止冒泡的时候不管用,今天特意来理解一下on的机制 on 是委托事件,利用的就是冒泡原理 $(selector).on(event,[selector],handler); selector 如果为空,表示的就是目标元素就是所选元素,如果有值代表的是符合所选元素的所有后代元素 实际上,事件委托的事件处理函数是 当被委托的元素上的事件触发时判断e.target后执行 ,而不是目标元素上的事件被触发后就立即执行,在没有阻止冒泡的情况下,事件还是一层层传播的,只是处理函数在事件到达那一层被触发的问题。根据事件代理的规则,点击li元素后,click事件是从li至ul至ul父元素一层层冒泡上去的,沿途触发各个元素上的事件处理函数。如果我们将事件委托在ul上,调用了stopPropagation,就 阻止了事件从ul继续向上冒泡,而不是阻止事件从li向上冒泡 。这样从ul开始,ul及其祖先元素上的事件冒泡被阻止。 重要说明 : 如果传递了 selector 参数,那么 on() 函数并 不是 为当前jQuery对象匹配的元素绑定事件处理函数,而是 为它们的 后代元素中符合选择器 selector 参数的元素绑定事件处理函数 。 on() 函数并不是直接为这些后代元素挨个绑定事件

js-DOM事件

心不动则不痛 提交于 2020-03-21 09:48:45
var EventUtil = { addHandler:function(elm,type,handler){//添加事件 if(elm.addEventListener){ elm.addEventListener(type,handler,false); }else if(elm.attachEvent){ elm.attachEvent('on'+type,handler); }else{ elm['on'+'type']= handler; } }, removeHandler:function(elm,type,handler){//移除事件 if(elm.removeEventListener){ elm.removeEventListener(type,handler,false); }else if(elm.detachEvent){ elm.detachEvent('on'+type,handler); }else{ elm['on'+type]=null; } }, getEvent:function(event){//获取e return event?event:window.event; }, getTarget:function(event){//获取当前点击对象 return event.target || event.srcElement; },

Android网络开发

岁酱吖の 提交于 2020-03-21 09:19:22
1. WebView用法 ①布局文件新建一个WebView,特别注意线性布局和控件的宽高都要匹配父控件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <WebView android:id="@+id/wv_first" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> ②代码中的配置 private WebView wv_first; wv_first = (WebView) findViewById(R.id.wv_first); // getSettings()设置浏览器的属性 // setJavaScriptEnabled(true)让WebView支持JavaScript脚本 wv_first.getSettings().setJavaScriptEnabled(true); //