Python实现手写一个类似django的web框架示例

本文实例讲述了Python实现手写一个类似django的web框架。分享给大家供大家参考,具体如下:

用与django相似结构写一个web框架。

启动文件代码:

from wsgiref.simple_server import make_server #导入模块
from views import *
import urls
def routers():  #这个函数是个元组
  URLpattern=urls.URLpattern
  return URLpattern #这个函数执行后返回这个元组
def application(environ,start_response):
  print("ok1")
  path=environ.get("PATH_INFO")
  print("path",path)
  start_response('200 OK',[('Content-Type','text/html')])
  urlpattern=routers() #讲函数的返回值元组赋值
  func=None
  for item in urlpattern: #遍历这个元组
    if path==item[0]:  #item[0]就是#路径后面的斜杠内容
      func=item[1]  #item[1]就是对应的函数名
      break
  if func: #如果路径内容存在函数就存在
    return func(environ) #执行这个函数
  else:
    print("ok5")
    return [b"404"] #如果不存在就返回404
if __name__=='__main__':
  print("ok0")
  t=make_server("",9700,application)
  print("ok22")
  t.serve_forever()

urls.py文件代码:

from views import *
URLpattern = (
  ("/login", login),
  ("/alex", foo1),
  ("/egon", foo2),
  ("/auth", auth)
)

views.py文件代码:

def foo1(request): # 定义函数
  f=open("templates/alex.html","rb") #打开html 以二进制的模式
  data=f.read() #读到data里
  f.close() #关闭
  return [data] #返回这个data
def foo2(request):
  f=open("templates/egon.html","rb")
  data=f.read()
  f.close()
  return [data]
def login(request):
  f=open("templates/login.html","rb")
  data=f.read()
  f.close()
  return [data]
def auth(request):
  print("+++",request)
  user_union,pwd_union=request.get("QUERY_STRING").split("&")
  _,user=user_union.split("=")
  _,pwd=pwd_union.split("=")
  if user=='Yuan' and pwd=="123":
    return [b"login,welcome"]
  else:
    return [b"user or pwd is wriong"]

templates目录下的html文件:

alex.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
</head>
<body>
<div>alex</div>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<h2>登录页面</h2>
<form action="http://127.0.0.1:9700/auth">
  <p>姓名:<input type="text" name="user"></p>
  <p>密码:<input type="password" name="pwd"></p>
  <p>
    <input type="submit">
  </p>
</form>
</body>
</html>

下面如图,是目录结构

访问ip+prot+路径 即为相应的html,功能简单,只是为了熟悉django

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python Socket编程技巧总结》、《Python URL操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

(0)

