当前位置: 首页 > news >正文

python之通过“反射”实现不同的url指向不同函数进行处理(反射应用一)

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


相关文章:

  • Bash技巧总结
  • 关于vector性能的测试(一)
  • 重装linux服务器后开不了机
  • Linux TC的ifb原理以及ingress流控
  • linux--mariadb数据库
  • nginx开启后主机无法访问虚拟机的nginx解决方案
  • Linux 特殊目录
  • MPLS TE第一步:创建基本TE隧道
  • mysql5.6之key_buffer_size优化设置
  • 使用yum安装MariaDB
  • Oracle Goldengate Director软件截面图
  • Spring4-自动装配Beans-按属性名称自动装配
  • Office 365管理员快速上手手册
  • centos 系统管理维护指南
  • phpcms v9 添加内容出现500错误
  • 10个确保微服务与容器安全的最佳实践
  • Android系统模拟器绘制实现概述
  • express.js的介绍及使用
  • HTTP中的ETag在移动客户端的应用
  • in typeof instanceof ===这些运算符有什么作用
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java比较器对数组,集合排序
  • Java编程基础24——递归练习
  • java概述
  • k个最大的数及变种小结
  • Laravel 中的一个后期静态绑定
  • leetcode-27. Remove Element
  • npx命令介绍
  • python学习笔记 - ThreadLocal
  • Redis 懒删除(lazy free)简史
  • Vue 2.3、2.4 知识点小结
  • Vue UI框架库开发介绍
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端
  • 如何选择开源的机器学习框架?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 入口文件开始,分析Vue源码实现
  • 我有几个粽子,和一个故事
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • hi-nginx-1.3.4编译安装
  • #Java第九次作业--输入输出流和文件操作
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.13) SiK无线电高级配置(六)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (ros//EnvironmentVariables)ros环境变量
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (算法设计与分析)第一章算法概述-习题
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (循环依赖问题)学习spring的第九天
  • (一)Thymeleaf用法——Thymeleaf简介