首页 > 其他分享 >web框架

web框架

时间:2022-11-28 00:12:55浏览次数:43  
标签:__ web 框架 request html environ data

一 web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

1.1 wsgiref模块

最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。

如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。

正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI:Web Server Gateway Interface。而wsgiref模块就是python基于wsgi协议开发的服务模块。

from wsgiref.simple_server import make_server

def mya(environ, start_response):
    print(environ)
    start_response('200 OK', [('Content-Type', 'text/html')])
    if environ.get('PATH_INFO') == '/index':
        with open('index.html','rb') as f:
            data=f.read()

    elif environ.get('PATH_INFO') == '/login':
        with open('login.html', 'rb') as f:
            data = f.read()
    else:
        data=b'<h1>Hello, web!</h1>'
    return [data]

if __name__ == '__main__':
    myserver = make_server('', 8011, mya)
    print('监听8010')
    myserver.serve_forever()

二 手撸自己的Web框架

img

2.1 models.py

'''
链接数据库返回字典格式:
cursor=pymysql.cursors.DictCursor
'''

import pymysql
#连接数据库
conn = pymysql.connect(host='127.0.0.1',port= 3306,user = 'root',passwd='123456',db='web') #db:库名
#创建游标
cur = conn.cursor()

sql='''
create table userinfo(
        id INT PRIMARY KEY ,
        name VARCHAR(32) ,
        password VARCHAR(32)
)

'''

cur.execute(sql)

#提交
conn.commit()
#关闭指针对象
cur.close()
#关闭连接对象
conn.close()

2.2 myserver.py

from wsgiref.simple_server import make_server

from urls import url_patters

def mya(environ, start_response):
    # print(environ)
    start_response('200 OK', [('Content-Type', 'text/html')])
    func = None
    for item in url_patters:
        if item[0] == environ.get('PATH_INFO'):
            func = item[1]
            break
    if func:
        data = func(environ)
        return [data]
    else:
        return [b'404']


if __name__ == '__main__':
    myserver = make_server('', 8011, mya)
    print('监听8010')
    myserver.serve_forever()

2.3 urls.py

from views import *
url_patters = [
    ('/login', login),
    ('/index', index),
    ('/time', time),
]

2.4 views.py

def index(environ):
    with open('templates/index.html', 'rb') as f:
        data = f.read()
    return data
def time(environ):
    import datetime
    now=datetime.datetime.now().strftime('%y-%m-%d %X')
    print(now)
    return now.encode('utf-8')
from urllib.parse import parse_qs
import pymysql
def login(request):
    if request.get("REQUEST_METHOD") == "POST":
        try:
            request_body_size = int(request.get('CONTENT_LENGTH', 0))
        except (ValueError):
            request_body_size = 0

        request_body = request['wsgi.input'].read(request_body_size)
        data = parse_qs(request_body)

        user = data.get(b"user")[0].decode("utf8")
        pwd = data.get(b"pwd")[0].decode("utf8")

        # 连接数据库
        conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='web')  # db:库名
        # 创建游标
        cur = conn.cursor()
        SQL = "select * from userinfo WHERE NAME ='%s' AND PASSWORD ='%s'" % (user, pwd)
        cur.execute(SQL)

        if cur.fetchone():

            f = open("templates/backend.html", "rb")
            data = f.read()
            data = data.decode("utf8")
            return data.encode("utf8")

        else:
            print("OK456")
            return b"user or pwd is wrong"

    else:
        f = open("templates/login.html", "rb")
        data = f.read()
        f.close()
        return data

2.5 tempaltes下backend.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
登录成功
</body>
</html>

2.5 tempaltes下index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
index
</body>
</html>

2.5 tempaltes下login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h4>登录页面</h4>
<form action="http://127.0.0.1:8011/login" method="post">
     用户名 <input type="text" name="user">
     密码 <input type="text" name="pwd">
    <input type="submit">
</form>
</body>
</html>

三 其它socket服务端

    'cgi': CGIServer,
    'flup': FlupFCGIServer,
    'wsgiref': WSGIRefServer,
    'waitress': WaitressServer,
    'cherrypy': CherryPyServer,
    'paste': PasteServer,
    'fapws3': FapwsServer,
    'tornado': TornadoServer,
    'gae': AppEngineServer,
    'twisted': TwistedServer,
    'diesel': DieselServer,
    'meinheld': MeinheldServer,
    'gunicorn': GunicornServer,
    'eventlet': EventletServer,
    'gevent': GeventServer,
    'geventSocketIO':GeventSocketIOServer,
    'rocket': RocketServer,
    'bjoern' : BjoernServer,
    'auto': AutoServer,

都遵循一个协议wsgi(Web Server Gateway Interface web服务网关接口)

标签:__,web,框架,request,html,environ,data
From: https://www.cnblogs.com/shclbear/p/16931083.html

相关文章

  • Web应用
    一Web应用程序是什么Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件应用程序有两种......
  • 拓端tecdat|采用SPSS Modeler编程指导的Web复杂网络对所有腧穴进行分析
    采用SPSSModeler的Web复杂网络对所有腧穴进行分析 背景:本次腧穴配伍关联规则分析,以针灸治疗FC的113例处方中使用频次在5次及以上的25种腧穴为关联......
  • nginx反向代理websocket wss或ws端口
    1.直接上nginx配置文件注意:后端端口使用wss:proxy_passhttps://wss_8;后端端口使用ws:proxy_passhttp://wss_8;upstreamwss_8{server127.0.0.1:8004;}#......
  • 学习笔记-Django框架的使用
    前言:本博客为技术小白的记录学习过程,有错误或不解的地方请指出!!!一.安装和创建项目1.安装1.1命令行下载pip3installdjango==1.11.11 (可以跟镜像地址:-i+镜像地址......
  • Haproxy搭建web群集
    一.常见的web集群调度器1、目前常见的web集群调度器分为软件和硬件2、软件通常使用开源的LVS、Haproxy、Nginx​LVS性能最好,但搭建复杂。Nginx并发量,性能低于Haproxy......
  • web性能分析与测试工具介绍
    你是否有过以下一些经历?  面试中    说一下做过哪些性能优化?    从输入url到看到页面内容经历了哪些过程?什么是web性能?简单来说就是网站是不是够快......
  • BUUCTF WEB CTF
    [极客大挑战2019]EasySQL[HCTF2018]WarmUp/source.php<?phphighlight_file(__FILE__);classemmm{publicstaticfunctioncheckFile(&$pa......
  • 介绍27款经典的CSS框架
    利用CSS框架,可以简化你的工作,提高工作效率。CSS框架是一系列CSS文件的集合体,包含了基本的元素重置,页面排版、网格布局、表单样式、通用规则等代码块。下面给你推荐了27......
  • from psd to html ,building a set of website designs step by step
    FromPSDtoHTML,BuildingaSetofWebsiteDesignsStepbyStep​​CollisTa'eed​​​onJun19th2008with​​371comments​​TutorialDetailsPrograms:HT......
  • 无法在WEB服务器上启动调试,Web 服务器配置不正确
    访问IIS元数据库失败思考可能是次序出了问题,解决1、打开CMD,进入C:\WINDOWS\Microsoft.NET\Framework\v2.0.507272、输入aspnet_regiis.exe-i稍等片刻,注册成功就解决......