web框架简介-python内置WSGI+django

参考连接:老男孩培训老师

一、web应用流程:

  • 浏览器发送一个http请求
  • 服务器收到请求,生成一个html文档
  • 服务器把html文档作为一个响应的body发送给浏览器
  • 浏览器收到http响应,从http body取出html文档并显示

二、WSGI-web框架:

python内置的web服务器,检查用,框架用来解析http

step1:简单访问与响应

from wsgiref.simple_server import make_server


def application(environ, start_response):
    """
    sever端
    environ:封装所有请求信息的对象
    start_response:方便设置响应头--告诉浏览器,响应体是什么
    """
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, web!</h1>']  # 返回响应体

# ip 端口 应用名称
# 封装socket绑定bind与监听listen
httpd = make_server('', 8080, application)

print('Serving HTTP on port 8000...')
# application执行,开始监听HTTP请求:
httpd.serve_forever()

step2:添加不同的响应路径

from wsgiref.simple_server import make_server

def application(environ, start_response):
    # path 端口后面的路径
    path = environ['PATH_INFO']
    start_response('200 OK', [('Content-Type', 'text/html')])
    f1 = open("index1.html","rb")
    data1 = f1.read()
    f2 = open("index2.html","rb")
    data2 = f2.read()
    
    # 通过if elif else匹配路径
    if path=="/yuan":
        return [data1]
    elif path=="/alex":
        return [data2]
    else:
        return ["<h1>404</h1>".encode('utf8')]
 
httpd = make_server('', 8080, application)

httpd.serve_forever()

step3:解耦

from wsgiref.simple_server import make_server

def f1():
    f1 = open("index1.html","rb")
    data1 = f1.read()
    return [data1]

def f2():
    f2 = open("index2.html","rb")
    data2=f2.read()
    return [data2]

def application(environ, start_response):

    print(environ['PATH_INFO'])
    path = environ['PATH_INFO']
    start_response('200 OK', [('Content-Type', 'text/html')])


    if path=="/yuan":
        return f1()

    elif path=="/alex":
        return f2()

    else:
        return ["<h1>404</h1>".encode("utf8")]


httpd = make_server('', 8502, application)

print('Serving HTTP on port 8084...')

# 开始监听HTTP请求:
httpd.serve_forever()

step4:替代if else写路径

from wsgiref.simple_server import make_server


def f1(req):
    print(req)
    print(req["QUERY_STRING"])

    f1=open("index1.html","rb")
    data1=f1.read()
    return [data1]

def f2(req):
    """req:形参""" 
    f2=open("index2.html","rb")
    data2=f2.read()
    return [data2]

import time

# 模版以及数据库
def f3(req):        
    import time
    f3 = open("index3.html","rb")
    data3 = f3.read()
    times = time.strftime("%Y-%m-%d %X", time.localtime())
    # 后端:替换index3.html文件中 定义的变量!time!
    data3 = str(data3,"utf8").replace("!time!",str(times))

    return [data3.encode("utf8")]  # 字符串转字节


def routers():
    """
    这样就不用写if else来匹配路径了
    以后有页面就只需要在这里扩充urlpatterns
    """
    urlpatterns = (
        ('/yuan',f1),
        ('/alex',f2),
        ("/cur_time",f3)
    )
    return urlpatterns


def application(environ, start_response):
    """
    environ:封装所有请求信息的对象
    """
    print(environ['PATH_INFO'])
    path = environ['PATH_INFO']
    start_response('200 OK', [('Content-Type', 'text/html')])

    urlpatterns = routers()
    func = None  # 用来存f1 f2 f3
    for item in urlpatterns:
        if item[0] == path:
            func = item[1]
            break  # 匹配上退出
    if func:
        return func(environ)
    else:
        return ["<h1>404</h1>".encode("utf8")]

httpd = make_server('', 8518, application)

print('Serving HTTP on port 8084...')

# 开始监听HTTP请求:

httpd.serve_forever()

三、 MVC和MTV模式

MVC模式:所谓MVC就是把web应用分为三层:
    
    模型(Mode),数据库部分
    
    控制器(Controller)+url 业务逻辑与路径分发
    
    视图(View),html文件


Django的MTV分别代表:

   Model(模型):负责业务对象与数据库的对象(ORM)

   Template(模版):负责如何把页面展示给用户

   View(视图):负责业务逻辑,并在适当的时候调用Model和Template

   此外,Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

django实现流程

安装: pip3 install django --》 添加环境变量

#1 创建project

   django-admin startproject mysite

当前目录下会生成mysite的工程,目录结构如下

   mysite
   ---- manage.py(启动文件) 
   ---- mysite
      ---settings.py
      ---url.py(目录分配)
      ---wsgi.py(网络服务器:封装socket 和 解析http协议)
    

#2 创建APP,可创建多个应用

   python manage.py startapp  app01

#3 settings配置

   TEMPLATES

   STATICFILES_DIRS=(
        os.path.join(BASE_DIR,"statics"),
    )

   STATIC_URL = '/static/' 
   #  我们只能用 STATIC_URL,但STATIC_URL会按着你的STATICFILES_DIRS去找

#4 根据需求设计代码

       url.py
       view.py

#5 使用模版

     render(req,"index.html")   

#6 启动项目

   python manage.py runserver  127.0.0.1:8090

#7 连接数据库,操作数据

   model.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值