一、需求

  1.访问127.0.0.1/login,访问到login页面

  2.登陆成功,跳转到登陆后的页面

  3.登陆失败,跳转到登陆失败的页面

  4.用户账号密码验证

二、目录结构

  

三、代码

  day01.py

from wsgiref.simple_server import make_server

def foo1(request):
f = open("egon.html", 'rb')
data = f.read()
f.close()
return [data] def foo2(request):
f = open("alex.html", 'rb')
data = f.read()
return [data] def login(request):
f = open("login.html", 'rb')
data = f.read()
return [data] def login_after(request):
f = open("login_after.html", 'rb')
data = f.read()
return [data] def login_error(request):
f = open("login_error.html", 'rb')
data = f.read()
return [data] def auth(request):
user_union, password_union = request.get('QUERY_STRING').split('&')
_, username = user_union.split("=")
_, password = password_union.split("=")
if username == 'chenwei' and password == '':
return login_after(request)
else:
return login_error(request)
def routers():
urlpattern = [
('/login', login),
('/egon', foo1),
('/alex', foo2),
('/auth', auth),
]
return urlpattern def applicaion(environ,start_response):
path = environ.get('PATH_INFO')
start_response('200 OK', [('Content-Type', 'text/html')])
urlpattern = routers()
func = None for item in urlpattern:
if path == item[0]:
func = item[1]
break
if func:
return func(environ)
else:
return [b'']
t = make_server("", 8080, applicaion)
t.serve_forever()

  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>
<h1>welcome Alex</h1>
</body>
</html>

  egon.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>
<h1>Welcome egon</h1>
</body>
</html>

  login.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> <h1>登陆页面</h1>
<form action="http://localhost:8080/auth">
<p>用户名:<input type="text" name="username"/></p>
<p>密码:<input type="password" name="password"/></p>
<p>提交:<input type="submit"/></p>
</form>
</body>
</html>

  login_after.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>
<h1 style="color: red">登陆后页面跳转</h1>
</body>
</html>

  login_error.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>
<h1 style="color: yellow">登陆失败的页面</h1>
</body>
</html>

四、代码优化

  当我们在浏览器上输入一个url,实际上是向服务器发起一次get请求,而当我们提交数据的时候,通过post发送请求,因此我们可以通过判断第一次请求是否为post请求,来判断,用户是在提交表单还是在请求网页。所以,上述的day01.py代码,auth验证可以和login整合在一起。

def login(request):
if request.method == 'POST':
user_union, password_union = request.get('QUERY_STRING').split('&')
_, username = user_union.split("=")
_, password = password_union.split("=")
if username == 'chenwei' and password == '':
return login_after(request)
else:
return login_error(request) f = open("login.html", 'rb')
data = f.read()
return [data]

五、流程解析

    

模拟Djangoweb框架的更多相关文章

  1. 采用dom4j和反射模拟Spring框架的依赖注入功能

    Spring的依赖注入是指将对象的创建权交给Spring框架,将对象所依赖的属性注入进来的行为.在学习了dom4j后,其实也可以利用dom4j和反射做一个小Demo模拟Spring框架的这种功能.下面 ...

  2. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  3. 模拟spring框架注入实现原理

    这个我是参见了别人的一些东西,不是原创! 定义一些抽象的方法: package com.huxin.springinject.dao; public interface Person { public ...

  4. Python 之反射和普通方式对比(模拟Web框架)

    先模拟一个web页面的选择不同输出不同 vim day8-7.py #!/usr/bin/python # -*- coding:utf-8 -*- import home import accoun ...

  5. Django框架学习——python模拟Django框架(转载)

    原贴来源 http://wiki.woodpecker.org.cn/moin/ObpLovelyPython/AbtWebModules python实现web服务器 web开发首先要有web服务器 ...

  6. 模拟Hibernate框架的小demo

    该程序为尚学堂马士兵老师讲解,模拟了hibernate的原理,主要应用了字符串拼接,反射知识. step1,新建数据库 use jd; create table _student( _id int(1 ...

  7. Django-Web框架之创建项目和应用

    Django我们是基于python3来演示的.首先我们来安装一下django框架.使用pip3 install django安装的是最新的版本: 我们在pycharm中创建django工程.如图所示: ...

  8. .NET/C# 万能 HTTP 模拟请求框架

    我是一名 ASP.NET 程序员,专注于 B/S 项目开发.累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html HttpHelper ...

  9. 【Spring系列】- 手写模拟Spring框架

    简单模拟Spring 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 前言 上次已经学习了 ...

随机推荐

  1. 【leetcode 简单】 第七十七题 单词模式

    给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式. 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向 ...

  2. JavaScript辅助响应式

    js响应式 rem辅助响应式布局:其实就是指在HTML页面的大小不断变化的时候,里面的宽.高.字体等等也随之变化,主要是通过获取window.innerwidth的值来进行判断,7.5rem===10 ...

  3. Ubuntu 设置 sudo 开机自启动项 无需输入密码

    如果你想设置一个需要sudo权限执行的开机自启动项,而不需要输入密码,那么你需要把该程序加入  /etc/sudoers 中.要直线这个, 首先执行 sudo visudo ,在文件最后加入下面一行 ...

  4. 查看oracle数据库日志存放位置

    1,默认情况下,oracle的日志文件记录在$ORACLE/rdbms/log目录下 [oracle@oracle log]$ pwd /home/oracle/oracle/product/11.2 ...

  5. 全网最全JS正则表达式 校验数字

    Js代码 <script type="text/javascript"> function SubmitCk() { var reg = /^([a-zA-Z0-9]+ ...

  6. checkbox 全选和取消

    //全选 $("#checkall").click(function () { if (this.checked) { //如果当前点击的多选框被选中 $('input[type= ...

  7. C 数据结构堆

    引言 - 数据结构堆 堆结构都很耳熟, 从堆排序到优先级队列, 我们总会看见它的身影. 相关的资料太多了, 堆 - https://zh.wikipedia.org/wiki/%E5%A0%86%E7 ...

  8. React-Native 之 FlexBox介绍和使用

    # 前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会 ...

  9. centos7的防火墙(firewalld)

    Centos7中默认将原来的防火墙iptables升级为了firewalld,firewalld跟iptables比起来至少有两大好处: 1.firewalld可以动态修改单条规则,而不需要像ipta ...

  10. wpf设置某容器透明,而不应用到容器的子元素的方法

    以Border打比方: <Border.Background> <SolidColorBrush Opacity="0.4" Color="Black& ...