Django-自定义web框架
自定义web框架
1、准备登录的html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="icon" href="favicon.ico">
</head>
<body>
<!--提交的位置 点击提交按钮相当于请求了这个网址-->
<form action="http://127.0.0.1:9000/auth" method="get">
<input type="text" name="username" placeholder="username">
<input type="password" name="password" placeholder="password">
<button>提交</button>
</form>
</body>
</html>
登录页面
2、将html页面发送到服务端
# -*- coding: utf-8 -*-
# @Time : 2019/5/16 19:16
import webauth
from wsgiref.simple_server import make_server
from urllib.parse import parse_qs
def auth(environ):
# 判断提交按钮的请求是什么请求
if environ.get("REQUEST_METHOD")=="GET":
# 获取用户输入的信息 username=xiaohei&password=123
request_data = environ['QUERY_STRING']
# 对信息进行解析 {'username': ['xiaohei'], 'password': ['123']}
re_data = parse_qs(request_data)
# 分别取出用户名和密码
username = re_data['username'][0]
password = re_data['password'][0]
# 提交给服务器进行验证
ret = webauth.auth(username,password)
# 服务器返回验证信息
if ret:
with open("websuccess.html", "rb") as f:
content = f.read()
return [content]
else:
# 验证失败
return [b"login failure"] def login(environ):
with open("login.html","rb") as f:
content = f.read()
return [content]
def log(environ):
with open("favicon.ico","rb") as f:
content = f.read()
return [content]
li = [
("/login",login),
("/favicon.ico",log),
("/auth",auth), ]
def app(environ, start_response):
# 封装响应信息
start_response('200 OK', [('Content-Type', 'text/html'), ('k1', 'v1')])
# environ 封装好的请求数据,字典的格式
path = environ["PATH_INFO"]
for i in li:
# 判断用户输入的url
if i[0] == path:
# 调用url对应的函数
ret = i[1](environ)
return ret
break
else:
# 用户输入的网址不合法
return [b"404 not found"] # 绑定ip和端口,有人连接就调用app函数
httpp = make_server("127.0.0.1",9000,app)
# 开始监听http请求
httpp.serve_forever()
服务端页面
3、数据库验证登录信息
# -*- coding: utf-8 -*-
# @Time : 2019/5/16 19:42
import pymysql
# 数据库信息验证,验证用户名和密码
def auth(username,password):
db = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
password="root",
database="day53",
charset="utf8" # 不能写-
)
cursor = db.cursor(pymysql.cursors.DictCursor)
sql = "select * from info where username=%s and password=%s;"
res = cursor.execute(sql,[username,password])
print(res)
if res:
return True
else:
return False
验证登录
4、返回登录成功页面

Django-自定义web框架的更多相关文章
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- 自定义web框架(django)
Django基础了解知识 HTTP协议(超文本传输协议) HTTP协议 四大特性: 基于TCP/IP之上作用于应用层 基于请求响应 无状态 引申出cookie session token-- 无连接 ...
- day48:django前戏之HTTP协议&自定义web框架
目录 1.HTTP协议 1.HTTP协议简介 2.HTTP协议概述 3.HTTP协议工作原理 4.HTTP协议请求方法 5.HTTP协议状态码 6.URL 7.HTTP请求格式 8.HTTP响应格式 ...
- Django: 之Web框架完美解析
Web框架解析 Web通过Socket来监听客户端,,一旦发现客户发送的信息立刻接受.接受之后在服务端查找客户的请求,找到请求返回给用户,断开.这是一个连接,不断的接收,不断的返回. #!/usr/b ...
- Web框架本质及第一个Django实例 Web框架
Web框架本质及第一个Django实例 Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web ...
- Django之Web框架本质及第一个Django实例
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...
- Python自定义web框架、Jinja2
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server ...
- django基础(web框架,http协议,django安装)
学习Django之前我们先来看什么是OSI七层模型: 应用层 表示层 应用层(五层模型中把这三层合成一个应用层) http协议 会话层 传输层 提供端口对 ...
- Django学习---Web框架及基础知识
Django学习---Web框架 web框架的本质 我们在学socket,我们创建一个socketserver,然后运行起来,有一个client客户端要连接socket服务端,连接上之后,如果两边都没 ...
- Django之web框架和url路由
一.web框架 1.什么是web框架 Web框架是用来进行Web应用开发的一个软件架构,开发者在基于Web框架实现自己的业务逻辑.Web应用本质上就是一个socket服务端,而用户的浏览器就是一个so ...
随机推荐
- 【Trie】背单词
参考博客: https://www.luogu.org/problemnew/solution/P3294 https://blog.csdn.net/VictoryCzt/article/detai ...
- Date及DateFormat用法
Date 与DateFormat之间的转化String <————>Date Date与Calendar 之间的转化Long<————>Date 日历小程序 Scanner i ...
- IntelliJ IDEA 统一设置编码为utf-8编码
问题一: File->Settings->Editor->File Encodings 问题二: File->Other Settings->Default Settin ...
- JAVA中ArrayList重写比较方法
ArrayList的sort方法重写: 当ArrayList中存放的为含有多个成员变量的数据类型时,在进行sort排序时要重写比较方法,一般都写在这个数据类型类的内部如: package 算法竞赛入门 ...
- Qt 中配置 c99的问题
Qt 5.3 版本 报错原因是c99标准问题的话,可以尝试下面方法 打开项目中xxx.pro工程文件 加入如下语句: QMAKE_CFLAGS += -std=c99
- es 启动报错 内存太小
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] elastics ...
- es string 分词完整示例
"products_name_en": { "type": "string", //字符串类型 ...
- openresty获取nginx中的变量
在OpenResty中如何引用这些变量呢? 规则很简单, 如$remote_addr, 在OpenResty里面使用就是ngx.var.remote_adddr.
- django的几种缓存配置
前言 首先说,为什么要用缓存的,由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存 ...
- 二十,基于K8S集群的PaaS简介
目录 一.概述 二.生产环境部署k8s,接下来我们描述一下在真正生产环境中我们部署k8s应该部署成什么样子 一.概述 1.通过以往的学习应该可以了解到k8s 和以往提到的devops概念更容易落地了. ...