相关推荐

  • 全面剖析Python的Django框架中的项目部署技巧第1/2页

    项目开始时是一个关键时刻,选择会对项目产生长期的影响.有很多关于如何开始使用Django框架的教程,但很少讨论如何专业地使用Django,或如何使用行业公认的最佳做法来确保你的项目规模的持续增长.事前的筹划让你(和所有同事的生活)在走向将来时更容易. 文章结束时,你将有 一个全功能的Django 1.6项目 源代码受控的所有资源(使用Git或Mercurial) 自动回归和单元测试(使用unittest库) 一个独立于特定环境的安装项目(使用virtualenv) 自动化的部署和测试(使用Fab

  • python框架django项目部署相关知识详解

    这篇文章主要介绍了python框架django项目部署相关知识详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一:项目部署的框架 nginx和uWSGI在生产服务器上进行的部署 二:什么是nginx? nginx是一个web服务器. 什么是web服务器? web服务器则主要是让客户可以通过浏览器进行访问,处理HTML文件,css文件,js文件,图片等资源.web服务器一般要处理静态文件.对接服务器. 什么是静态文件? css,js,html

  • python设计微型小说网站(基于Django+Bootstrap框架)

    一.项目背景: 为了回顾关于django的文件上传和分页功能,打算写一个微型的小说网站练练手.花了一个下午的时间,写了个小项目,发现其中其实遇到了许多问题,不过大部分通过debug之后就解决了,其他部分通过阅读了Pagination插件以及Bootstrap-FileInput插件的官方文档. 二.详细设计: 省去小说网站的用户模块的功能,小说网站主要的功能就是上传文件,在线阅读小说.针对这两个功能, 主要用到dajngo内置的Pagination模块,以及选择一个上传文件插件即可.因为用的是B

  • Python Web框架之Django框架文件上传功能详解

    本文实例讲述了Python Web框架之Django框架文件上传功能.分享给大家供大家参考,具体如下: 上传方式: - Form表单上传文件 - Ajax上传文件 - 基于form表单和iframe自己实现ajax请求 1,创建项目 2,settings配置(注册app01,static路径等等这些)及url添加(略过) 3,views视图函数 form的视图收到了在request.FILES中的文件数据.从上述form来的数据可以通过request.FILES['file']来存取. 特别注意

  • 解析Mac OS下部署Pyhton的Django框架项目的过程

    一.安装软件包并创建项目 $sudo pip install django $sudo python -c "import django;print django.VERSION" (1, 7, 0, 'final', 0) $sudo django-admin startproject cmdb #创建项目 $sudo django-admin startapp cmdb #创建应用 二.修改配置 1.修改settings.py,添加cmdb应用,以及其他设置 INSTALLED_A

  • Python Django框架实现应用添加logging日志操作示例

    本文实例讲述了Python Django框架实现应用添加logging日志.分享给大家供大家参考,具体如下: Django uses Python's builtin logging module to perform system logging. Django使用python的内建日志模块来记录系统日志,但是要想在django应用中开启此功能使我们的部分操作能够被记录到日志文件,那么就需要进行一定的配置并且根据具体的log类型来进行调用 step 1:配置setting.py 以下配置除了f

  • Python django框架应用中实现获取访问者ip地址示例

    本文实例讲述了Python django框架应用中实现获取访问者ip地址.分享给大家供大家参考,具体如下: 在django官方文档中有一段对request.META的解释: HttpRequest.META A standard Python dictionary containing all available HTTP headers. Available headers depend on the client and server, but here are some examples:

  • Python实现手写一个类似django的web框架示例

    本文实例讲述了Python实现手写一个类似django的web框架.分享给大家供大家参考,具体如下: 用与django相似结构写一个web框架. 启动文件代码: from wsgiref.simple_server import make_server #导入模块 from views import * import urls def routers(): #这个函数是个元组 URLpattern=urls.URLpattern return URLpattern #这个函数执行后返回这个元组

  • 手写一个@Valid字段校验器的示例代码

    上次给大家讲述了 Springboot 中的 @Valid 注解 和 @Validated 注解的详细用法: 详解Spring中@Valid和@Validated注解用法 当我们用上面这两个注解的时候,需要首先在对应的字段上打上规则注解,类似如下. @Data public class Employee { /** 姓名 */ @NotBlank(message = "请输入名称") @Length(message = "名称不能超过个 {max} 字符", max

  • vue用Object.defineProperty手写一个简单的双向绑定的示例

    前言 上次写了一个Object.defineProperty() 不详解,文末说要写用它来写个双向绑定.说话算话,说来就来 前文链接 Object.defineProperty() 不详解 先看最后效果 model演示.gif 什么是双向绑定? 1.当一个对象(或变量)的属性改变,那么调用这个属性的地方显示也应该改变,模型到视图(model => view) 2.当调用属性的这个地方改变了这个属性(通常是一个表单元素),那么这个对象(或变量)的属性也会改为最新的值 ,即视图到模型(view =>

  • Java实现手写一个线程池的示例代码

    目录 概述 线程池框架设计 代码实现 阻塞队列的实现 线程池消费端实现 获取任务超时设计 拒绝策略设计 概述 线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和细节吗?如果直接去看jdk源码的话,可能有一定的难度,那么我们可以先通过手写一个简单的线程池框架,去掌握线程池的基本原理后,再去看jdk的线程池源码就会相对容易,而且不容易忘记. 线程池框架设计 我们都知道,线程资源的创建和销毁并不是没有代价的,甚至开销是非常高的.同

  • Python实战之手写一个搜索引擎

    一.前言 这篇文章,我们将会尝试从零搭建一个简单的新闻搜索引擎 当然,一个完整的搜索引擎十分复杂,这里我们只介绍其中最为核心的几个模块 分别是数据模块.排序模块和搜索模块,下面我们会逐一讲解,这里先从宏观上看一下它们之间的工作流程 二.工作流程 三.数据模块 数据模块的主要作用是爬取网络上的数据,然后对数据进行清洗并保存到本地存储 一般来说,数据模块会采用非定向爬虫技术广泛爬取网络上的数据,以保证充足的数据源 但是由于本文只是演示,所以这里我们仅会采取定向爬虫爬取中国社会科学网上的部分文章素材

  • 如何手写一个简易的 Vuex

    前言 本文适合使用过 Vuex 的人阅读,来了解下怎么自己实现一个 Vuex. 基本骨架 这是本项目的src/store/index.js文件,看看一般 vuex 的使用 import Vue from 'vue' import Vuex from './myvuex' // 引入自己写的 vuex import * as getters from './getters' import * as actions from './actions' import state from './stat

  • 如何从零开始利用js手写一个Promise库详解

    前言 ECMAScript 是 JavaScript 语言的国际标准,JavaScript 是 ECMAScript 的实现.ES6 的目标,是使得 JavaScript 语言可以用来编写大型的复杂的应用程序,成为企业级开发语言. 概念 ES6 原生提供了 Promise 对象. 所谓 Promise,就是一个对象,用来传递异步操作的消息.它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的 API,可供进一步处理. 三道思考题 刚开始写前端的时候,处理异步请求经常用

  • JS手写一个自定义Promise操作示例

    本文实例讲述了JS手写一个自定义Promise操作.分享给大家供大家参考,具体如下: 经常在面试题中会看到,让你实现一个Promsie,或者问你实现Promise的原理,所以今天就尝试利用class类的形式来实现一个Promise 为了不与原生的Promise命名冲突,这里就简单命名为MyPromise. class MyPromise { constructor(executor) { let _this = this this.state = 'pending' // 当前状态 this.v

  • 模仿Spring手写一个简易的IOC

    这个小项目是我读过一点Spring的源码后,模仿Spring的IOC写的一个简易的IOC,当然Spring的在天上,我写的在马里亚纳海沟,哈哈 感兴趣的小伙伴可以去我的github拉取代码看着玩 地址: https://github.com/zhuchangwu/CIOC 项目中有两种方式实现IOC: 第一种是基于dom4j实现的解析XML配置文件版 第二种是基于自定义注解实现全配置版 全注解版 模仿Spring原生的IOC机制如下: Interface类型的beanDefinition不会被实

  • python基于Kivy写一个图形桌面时钟程序

    Kivy 是一个开源的 Python 第三方库,可以用来快速开发应用程序. 它有如下三个特点: 跨平台 Kivy 编写的程序可在 Linux,Windows,OS X,Android,iOS 和 Raspberry Pi 上运行. 商业友好 Kivy 基于 MIT 许可证进行开源,可以进行免费的商业使用. GPU 加速 Kivy 的图像引擎基于 Open ES 2 构建,性能出众. 除此之外 Kivy 也存在一些缺点,比如: 非原生的图形界面: 打包后的体积很大: 缺乏社区支持: 缺乏足够的示例

随机推荐