1、简单概括
下面定义了三个不同的模块用于测试,account.py 模块里有login()和logout(),admin.py模块里有index()。在这里模拟一个url的访问,意思是通过访问不同的url来指向到不同的模块里的函数进行处理,也可以说是处理这个url请求。那么这个就是通过“反射”机制来实现的。
拓展一下,现在几乎所有的语言(不管是php,python,java,.net)的web框架都是通过“反射”机制的方式来根据URL的不同来指向到不同函数里边的不同的方法来执行。
2、account.py 模块
1
2
3
4
5
6
7
8
9
10
11
12
|
# -*- coding: utf-8 -*- """ Created on Sun Nov 13 23:19:03 2016 @author: toby """ def login():
print 'login'
def logout():
print 'logout'
|
3、admin.py 模块
1
2
3
4
5
6
7
8
9
|
# -*- coding: utf-8 -*- """ Created on Sun Nov 13 23:19:23 2016 @author: toby """ def index():
print '欢迎登录管理后台'
|
4、index-test.py 模块
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# -*- coding: utf-8 -*- """ Created on Sun Nov 13 23:20:27 2016 @author: toby """ data = raw_input ( '请输入地址:' )
array = data.split( '/' ) #url规则,通过“/”来进行分割,分割后则索引0的值是模块,索引1的值是函数名
userspance = __import__ (array[ 0 ]) #这里导入模块,模块位于分割后的索引0位置
func = getattr (userspance,array[ 1 ]) #这里通过getattr来实现反射,索引1的位置为函数
func() #执行反射后的函数
|
5、下面是测试结果
toby@toby-virtual-machine:~/workspace/pydev/main$ python index-test.py
请输入地址:account/login
login
toby@toby-virtual-machine:~/workspace/pydev/main$ python index-test.py
请输入地址:admin/index #admin是模块,index是该模块里的一个函数 (这里模拟一个url,也可以想象成 http://192.168.1.100/admin/index)
欢迎登录管理后台 #这个输出就是index()函数里的一个动作
toby@toby-virtual-machine:~/workspace/pydev/main$
本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/1872650