Python实现手写一个类似django的web框架示例
作者:铠甲巨人 发布时间:2022-06-18 03:17:26
标签: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程序设计有所帮助。
来源:https://www.cnblogs.com/ArmoredTitan/p/7412573.html
0
投稿
猜你喜欢
- 初学ASP,程序是能勉强写出来了,但若每进行一次网站页面的改版,所有的源程序都将进行一次移植手术。为此所耗费的人力精力不计其数,甚至一不小心
- 最近试用mysql proxy,遇到若干问题,好在一一找到了解决方案,列出来备忘。这次使用的版本是0.6.x,也许新版本就没有这些问题了。无
- 好了,下面我们看看如何在服务器上生成.m3u文件并下传到客户端的:<%dim choose,path,mydb,myset,
- 函数可以参考:<% '注册论坛用户,参数说明 'username 用户登录名称 
- 1. 什么是存储过程?存储过程是SQL server所提供的Tran
- 今天我升级MYSQL到5.1的时候遇到的。写出来共享以下。1、[root@localhost mysql]# scripts/mysql_i
- fmtfmt是go语言中的格式化输入输出库,其中主要分为两个部分,分别是输出部分和输入部分。输出PrintPrint函数的主要功能是输出,和
- 由于系统自带的MySQL默认字符集不是gbk,因此给数据库的推广应用以及中文程序的开发带来极大的不便,在没完没了的GBK和UTF8的转换过程
- 代码如下:<% Rem xml缓存类 '----------------------------
- 通常,当一个页面有太多信息要显示,而一页塞又不下所有信。为了请求速度、美观以及其他的各种理由,分页就会被我们请过来。让我们的用户可以选择是否
- 1.认识数组数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象Javascript不支持多维数组,但是因为数组里面可以包含对象(
- isset(PHP 3, PHP 4, PHP 5 )isset -- 检测变量是否设置描述bool isset ( mixed var [
- 启用Ad Hoc Distributed Queries:exec sp_configure 'show advanced opti
- 相同记录行如何取最大值我想这个东西在作一些相关采购系统或成本报价系统应该很有用的吧取当前的最有效的价格.记录下来与大家分享!--测试数据&n
- MSXML是微软非托管代码栈中最为核心的XML服务集合,不但适合基于COM的开发应用,更是微软AJAX解决方案和客户端XSLT解决方案的核心
- 以下的文章主要是介绍SQL Server数据转换服务的4妙用之执行一些自动化的操作。在SQL Server数据库的实际操作管理中,数据库管理
- 当使用MySQL做站点的时候,肯定会有不知道的错误发生,怎么记录呢?以下是具体解决方法:class.method //建立错误日志 func
- 目录表示时间的方式1. 调用语法:2. time概述3. 时间获取4. 时间格式化(将时间以合理的方式展示出来)5. 程序计时应用6. 示例
- 我们有时候看到一些文章因为一行的字符超长而把一些表格或DIV撑开或字符写到溢出了.如何防止表格防止撑开,表格不被内容撑开,单行字符超长div
- 问题:每次打开pycharm打开py文件光标都是insert模式, 像下面图片那样解决方案:讲Tools里面的Vim Emulator勾选去