码迷,mamicode.com
首页 > Web开发 > 详细

web框架

时间:2019-06-30 18:43:54      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:har   res   简单的   用户   状态码   不同   gate   dex   interface   

http协议介绍:

  http协议对收发消息的格式要求

  每个http请求和响应都遵循相同的格式,一个http包含header和body两部分,body是可选的,http响应的header其中有一个content-type表明响应的内容格式。例如text/html表示html网页

  http get请求格式:

    技术图片

  http相应的格式:

    技术图片

技术图片

服务器程序和应用程序:

  对于真实开发python web程序来说,一般分为两部分:服务器程序和应用程序。

  服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。

  应用程序负责具体逻辑处理,为了方便应用程序的开发,就出现了众多的web框架,例如:django、flask、web.py。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。

  服务器程序就需要为不同的框架提供不同的支持,在真阳混乱的局面无论对于服务器还是框架,都是不好的。对于服务器来说,需要支持各种不同的框架,对弈框架来说,只要支持它的服务器才能够被开发出应用使用。

  这个时候标准化就变的尤为重要。可以设立一个标砖,只要服务器支持这个标准,框架也支持这个标准,就可以配合使用,一旦标准确定,双方各自实现,这样服务器就可以支持更多的标准的框架,框架也可以使用更多的支持标准的服务器。

  WSGI(web server gateway interface)就是一种规范,定义了使用python编写web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序键的耦合。

  常用的WSGI服务器uwsgi、Gunicorn、而python标准库提供的独立WSGI服务器叫wsgiref,django开发环境就是这个模块来做服务器

 

  wsgiref

    利用wsgiref模块来提我们自己写的web框架的socket框架的socket server部分:

import time
from wsgiref.simple_server import make_server

def index(url):
    # 打开index.html文件
    with open(‘index.html‘,‘r‘,encoding=‘utf-8‘) as f:
        s=f.read()
        now = str(time.time())
        s=s.replace(‘@@oo@@‘,now)
    return bytes(s,encoding=‘utf-8‘)
def home(url):
    # 打开home.html文件
    with open(‘home.html‘,‘r‘,encoding=‘utf-8‘) as f:
        s=f.read()
    return bytes(s,encoding=‘utf-8‘)

# 定义一个url和世纪要执行的函数的对应关系
list1=[
    (‘/index/‘,index),
    (‘/home/‘,home),
]

def run_server(environ,start_response):
    start_response(‘200 OK‘,[(‘Content-Type‘,‘text/html;charset=utf-8‘),])  #设置http响应的状态码和头信息
    url = environ[‘PATH_INFO‘]  # 取到用户输入的url
    func = None
    for i in list1:
        if i[0] == url:
            func = i[1]
            break
    if func:
        response = func(url)
    else:
        response = b‘404 not found!‘
    return [response,]

if __name__ == ‘__main__‘:
    httpd= make_server(‘127.0.0.1‘,8080,run_server)
    print(‘我在‘)
    httpd.serve_forever()

  # jinja2模块

  上面代码实现了一个简单的动态,完全可以从数据库中查询数据,然后去替换我html中对应内容,然后再发送给浏览器完成渲染,这个过程就相当于html模板渲染数据。本质上就是html内容中利用一些特殊的符号来替换要展示的数据,我们这里用的是我们自己定义的,可以用模板渲染有个线程的工具:jinja2

  下载jinja2:

  pip install jinja2

 

web框架

标签:har   res   简单的   用户   状态码   不同   gate   dex   interface   

原文地址:https://www.cnblogs.com/yangzhaon/p/11110702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!